project generated from template

master
Stefan Haslinger 2022-04-27 07:53:16 +00:00
commit 2c887f28f9
49 changed files with 9770 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@ -0,0 +1,10 @@
node_modules/
dist/
.scp/
.env
Makefile*.mta
mta_archives
mta-*
resources
archive.zip
.*_mta_build_tmp

46
README.md Normal file
View File

@ -0,0 +1,46 @@
## Application Details
| |
| ------------- |
|**Generation Date and Time**<br>Wed Apr 27 2022 07:43:37 GMT+0000 (Coordinated Universal Time)|
|**App Generator**<br>@sap/generator-fiori-freestyle|
|**App Generator Version**<br>1.5.4|
|**Generation Platform**<br>SAP Business Application Studio|
|**Floorplan Used**<br>1worklist|
|**Service Type**<br>SAP System (ABAP On Premise)|
|**Service URL**<br>https://sapes5.sapdevcenter.com/sap/opu/odata/iwbep/GWSAMPLE_BASIC
|**Module Name**<br>manageproducts|
|**Application Title**<br>Manage Products|
|**Namespace**<br>opensap.manageproducts|
|**UI5 Theme**<br>sap_fiori_3|
|**UI5 Version**<br>1.84.14|
|**Enable Code Assist Libraries**<br>False|
|**Add Eslint configuration**<br>False|
|**Object collection**<br>ProductSet|
|**Object collection key**<br>ProductID|
|**Object ID**<br>ProductID|
|**Object number**<br>Price|
|**Object unit of measure**<br>CurrencyCode|
## manageproducts
A Fiori application.
### Starting the generated app
- This app has been generated using the SAP Fiori tools - App Generator, as part of the SAP Fiori tools suite. In order to launch the generated app, simply run the following from the generated app root folder:
```
npm start
```
- It is also possible to run the application using mock data that reflects the OData Service URL supplied during application generation. In order to run the application with Mock Data, run the following from the generated app root folder:
```
npm run start-mock
```
#### Pre-requisites:
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)

6868
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

37
package.json Normal file
View File

@ -0,0 +1,37 @@
{
"name": "manageproducts",
"version": "0.0.1",
"private": true,
"description": "A Fiori application.",
"keywords": [
"ui5",
"openui5",
"sapui5"
],
"main": "webapp/index.html",
"dependencies": {},
"devDependencies": {
"@ui5/cli": "^2.14.1",
"@sap/ux-ui5-tooling": "1",
"@sap/ux-ui5-fe-mockserver-middleware": "1"
},
"scripts": {
"start": "fiori run --open \"test/flpSandbox.html?sap-client=002&sap-ui-xx-viewCache=false#opensapmanageproductsmanageproducts-display\"",
"start-local": "fiori run --config ./ui5-local.yaml --open \"test/flpSandbox.html?sap-client=002&sap-ui-xx-viewCache=false#opensapmanageproductsmanageproducts-display\"",
"build": "ui5 build --config=ui5.yaml --clean-dest --dest dist",
"deploy": "fiori verify",
"deploy-config": "fiori add deploy-config",
"start-noflp": "fiori run --open \"index.html?sap-client=002&sap-ui-xx-viewCache=false\"",
"start-mock": "fiori run --config ./ui5-mock.yaml --open \"test/flpSandbox.html?sap-client=002&sap-ui-xx-viewCache=false#opensapmanageproductsmanageproducts-display\"",
"start-variants-management": "fiori run --open \"preview.html?&sap-client=002&sap-ui-xx-viewCache=false&fiori-tools-rta-mode=true&sap-ui-rta-skip-flex-validation=true#preview-app\"",
"unit-tests": "fiori run --open test/unit/unitTests.qunit.html",
"int-tests": "fiori run --open test/integration/opaTests.qunit.html"
},
"ui5": {
"dependencies": [
"@sap/ux-ui5-tooling",
"@sap/ux-ui5-fe-mockserver-middleware"
]
},
"sapuxLayer": "CUSTOMER_BASE"
}

49
ui5-local.yaml Normal file
View File

@ -0,0 +1,49 @@
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
specVersion: "2.5"
metadata:
name: opensap.manageproducts.manageproducts
type: application
framework:
name: SAPUI5
version: 1.84.14
libraries:
- name: sap.m
- name: sap.ui.core
- name: sap.f
- name: sap.suite.ui.generic.template
- name: sap.ui.comp
- name: sap.ui.generic.app
- name: sap.ui.table
- name: sap.ushell
- name: themelib_sap_fiori_3
server:
customMiddleware:
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
delay: 300
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
backend:
- path: /sap
url: https://sapes5.sapdevcenter.com
client: '002'
destination: ES5
- name: sap-fe-mockserver
beforeMiddleware: csp
configuration:
service:
urlPath: /sap/opu/odata/iwbep/GWSAMPLE_BASIC
metadataXmlPath: ./webapp/localService/metadata.xml
mockdataRootPath: ./webapp/localService/data
generateMockData: true
- name: fiori-tools-preview
afterMiddleware: fiori-tools-appreload
configuration:
component: opensap.manageproducts.manageproducts
ui5Theme: sap_fiori_3

36
ui5-mock.yaml Normal file
View File

@ -0,0 +1,36 @@
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
specVersion: "2.5"
metadata:
name: opensap.manageproducts.manageproducts
type: application
server:
customMiddleware:
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
ui5:
path:
- /resources
- /test-resources
url: https://ui5.sap.com
backend:
- path: /sap
url: https://sapes5.sapdevcenter.com
client: '002'
destination: ES5
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
delay: 300
- name: sap-fe-mockserver
beforeMiddleware: csp
configuration:
service:
urlPath: /sap/opu/odata/iwbep/GWSAMPLE_BASIC
metadataXmlPath: ./webapp/localService/metadata.xml
mockdataRootPath: ./webapp/localService/data
generateMockData: true

33
ui5.yaml Normal file
View File

@ -0,0 +1,33 @@
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
specVersion: "2.5"
metadata:
name: opensap.manageproducts.manageproducts
type: application
server:
customMiddleware:
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
ui5:
path:
- /resources
- /test-resources
url: https://ui5.sap.com
backend:
- path: /sap
url: https://sapes5.sapdevcenter.com
client: '002'
destination: ES5
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
delay: 300
- name: fiori-tools-preview
afterMiddleware: fiori-tools-appreload
configuration:
component: opensap.manageproducts.manageproducts
ui5Theme: sap_fiori_3

71
webapp/Component.js Normal file
View File

@ -0,0 +1,71 @@
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/Device",
"./model/models",
"./controller/ErrorHandler"
], function (UIComponent, Device, models, ErrorHandler) {
"use strict";
return UIComponent.extend("opensap.manageproducts.manageproducts.Component", {
metadata : {
manifest: "json"
},
/**
* The component is initialized by UI5 automatically during the startup of the app and calls the init method once.
* In this function, the device models are set and the router is initialized.
* @public
* @override
*/
init : function () {
// call the base component's init function
UIComponent.prototype.init.apply(this, arguments);
// initialize the error handler with the component
this._oErrorHandler = new ErrorHandler(this);
// set the device model
this.setModel(models.createDeviceModel(), "device");
// create the views based on the url/hash
this.getRouter().initialize();
},
/**
* The component is destroyed by UI5 automatically.
* In this method, the ErrorHandler is destroyed.
* @public
* @override
*/
destroy : function () {
this._oErrorHandler.destroy();
// call the base component's destroy function
UIComponent.prototype.destroy.apply(this, arguments);
},
/**
* This method can be called to determine whether the sapUiSizeCompact or sapUiSizeCozy
* design mode class should be set, which influences the size appearance of some controls.
* @public
* @return {string} css class, either 'sapUiSizeCompact' or 'sapUiSizeCozy' - or an empty string if no css class should be set
*/
getContentDensityClass : function() {
if (this._sContentDensityClass === undefined) {
// check whether FLP has already set the content density class; do nothing in this case
// eslint-disable-next-line sap-no-proprietary-browser-api
if (document.body.classList.contains("sapUiSizeCozy") || document.body.classList.contains("sapUiSizeCompact")) {
this._sContentDensityClass = "";
} else if (!Device.support.touch) { // apply "compact" mode if touch is not supported
this._sContentDensityClass = "sapUiSizeCompact";
} else {
// "cozy" in case of touch support; default for most sap.m controls, but needed for desktop-first controls like sap.ui.table.Table
this._sContentDensityClass = "sapUiSizeCozy";
}
}
return this._sContentDensityClass;
}
});
});

View File

@ -0,0 +1,14 @@
sap.ui.define([
"./BaseController"
], function (BaseController) {
"use strict";
return BaseController.extend("opensap.manageproducts.manageproducts.controller.App", {
onInit : function () {
// apply content density mode to root view
this.getView().addStyleClass(this.getOwnerComponent().getContentDensityClass());
}
});
});

View File

@ -0,0 +1,65 @@
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/core/UIComponent",
"sap/m/library"
], function (Controller, UIComponent, mobileLibrary) {
"use strict";
// shortcut for sap.m.URLHelper
var URLHelper = mobileLibrary.URLHelper;
return Controller.extend("opensap.manageproducts.manageproducts.controller.BaseController", {
/**
* Convenience method for accessing the router.
* @public
* @returns {sap.ui.core.routing.Router} the router for this component
*/
getRouter : function () {
return UIComponent.getRouterFor(this);
},
/**
* Convenience method for getting the view model by name.
* @public
* @param {string} [sName] the model name
* @returns {sap.ui.model.Model} the model instance
*/
getModel : function (sName) {
return this.getView().getModel(sName);
},
/**
* Convenience method for setting the view model.
* @public
* @param {sap.ui.model.Model} oModel the model instance
* @param {string} sName the model name
* @returns {sap.ui.mvc.View} the view instance
*/
setModel : function (oModel, sName) {
return this.getView().setModel(oModel, sName);
},
/**
* Getter for the resource bundle.
* @public
* @returns {sap.ui.model.resource.ResourceModel} the resourceModel of the component
*/
getResourceBundle : function () {
return this.getOwnerComponent().getModel("i18n").getResourceBundle();
},
/**
* Event handler when the share by E-Mail button has been clicked
* @public
*/
onShareEmailPress : function () {
var oViewModel = (this.getModel("objectView") || this.getModel("worklistView"));
URLHelper.triggerEmail(
null,
oViewModel.getProperty("/shareSendEmailSubject"),
oViewModel.getProperty("/shareSendEmailMessage")
);
}
});
});

View File

@ -0,0 +1,77 @@
sap.ui.define([
"sap/ui/base/Object",
"sap/m/MessageBox",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator"
], function (UI5Object, MessageBox, Filter, FilterOperator) {
"use strict";
return UI5Object.extend("opensap.manageproducts.manageproducts.controller.ErrorHandler", {
/**
* Handles application errors by automatically attaching to the model events and displaying errors when needed.
* @class
* @param {sap.ui.core.UIComponent} oComponent reference to the app's component
* @public
* @alias opensap.manageproducts.manageproducts.controller.ErrorHandler
*/
constructor : function (oComponent) {
var oMessageManager = sap.ui.getCore().getMessageManager(),
oMessageModel = oMessageManager.getMessageModel(),
oResourceBundle = oComponent.getModel("i18n").getResourceBundle(),
sErrorText = oResourceBundle.getText("errorText"),
sMultipleErrors = oResourceBundle.getText("multipleErrorsText");
this._oComponent = oComponent;
this._bMessageOpen = false;
this.oMessageModelBinding = oMessageModel.bindList("/", undefined,
[], new Filter("technical", FilterOperator.EQ, true));
this.oMessageModelBinding.attachChange(function (oEvent) {
var aContexts = oEvent.getSource().getContexts(),
aMessages = [],
sErrorTitle;
if (this._bMessageOpen || !aContexts.length) {
return;
}
// Extract and remove the technical messages
aContexts.forEach(function (oContext) {
aMessages.push(oContext.getObject());
});
oMessageManager.removeMessages(aMessages);
// Due to batching there can be more than one technical message. However the UX
// guidelines say "display a single message in a message box" assuming that there
// will be only one at a time.
sErrorTitle = aMessages.length === 1 ? sErrorText : sMultipleErrors;
this._showServiceError(sErrorTitle, aMessages[0].message);
}, this);
},
/**
* Shows a {@link sap.m.MessageBox} when a service call has failed.
* Only the first error message will be displayed.
* @param {string} sErrorTitle A title for the error message
* @param {string} sDetails A technical error to be displayed on request
* @private
*/
_showServiceError : function (sErrorTitle, sDetails) {
this._bMessageOpen = true;
MessageBox.error(
sErrorTitle,
{
id : "serviceErrorMessageBox",
details: sDetails,
styleClass: this._oComponent.getContentDensityClass(),
actions: [MessageBox.Action.CLOSE],
onClose: function () {
this._bMessageOpen = false;
}.bind(this)
}
);
}
});
});

View File

@ -0,0 +1,18 @@
sap.ui.define([
"./BaseController"
], function (BaseController) {
"use strict";
return BaseController.extend("opensap.manageproducts.manageproducts.controller.NotFound", {
/**
* Navigates to the worklist when the link is pressed
* @public
*/
onLinkPressed : function () {
this.getRouter().navTo("worklist");
}
});
});

View File

@ -0,0 +1,115 @@
sap.ui.define([
"./BaseController",
"sap/ui/model/json/JSONModel",
"sap/ui/core/routing/History",
"../model/formatter"
], function (BaseController, JSONModel, History, formatter) {
"use strict";
return BaseController.extend("opensap.manageproducts.manageproducts.controller.Object", {
formatter: formatter,
/* =========================================================== */
/* lifecycle methods */
/* =========================================================== */
/**
* Called when the worklist controller is instantiated.
* @public
*/
onInit : function () {
// Model used to manipulate control states. The chosen values make sure,
// detail page shows busy indication immediately so there is no break in
// between the busy indication for loading the view's meta data
var oViewModel = new JSONModel({
busy : true,
delay : 0
});
this.getRouter().getRoute("object").attachPatternMatched(this._onObjectMatched, this);
this.setModel(oViewModel, "objectView");
},
/* =========================================================== */
/* event handlers */
/* =========================================================== */
/**
* Event handler for navigating back.
* It there is a history entry we go one step back in the browser history
* If not, it will replace the current entry of the browser history with the worklist route.
* @public
*/
onNavBack : function() {
var sPreviousHash = History.getInstance().getPreviousHash();
if (sPreviousHash !== undefined) {
// eslint-disable-next-line sap-no-history-manipulation
history.go(-1);
} else {
this.getRouter().navTo("worklist", {}, true);
}
},
/* =========================================================== */
/* internal methods */
/* =========================================================== */
/**
* Binds the view to the object path.
* @function
* @param {sap.ui.base.Event} oEvent pattern match event in route 'object'
* @private
*/
_onObjectMatched : function (oEvent) {
var sObjectId = oEvent.getParameter("arguments").objectId;
this._bindView("/ProductSet" + sObjectId);
},
/**
* Binds the view to the object path.
* @function
* @param {string} sObjectPath path to the object to be bound
* @private
*/
_bindView : function (sObjectPath) {
var oViewModel = this.getModel("objectView");
this.getView().bindElement({
path: sObjectPath,
events: {
change: this._onBindingChange.bind(this),
dataRequested: function () {
oViewModel.setProperty("/busy", true);
},
dataReceived: function () {
oViewModel.setProperty("/busy", false);
}
}
});
},
_onBindingChange : function () {
var oView = this.getView(),
oViewModel = this.getModel("objectView"),
oElementBinding = oView.getElementBinding();
// No data for the binding
if (!oElementBinding.getBoundContext()) {
this.getRouter().getTargets().display("objectNotFound");
return;
}
var oResourceBundle = this.getResourceBundle(),
oObject = oView.getBindingContext().getObject(),
sObjectId = oObject.ProductID,
sObjectName = oObject.ProductSet;
oViewModel.setProperty("/busy", false);
oViewModel.setProperty("/shareSendEmailSubject",
oResourceBundle.getText("shareSendEmailObjectSubject", [sObjectId]));
oViewModel.setProperty("/shareSendEmailMessage",
oResourceBundle.getText("shareSendEmailObjectMessage", [sObjectName, sObjectId, location.href]));
}
});
});

View File

@ -0,0 +1,148 @@
sap.ui.define([
"./BaseController",
"sap/ui/model/json/JSONModel",
"../model/formatter",
"sap/ui/model/Filter",
"sap/ui/model/FilterOperator"
], function (BaseController, JSONModel, formatter, Filter, FilterOperator) {
"use strict";
return BaseController.extend("opensap.manageproducts.manageproducts.controller.Worklist", {
formatter: formatter,
/* =========================================================== */
/* lifecycle methods */
/* =========================================================== */
/**
* Called when the worklist controller is instantiated.
* @public
*/
onInit : function () {
var oViewModel;
// keeps the search state
this._aTableSearchState = [];
// Model used to manipulate control states
oViewModel = new JSONModel({
worklistTableTitle : this.getResourceBundle().getText("worklistTableTitle"),
shareSendEmailSubject: this.getResourceBundle().getText("shareSendEmailWorklistSubject"),
shareSendEmailMessage: this.getResourceBundle().getText("shareSendEmailWorklistMessage", [location.href]),
tableNoDataText : this.getResourceBundle().getText("tableNoDataText")
});
this.setModel(oViewModel, "worklistView");
},
/* =========================================================== */
/* event handlers */
/* =========================================================== */
/**
* Triggered by the table's 'updateFinished' event: after new table
* data is available, this handler method updates the table counter.
* This should only happen if the update was successful, which is
* why this handler is attached to 'updateFinished' and not to the
* table's list binding's 'dataReceived' method.
* @param {sap.ui.base.Event} oEvent the update finished event
* @public
*/
onUpdateFinished : function (oEvent) {
// update the worklist's object counter after the table update
var sTitle,
oTable = oEvent.getSource(),
iTotalItems = oEvent.getParameter("total");
// only update the counter if the length is final and
// the table is not empty
if (iTotalItems && oTable.getBinding("items").isLengthFinal()) {
sTitle = this.getResourceBundle().getText("worklistTableTitleCount", [iTotalItems]);
} else {
sTitle = this.getResourceBundle().getText("worklistTableTitle");
}
this.getModel("worklistView").setProperty("/worklistTableTitle", sTitle);
},
/**
* Event handler when a table item gets pressed
* @param {sap.ui.base.Event} oEvent the table selectionChange event
* @public
*/
onPress : function (oEvent) {
// The source is the list item that got pressed
this._showObject(oEvent.getSource());
},
/**
* Event handler for navigating back.
* Navigate back in the browser history
* @public
*/
onNavBack : function() {
// eslint-disable-next-line sap-no-history-manipulation
history.go(-1);
},
onSearch : function (oEvent) {
if (oEvent.getParameters().refreshButtonPressed) {
// Search field's 'refresh' button has been pressed.
// This is visible if you select any main list item.
// In this case no new search is triggered, we only
// refresh the list binding.
this.onRefresh();
} else {
var aTableSearchState = [];
var sQuery = oEvent.getParameter("query");
if (sQuery && sQuery.length > 0) {
aTableSearchState = [new Filter("ProductID", FilterOperator.Contains, sQuery)];
}
this._applySearch(aTableSearchState);
}
},
/**
* Event handler for refresh event. Keeps filter, sort
* and group settings and refreshes the list binding.
* @public
*/
onRefresh : function () {
var oTable = this.byId("table");
oTable.getBinding("items").refresh();
},
/* =========================================================== */
/* internal methods */
/* =========================================================== */
/**
* Shows the selected item on the object page
* @param {sap.m.ObjectListItem} oItem selected Item
* @private
*/
_showObject : function (oItem) {
this.getRouter().navTo("object", {
objectId: oItem.getBindingContext().getPath().substring("/ProductSet".length)
});
},
/**
* Internal helper method to apply both filter and search state together on the list binding
* @param {sap.ui.model.Filter[]} aTableSearchState An array of filters for the search
* @private
*/
_applySearch: function(aTableSearchState) {
var oTable = this.byId("table"),
oViewModel = this.getModel("worklistView");
oTable.getBinding("items").filter(aTableSearchState, "Application");
// changes the noDataText of the list in case there are no filter results
if (aTableSearchState.length !== 0) {
oViewModel.setProperty("/tableNoDataText", this.getResourceBundle().getText("worklistNoDataWithSearchText"));
}
}
});
});

View File

@ -0,0 +1,89 @@
# This is the resource bundle for opensap.manageproducts.manageproducts
#Texts for manifest.json
#XTIT: Application name
appTitle=Manage Products
#YDES: Application description
appDescription=A Fiori application.
#~~~ Worklist View ~~~~~~~~~~~~~~~~~~~~~~~~~~
#XTIT: Worklist view title
worklistViewTitle=Manage ProductSet
#XTIT: Worklist page title
worklistTitle=Manage Products
#XTIT: Table view title
worklistTableTitle=ProductSet
#XTOL: Tooltip for the search field
worklistSearchTooltip=Enter an ProductSet name or a part of it.
#XBLI: text for a table with no data with filter or search
worklistNoDataWithSearchText=No matching ProductSet found
#XTIT: Table view title with placeholder for the number of items
worklistTableTitleCount=ProductSet ({0})
#XTIT: The title of the column containing the ProductID of ProductSet
tableNameColumnTitle=ProductID
#XTIT: The title of the column containing the Price and the unit of measure
tableUnitNumberColumnTitle=Price
#XBLI: text for a table with no data
tableNoDataText=No ProductSet are currently available
#XLNK: text for link in 'not found' pages
backToWorklist=Show Manage Products
#~~~ Object View ~~~~~~~~~~~~~~~~~~~~~~~~~~
#XTIT: Object view title
objectViewTitle=ProductSet Details
#XTIT: Object page title
objectTitle=ProductSet
#XTIT: Label for the ProductID
ProductIDLabel=ProductID
#XTIT: Label for the Price
PriceLabel=Price
#~~~ Share Menu Options ~~~~~~~~~~~~~~~~~~~~~~~
#XTIT: Send E-Mail subject
shareSendEmailWorklistSubject=<Email subject PLEASE REPLACE ACCORDING TO YOUR USE CASE>
#YMSG: Send E-Mail message
shareSendEmailWorklistMessage=<Email body PLEASE REPLACE ACCORDING TO YOUR USE CASE>\r\n{0}
#XTIT: Send E-Mail subject
shareSendEmailObjectSubject=<Email subject including object identifier PLEASE REPLACE ACCORDING TO YOUR USE CASE> {0}
#YMSG: Send E-Mail message
shareSendEmailObjectMessage=<Email body PLEASE REPLACE ACCORDING TO YOUR USE CASE> {0} (id: {1})\r\n{2}
#~~~ Not Found View ~~~~~~~~~~~~~~~~~~~~~~~
#XTIT: Not found view title
notFoundTitle=Not Found
#YMSG: The ProductSet not found text is displayed when there is no ProductSet with this id
noObjectFoundText=This ProductSet is not available
#YMSG: The ProductSet not available text is displayed when there is no data when starting the app
noObjectsAvailableText=No ProductSet are currently available
#YMSG: The not found text is displayed when there was an error loading the resource (404 error)
notFoundText=The requested resource was not found
#~~~ Error Handling ~~~~~~~~~~~~~~~~~~~~~~~
#YMSG: Error dialog description
errorText=Sorry, a technical error occurred! Please try again later.

38
webapp/index.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Manage Products</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="resources/sap-ui-core.js"
data-sap-ui-theme="sap_fiori_3"
data-sap-ui-resourceroots='{
"opensap.manageproducts.manageproducts": "./"
}'
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
<script id="locate-reuse-libs" src="./utils/locate-reuse-libs.js"
data-sap-ui-manifest-uri="./manifest.json"
data-sap-ui-componentName="opensap.manageproducts.manageproducts">
</script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="opensap.manageproducts.manageproducts"
data-id="container"
data-settings='{"id" : "opensap.manageproducts.manageproducts"}'
data-handle-validation="true"
></div>
</body>
</html>

View File

@ -0,0 +1,547 @@
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:sap="http://www.sap.com/Protocols/SAPData">
<edmx:DataServices m:DataServiceVersion="2.0">
<Schema Namespace="GWSAMPLE_BASIC" xml:lang="en" sap:schema-version="1" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityType Name="BusinessPartner" sap:content-version="1">
<Key>
<PropertyRef Name="BusinessPartnerID"/>
</Key>
<Property Name="Address" Type="GWSAMPLE_BASIC.CT_Address" Nullable="false"/>
<Property Name="BusinessPartnerID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Bus. Part. ID" sap:creatable="false" sap:updatable="false"/>
<Property Name="CompanyName" Type="Edm.String" Nullable="false" MaxLength="80" sap:unicode="false" sap:label="Company Name"/>
<Property Name="WebAddress" Type="Edm.String" sap:unicode="false" sap:label="Web Address" sap:sortable="false" sap:filterable="false" sap:semantics="url"/>
<Property Name="EmailAddress" Type="Edm.String" Nullable="false" MaxLength="255" sap:unicode="false" sap:label="E-Mail Address" sap:semantics="email"/>
<Property Name="PhoneNumber" Type="Edm.String" MaxLength="30" sap:unicode="false" sap:label="Phone No." sap:semantics="tel"/>
<Property Name="FaxNumber" Type="Edm.String" MaxLength="30" sap:unicode="false" sap:label="Fax Number"/>
<Property Name="LegalForm" Type="Edm.String" MaxLength="10" sap:unicode="false" sap:label="Legal Form"/>
<Property Name="CurrencyCode" Type="Edm.String" Nullable="false" MaxLength="5" sap:unicode="false" sap:label="Currency" sap:semantics="currency-code"/>
<Property Name="BusinessPartnerRole" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Bus. Part. Role"/>
<Property Name="CreatedAt" Type="Edm.DateTime" Precision="7" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<Property Name="ChangedAt" Type="Edm.DateTime" Precision="7" ConcurrencyMode="Fixed" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<NavigationProperty Name="ToSalesOrders" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_SalesOrders" FromRole="FromRole_Assoc_BusinessPartner_SalesOrders" ToRole="ToRole_Assoc_BusinessPartner_SalesOrders"/>
<NavigationProperty Name="ToContacts" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Contacts" FromRole="FromRole_Assoc_BusinessPartner_Contacts" ToRole="ToRole_Assoc_BusinessPartner_Contacts"/>
<NavigationProperty Name="ToProducts" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Products" FromRole="FromRole_Assoc_BusinessPartner_Products" ToRole="ToRole_Assoc_BusinessPartner_Products"/>
</EntityType>
<EntityType Name="Product" sap:content-version="1">
<Key>
<PropertyRef Name="ProductID"/>
</Key>
<Property Name="ProductID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Product ID" sap:updatable="false"/>
<Property Name="TypeCode" Type="Edm.String" Nullable="false" MaxLength="2" sap:unicode="false" sap:label="Prod. Type Code"/>
<Property Name="Category" Type="Edm.String" Nullable="false" MaxLength="40" sap:unicode="false" sap:label="Prod. Cat."/>
<Property Name="Name" Type="Edm.String" Nullable="false" MaxLength="255" sap:unicode="false" sap:label="Product Name" sap:sortable="false" sap:filterable="false"/>
<Property Name="NameLanguage" Type="Edm.String" MaxLength="2" sap:unicode="false" sap:label="Language" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Description" Type="Edm.String" MaxLength="255" sap:unicode="false" sap:label="Prod.Descrip." sap:sortable="false" sap:filterable="false"/>
<Property Name="DescriptionLanguage" Type="Edm.String" MaxLength="2" sap:unicode="false" sap:label="Language" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="SupplierID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Bus. Part. ID"/>
<Property Name="SupplierName" Type="Edm.String" MaxLength="80" sap:unicode="false" sap:label="Company Name" sap:creatable="false" sap:updatable="false"/>
<Property Name="TaxTarifCode" Type="Edm.Byte" Nullable="false" sap:unicode="false" sap:label="Prod. Tax Code"/>
<Property Name="MeasureUnit" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Qty. Unit" sap:semantics="unit-of-measure"/>
<Property Name="WeightMeasure" Type="Edm.Decimal" Precision="13" Scale="3" sap:unicode="false" sap:unit="WeightUnit" sap:label="Wt. Measure"/>
<Property Name="WeightUnit" Type="Edm.String" MaxLength="3" sap:unicode="false" sap:label="Qty. Unit" sap:semantics="unit-of-measure"/>
<Property Name="CurrencyCode" Type="Edm.String" Nullable="false" MaxLength="5" sap:unicode="false" sap:label="Currency" sap:semantics="currency-code"/>
<Property Name="Price" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Unit Price"/>
<Property Name="Width" Type="Edm.Decimal" Precision="13" Scale="3" sap:unicode="false" sap:unit="DimUnit" sap:label="Dimensions"/>
<Property Name="Depth" Type="Edm.Decimal" Precision="13" Scale="3" sap:unicode="false" sap:unit="DimUnit" sap:label="Dimensions"/>
<Property Name="Height" Type="Edm.Decimal" Precision="13" Scale="3" sap:unicode="false" sap:unit="DimUnit" sap:label="Dimensions"/>
<Property Name="DimUnit" Type="Edm.String" MaxLength="3" sap:unicode="false" sap:label="Dim. Unit" sap:semantics="unit-of-measure"/>
<Property Name="CreatedAt" Type="Edm.DateTime" Precision="7" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<Property Name="ChangedAt" Type="Edm.DateTime" Precision="7" ConcurrencyMode="Fixed" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<NavigationProperty Name="ToSupplier" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Products" FromRole="ToRole_Assoc_BusinessPartner_Products" ToRole="FromRole_Assoc_BusinessPartner_Products"/>
<NavigationProperty Name="ToSalesOrderLineItems" Relationship="GWSAMPLE_BASIC.Assoc_Product_SalesOrderLineItems" FromRole="FromRole_Assoc_Product_SalesOrderLineItems" ToRole="ToRole_Assoc_Product_SalesOrderLineItems"/>
</EntityType>
<EntityType Name="SalesOrder" sap:content-version="1">
<Key>
<PropertyRef Name="SalesOrderID"/>
</Key>
<Property Name="SalesOrderID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Sa. Ord. ID" sap:creatable="false" sap:updatable="false"/>
<Property Name="Note" Type="Edm.String" MaxLength="255" sap:unicode="false" sap:label="Description" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="NoteLanguage" Type="Edm.String" MaxLength="2" sap:unicode="false" sap:label="Language" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="CustomerID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Bus. Part. ID" sap:updatable="false"/>
<Property Name="CustomerName" Type="Edm.String" MaxLength="80" sap:unicode="false" sap:label="Company Name" sap:creatable="false" sap:updatable="false"/>
<Property Name="CurrencyCode" Type="Edm.String" MaxLength="5" sap:unicode="false" sap:label="Currency" sap:updatable="false" sap:semantics="currency-code"/>
<Property Name="GrossAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Gross Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="NetAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Net Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="TaxAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Tax Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="LifecycleStatus" Type="Edm.String" MaxLength="1" sap:unicode="false" sap:label="PO Lifecycle" sap:creatable="false" sap:updatable="false"/>
<Property Name="LifecycleStatusDescription" Type="Edm.String" MaxLength="60" sap:unicode="false" sap:label="Lifecycle Descript." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="BillingStatus" Type="Edm.String" MaxLength="1" sap:unicode="false" sap:label="PO Confirmation" sap:creatable="false" sap:updatable="false"/>
<Property Name="BillingStatusDescription" Type="Edm.String" MaxLength="60" sap:unicode="false" sap:label="Billing Description" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="DeliveryStatus" Type="Edm.String" MaxLength="1" sap:unicode="false" sap:label="PO Ordering" sap:creatable="false" sap:updatable="false"/>
<Property Name="DeliveryStatusDescription" Type="Edm.String" MaxLength="60" sap:unicode="false" sap:label="Delivery Description" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="CreatedAt" Type="Edm.DateTime" Precision="7" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<Property Name="ChangedAt" Type="Edm.DateTime" Precision="7" sap:unicode="false" sap:label="Time Stamp" sap:creatable="false" sap:updatable="false"/>
<NavigationProperty Name="ToBusinessPartner" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_SalesOrders" FromRole="ToRole_Assoc_BusinessPartner_SalesOrders" ToRole="FromRole_Assoc_BusinessPartner_SalesOrders"/>
<NavigationProperty Name="ToLineItems" Relationship="GWSAMPLE_BASIC.Assoc_SalesOrder_SalesOrderLineItems" FromRole="FromRole_Assoc_SalesOrder_SalesOrderLineItems" ToRole="ToRole_Assoc_SalesOrder_SalesOrderLineItems"/>
</EntityType>
<EntityType Name="SalesOrderLineItem" sap:content-version="1">
<Key>
<PropertyRef Name="SalesOrderID"/>
<PropertyRef Name="ItemPosition"/>
</Key>
<Property Name="SalesOrderID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Sa. Ord. ID" sap:updatable="false"/>
<Property Name="ItemPosition" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="PO Item Pos" sap:creatable="false" sap:updatable="false"/>
<Property Name="ProductID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Product ID"/>
<Property Name="Note" Type="Edm.String" MaxLength="255" sap:unicode="false" sap:label="Description" sap:sortable="false" sap:filterable="false"/>
<Property Name="NoteLanguage" Type="Edm.String" MaxLength="2" sap:unicode="false" sap:label="Language" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="CurrencyCode" Type="Edm.String" MaxLength="5" sap:unicode="false" sap:label="Currency" sap:creatable="false" sap:updatable="false" sap:semantics="currency-code"/>
<Property Name="GrossAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Gross Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="NetAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Net Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="TaxAmount" Type="Edm.Decimal" Precision="16" Scale="3" sap:unicode="false" sap:unit="CurrencyCode" sap:label="Tax Amt." sap:creatable="false" sap:updatable="false"/>
<Property Name="DeliveryDate" Type="Edm.DateTime" Nullable="false" Precision="7" sap:unicode="false" sap:label="Time Stamp" sap:sortable="false" sap:filterable="false"/>
<Property Name="Quantity" Type="Edm.Decimal" Nullable="false" Precision="13" Scale="3" sap:unicode="false" sap:unit="QuantityUnit" sap:label="Quantity" sap:sortable="false" sap:filterable="false"/>
<Property Name="QuantityUnit" Type="Edm.String" MaxLength="3" sap:unicode="false" sap:label="Qty. Unit" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false" sap:semantics="unit-of-measure"/>
<NavigationProperty Name="ToHeader" Relationship="GWSAMPLE_BASIC.Assoc_SalesOrder_SalesOrderLineItems" FromRole="ToRole_Assoc_SalesOrder_SalesOrderLineItems" ToRole="FromRole_Assoc_SalesOrder_SalesOrderLineItems"/>
<NavigationProperty Name="ToProduct" Relationship="GWSAMPLE_BASIC.Assoc_Product_SalesOrderLineItems" FromRole="ToRole_Assoc_Product_SalesOrderLineItems" ToRole="FromRole_Assoc_Product_SalesOrderLineItems"/>
</EntityType>
<EntityType Name="Contact" sap:content-version="1">
<Key>
<PropertyRef Name="ContactGuid"/>
</Key>
<Property Name="Address" Type="GWSAMPLE_BASIC.CT_Address" Nullable="false"/>
<Property Name="ContactGuid" Type="Edm.Guid" Nullable="false" sap:unicode="false" sap:label="Contact GUID" sap:creatable="false" sap:updatable="false"/>
<Property Name="BusinessPartnerID" Type="Edm.String" Nullable="false" MaxLength="10" sap:unicode="false" sap:label="Bus. Part. ID" sap:updatable="false"/>
<Property Name="Title" Type="Edm.String" MaxLength="10" sap:unicode="false" sap:label="Title"/>
<Property Name="FirstName" Type="Edm.String" Nullable="false" MaxLength="40" sap:unicode="false" sap:label="First Name" sap:semantics="givenname"/>
<Property Name="MiddleName" Type="Edm.String" MaxLength="40" sap:unicode="false" sap:label="Middle Name" sap:semantics="middlename"/>
<Property Name="LastName" Type="Edm.String" MaxLength="40" sap:unicode="false" sap:label="Last Name" sap:semantics="familyname"/>
<Property Name="Nickname" Type="Edm.String" MaxLength="40" sap:unicode="false" sap:label="Nickname" sap:semantics="nickname"/>
<Property Name="Initials" Type="Edm.String" MaxLength="10" sap:unicode="false" sap:label="Initials"/>
<Property Name="Sex" Type="Edm.String" Nullable="false" MaxLength="1" sap:unicode="false" sap:label="Sex"/>
<Property Name="PhoneNumber" Type="Edm.String" MaxLength="30" sap:unicode="false" sap:label="Phone No." sap:semantics="tel"/>
<Property Name="FaxNumber" Type="Edm.String" MaxLength="30" sap:unicode="false" sap:label="Fax Number"/>
<Property Name="EmailAddress" Type="Edm.String" MaxLength="255" sap:unicode="false" sap:label="E-Mail Address" sap:semantics="email"/>
<Property Name="Language" Type="Edm.String" MaxLength="2" sap:unicode="false" sap:label="Language Key"/>
<Property Name="DateOfBirth" Type="Edm.DateTime" Precision="7" sap:unicode="false" sap:label="Date of Birth" sap:semantics="bday"/>
<NavigationProperty Name="ToBusinessPartner" Relationship="GWSAMPLE_BASIC.Assoc_BusinessPartner_Contacts" FromRole="ToRole_Assoc_BusinessPartner_Contacts" ToRole="FromRole_Assoc_BusinessPartner_Contacts"/>
</EntityType>
<EntityType Name="VH_Sex" sap:content-version="1">
<Key>
<PropertyRef Name="Sex"/>
</Key>
<Property Name="Sex" Type="Edm.String" Nullable="false" MaxLength="1" sap:unicode="false" sap:label="Sex" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Shorttext" Type="Edm.String" Nullable="false" MaxLength="60" sap:unicode="false" sap:label="Short Descript." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_Country" sap:content-version="1">
<Key>
<PropertyRef Name="Land1"/>
</Key>
<Property Name="Land1" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Country" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Landx" Type="Edm.String" Nullable="false" MaxLength="15" sap:unicode="false" sap:label="Name" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Natio" Type="Edm.String" Nullable="false" MaxLength="15" sap:unicode="false" sap:label="Nationality" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_AddressType" sap:content-version="1">
<Key>
<PropertyRef Name="AddressType"/>
</Key>
<Property Name="AddressType" Type="Edm.String" Nullable="false" MaxLength="2" sap:unicode="false" sap:label="Address Type" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Shorttext" Type="Edm.String" Nullable="false" MaxLength="60" sap:unicode="false" sap:label="Short Descript." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_Category" sap:content-version="1">
<Key>
<PropertyRef Name="Category"/>
</Key>
<Property Name="Category" Type="Edm.String" Nullable="false" MaxLength="40" sap:unicode="false" sap:label="Prod. Cat." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_Currency" sap:content-version="1">
<Key>
<PropertyRef Name="Waers"/>
</Key>
<Property Name="Waers" Type="Edm.String" Nullable="false" MaxLength="5" sap:unicode="false" sap:label="Currency" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false" sap:semantics="currency-code"/>
<Property Name="Ltext" Type="Edm.String" Nullable="false" MaxLength="40" sap:unicode="false" sap:label="Long Text" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_UnitQuantity" sap:content-version="1">
<Key>
<PropertyRef Name="Msehi"/>
</Key>
<Property Name="Msehi" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Int. meas. unit" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false" sap:semantics="unit-of-measure"/>
<Property Name="Msehl" Type="Edm.String" Nullable="false" MaxLength="30" sap:unicode="false" sap:label="Unit text" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_UnitWeight" sap:content-version="1">
<Key>
<PropertyRef Name="Msehi"/>
</Key>
<Property Name="Msehi" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Int. meas. unit" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false" sap:semantics="unit-of-measure"/>
<Property Name="Msehl" Type="Edm.String" Nullable="false" MaxLength="30" sap:unicode="false" sap:label="Unit text" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_UnitLength" sap:content-version="1">
<Key>
<PropertyRef Name="Msehi"/>
</Key>
<Property Name="Msehi" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Int. meas. unit" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false" sap:semantics="unit-of-measure"/>
<Property Name="Msehl" Type="Edm.String" Nullable="false" MaxLength="30" sap:unicode="false" sap:label="Unit text" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_ProductTypeCode" sap:content-version="1">
<Key>
<PropertyRef Name="TypeCode"/>
</Key>
<Property Name="TypeCode" Type="Edm.String" Nullable="false" MaxLength="2" sap:unicode="false" sap:label="Prod. Type Code" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Shorttext" Type="Edm.String" Nullable="false" MaxLength="60" sap:unicode="false" sap:label="Short Descript." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_BPRole" sap:content-version="1">
<Key>
<PropertyRef Name="BpRole"/>
</Key>
<Property Name="BpRole" Type="Edm.String" Nullable="false" MaxLength="3" sap:unicode="false" sap:label="Bus. Part. Role" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Shorttext" Type="Edm.String" Nullable="false" MaxLength="60" sap:unicode="false" sap:label="Short Descript." sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<EntityType Name="VH_Language" sap:content-version="1">
<Key>
<PropertyRef Name="Spras"/>
</Key>
<Property Name="Spras" Type="Edm.String" Nullable="false" MaxLength="2" sap:unicode="false" sap:label="Language" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
<Property Name="Sptxt" Type="Edm.String" Nullable="false" MaxLength="16" sap:unicode="false" sap:label="Name" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</EntityType>
<ComplexType Name="CT_Address">
<Property Name="City" Type="Edm.String" MaxLength="40" sap:label="City" sap:semantics="city"/>
<Property Name="PostalCode" Type="Edm.String" MaxLength="10" sap:label="Postal Code" sap:semantics="zip"/>
<Property Name="Street" Type="Edm.String" MaxLength="60" sap:label="Street" sap:semantics="street"/>
<Property Name="Building" Type="Edm.String" MaxLength="10" sap:label="Building"/>
<Property Name="Country" Type="Edm.String" MaxLength="3" sap:label="Country" sap:semantics="country"/>
<Property Name="AddressType" Type="Edm.String" MaxLength="2" sap:label="Address Type"/>
</ComplexType>
<ComplexType Name="CT_String">
<Property Name="String" Type="Edm.String" Nullable="false" sap:creatable="false" sap:updatable="false" sap:sortable="false" sap:filterable="false"/>
</ComplexType>
<Association Name="Assoc_VH_Country_Contacts" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Country" Multiplicity="1" Role="FromRole_Assoc_VH_Country_Contacts"/>
<End Type="GWSAMPLE_BASIC.Contact" Multiplicity="*" Role="ToRole_Assoc_VH_Country_Contacts"/>
</Association>
<Association Name="Assoc_VH_Country_BusinessPartners" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Country" Multiplicity="1" Role="FromRole_Assoc_VH_Country_BusinessPartners"/>
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="*" Role="ToRole_Assoc_VH_Country_BusinessPartners"/>
</Association>
<Association Name="Assoc_VH_UnitQuantity_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_UnitQuantity" Multiplicity="1" Role="FromRole_Assoc_VH_UnitQuantity_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_UnitQuantity_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_UnitQuantity_Products">
<PropertyRef Name="Msehi"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_UnitQuantity_Products">
<PropertyRef Name="MeasureUnit"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_UnitQuantity_SalesOrderLineItem" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_UnitQuantity" Multiplicity="1" Role="FromRole_Assoc_VH_UnitQuantity_SalesOrderLineItem"/>
<End Type="GWSAMPLE_BASIC.SalesOrderLineItem" Multiplicity="*" Role="ToRole_Assoc_VH_UnitQuantity_SalesOrderLineItem"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_UnitQuantity_SalesOrderLineItem">
<PropertyRef Name="Msehi"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_UnitQuantity_SalesOrderLineItem">
<PropertyRef Name="QuantityUnit"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_BusinessPartner_Contacts" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="1" Role="FromRole_Assoc_BusinessPartner_Contacts"/>
<End Type="GWSAMPLE_BASIC.Contact" Multiplicity="*" Role="ToRole_Assoc_BusinessPartner_Contacts"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_BusinessPartner_Contacts">
<PropertyRef Name="BusinessPartnerID"/>
</Principal>
<Dependent Role="ToRole_Assoc_BusinessPartner_Contacts">
<PropertyRef Name="BusinessPartnerID"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_BusinessPartner_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="1" Role="FromRole_Assoc_BusinessPartner_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_BusinessPartner_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_BusinessPartner_Products">
<PropertyRef Name="BusinessPartnerID"/>
</Principal>
<Dependent Role="ToRole_Assoc_BusinessPartner_Products">
<PropertyRef Name="SupplierID"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_BusinessPartner_SalesOrders" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="1" Role="FromRole_Assoc_BusinessPartner_SalesOrders"/>
<End Type="GWSAMPLE_BASIC.SalesOrder" Multiplicity="*" Role="ToRole_Assoc_BusinessPartner_SalesOrders"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_BusinessPartner_SalesOrders">
<PropertyRef Name="BusinessPartnerID"/>
</Principal>
<Dependent Role="ToRole_Assoc_BusinessPartner_SalesOrders">
<PropertyRef Name="CustomerID"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_UnitWeight_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_UnitWeight" Multiplicity="1" Role="FromRole_Assoc_VH_UnitWeight_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_UnitWeight_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_UnitWeight_Products">
<PropertyRef Name="Msehi"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_UnitWeight_Products">
<PropertyRef Name="WeightUnit"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_SalesOrder_SalesOrderLineItems" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.SalesOrder" Multiplicity="1" Role="FromRole_Assoc_SalesOrder_SalesOrderLineItems"/>
<End Type="GWSAMPLE_BASIC.SalesOrderLineItem" Multiplicity="*" Role="ToRole_Assoc_SalesOrder_SalesOrderLineItems"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_SalesOrder_SalesOrderLineItems">
<PropertyRef Name="SalesOrderID"/>
</Principal>
<Dependent Role="ToRole_Assoc_SalesOrder_SalesOrderLineItems">
<PropertyRef Name="SalesOrderID"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Currency_BusinessPartners" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Currency" Multiplicity="1" Role="FromRole_Assoc_VH_Currency_BusinessPartners"/>
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="*" Role="ToRole_Assoc_VH_Currency_BusinessPartners"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Currency_BusinessPartners">
<PropertyRef Name="Waers"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Currency_BusinessPartners">
<PropertyRef Name="CurrencyCode"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Currency_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Currency" Multiplicity="1" Role="FromRole_Assoc_VH_Currency_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_Currency_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Currency_Products">
<PropertyRef Name="Waers"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Currency_Products">
<PropertyRef Name="CurrencyCode"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Currency_SalesOrders" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Currency" Multiplicity="1" Role="FromRole_Assoc_VH_Currency_SalesOrders"/>
<End Type="GWSAMPLE_BASIC.SalesOrder" Multiplicity="*" Role="ToRole_Assoc_VH_Currency_SalesOrders"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Currency_SalesOrders">
<PropertyRef Name="Waers"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Currency_SalesOrders">
<PropertyRef Name="CurrencyCode"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Currency_SalesOrderLineItems" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Currency" Multiplicity="1" Role="FromRole_Assoc_VH_Currency_SalesOrderLineItems"/>
<End Type="GWSAMPLE_BASIC.SalesOrderLineItem" Multiplicity="*" Role="ToRole_Assoc_VH_Currency_SalesOrderLineItems"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Currency_SalesOrderLineItems">
<PropertyRef Name="Waers"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Currency_SalesOrderLineItems">
<PropertyRef Name="CurrencyCode"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_Product_SalesOrderLineItems" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="1" Role="FromRole_Assoc_Product_SalesOrderLineItems"/>
<End Type="GWSAMPLE_BASIC.SalesOrderLineItem" Multiplicity="*" Role="ToRole_Assoc_Product_SalesOrderLineItems"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_Product_SalesOrderLineItems">
<PropertyRef Name="ProductID"/>
</Principal>
<Dependent Role="ToRole_Assoc_Product_SalesOrderLineItems">
<PropertyRef Name="ProductID"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Language_Contacts" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Language" Multiplicity="1" Role="FromRole_Assoc_VH_Language_Contacts"/>
<End Type="GWSAMPLE_BASIC.Contact" Multiplicity="*" Role="ToRole_Assoc_VH_Language_Contacts"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Language_Contacts">
<PropertyRef Name="Spras"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Language_Contacts">
<PropertyRef Name="Language"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Category_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Category" Multiplicity="1" Role="FromRole_Assoc_VH_Category_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_Category_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Category_Products">
<PropertyRef Name="Category"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Category_Products">
<PropertyRef Name="Category"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_Sex_Contacts" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_Sex" Multiplicity="1" Role="FromRole_Assoc_VH_Sex_Contacts"/>
<End Type="GWSAMPLE_BASIC.Contact" Multiplicity="*" Role="ToRole_Assoc_VH_Sex_Contacts"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_Sex_Contacts">
<PropertyRef Name="Sex"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_Sex_Contacts">
<PropertyRef Name="Sex"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_ProductTypeCode_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_ProductTypeCode" Multiplicity="1" Role="FromRole_Assoc_VH_ProductTypeCode_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_ProductTypeCode_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_ProductTypeCode_Products">
<PropertyRef Name="TypeCode"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_ProductTypeCode_Products">
<PropertyRef Name="TypeCode"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_BPRole_BusinessPartners" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_BPRole" Multiplicity="1" Role="FromRole_Assoc_VH_BPRole_BusinessPartners"/>
<End Type="GWSAMPLE_BASIC.BusinessPartner" Multiplicity="*" Role="ToRole_Assoc_VH_BPRole_BusinessPartners"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_BPRole_BusinessPartners">
<PropertyRef Name="BpRole"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_BPRole_BusinessPartners">
<PropertyRef Name="BusinessPartnerRole"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="Assoc_VH_UnitLength_Products" sap:content-version="1">
<End Type="GWSAMPLE_BASIC.VH_UnitLength" Multiplicity="1" Role="FromRole_Assoc_VH_UnitLength_Products"/>
<End Type="GWSAMPLE_BASIC.Product" Multiplicity="*" Role="ToRole_Assoc_VH_UnitLength_Products"/>
<ReferentialConstraint>
<Principal Role="FromRole_Assoc_VH_UnitLength_Products">
<PropertyRef Name="Msehi"/>
</Principal>
<Dependent Role="ToRole_Assoc_VH_UnitLength_Products">
<PropertyRef Name="DimUnit"/>
</Dependent>
</ReferentialConstraint>
</Association>
<EntityContainer Name="GWSAMPLE_BASIC_Entities" m:IsDefaultEntityContainer="true" sap:supported-formats="atom json xlsx">
<EntitySet Name="BusinessPartnerSet" EntityType="GWSAMPLE_BASIC.BusinessPartner" sap:content-version="1"/>
<EntitySet Name="ProductSet" EntityType="GWSAMPLE_BASIC.Product" sap:content-version="1"/>
<EntitySet Name="SalesOrderSet" EntityType="GWSAMPLE_BASIC.SalesOrder" sap:updatable="false" sap:content-version="1"/>
<EntitySet Name="SalesOrderLineItemSet" EntityType="GWSAMPLE_BASIC.SalesOrderLineItem" sap:content-version="1"/>
<EntitySet Name="ContactSet" EntityType="GWSAMPLE_BASIC.Contact" sap:content-version="1"/>
<EntitySet Name="VH_SexSet" EntityType="GWSAMPLE_BASIC.VH_Sex" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_CountrySet" EntityType="GWSAMPLE_BASIC.VH_Country" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_AddressTypeSet" EntityType="GWSAMPLE_BASIC.VH_AddressType" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_CategorySet" EntityType="GWSAMPLE_BASIC.VH_Category" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_CurrencySet" EntityType="GWSAMPLE_BASIC.VH_Currency" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_UnitQuantitySet" EntityType="GWSAMPLE_BASIC.VH_UnitQuantity" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_UnitWeightSet" EntityType="GWSAMPLE_BASIC.VH_UnitWeight" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_UnitLengthSet" EntityType="GWSAMPLE_BASIC.VH_UnitLength" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_ProductTypeCodeSet" EntityType="GWSAMPLE_BASIC.VH_ProductTypeCode" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_BPRoleSet" EntityType="GWSAMPLE_BASIC.VH_BPRole" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<EntitySet Name="VH_LanguageSet" EntityType="GWSAMPLE_BASIC.VH_Language" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:pageable="false" sap:content-version="1"/>
<AssociationSet Name="Assoc_VH_Language_Contacts_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Language_Contacts" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_LanguageSet" Role="FromRole_Assoc_VH_Language_Contacts"/>
<End EntitySet="ContactSet" Role="ToRole_Assoc_VH_Language_Contacts"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Category_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Category_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CategorySet" Role="FromRole_Assoc_VH_Category_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_Category_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_ProductTypeCode_Products_AssocS" Association="GWSAMPLE_BASIC.Assoc_VH_ProductTypeCode_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_ProductTypeCodeSet" Role="FromRole_Assoc_VH_ProductTypeCode_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_ProductTypeCode_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_UnitQuantity_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_UnitQuantity_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_UnitQuantitySet" Role="FromRole_Assoc_VH_UnitQuantity_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_UnitQuantity_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Currency_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Currency_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CurrencySet" Role="FromRole_Assoc_VH_Currency_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_Currency_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Country_Contacts_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Country_Contacts" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CountrySet" Role="FromRole_Assoc_VH_Country_Contacts"/>
<End EntitySet="ContactSet" Role="ToRole_Assoc_VH_Country_Contacts"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_BPRole_BusinessPartners_AssocSe" Association="GWSAMPLE_BASIC.Assoc_VH_BPRole_BusinessPartners" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_BPRoleSet" Role="FromRole_Assoc_VH_BPRole_BusinessPartners"/>
<End EntitySet="BusinessPartnerSet" Role="ToRole_Assoc_VH_BPRole_BusinessPartners"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Sex_Contacts_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Sex_Contacts" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_SexSet" Role="FromRole_Assoc_VH_Sex_Contacts"/>
<End EntitySet="ContactSet" Role="ToRole_Assoc_VH_Sex_Contacts"/>
</AssociationSet>
<AssociationSet Name="Assoc_Product_SalesOrderLineItems_AssocS" Association="GWSAMPLE_BASIC.Assoc_Product_SalesOrderLineItems" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="ProductSet" Role="FromRole_Assoc_Product_SalesOrderLineItems"/>
<End EntitySet="SalesOrderLineItemSet" Role="ToRole_Assoc_Product_SalesOrderLineItems"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Currency_BusinessPartners_Assoc" Association="GWSAMPLE_BASIC.Assoc_VH_Currency_BusinessPartners" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CurrencySet" Role="FromRole_Assoc_VH_Currency_BusinessPartners"/>
<End EntitySet="BusinessPartnerSet" Role="ToRole_Assoc_VH_Currency_BusinessPartners"/>
</AssociationSet>
<AssociationSet Name="Assoc_BusinessPartner_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_BusinessPartner_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="BusinessPartnerSet" Role="FromRole_Assoc_BusinessPartner_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_BusinessPartner_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_UnitWeight_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_UnitWeight_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_UnitWeightSet" Role="FromRole_Assoc_VH_UnitWeight_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_UnitWeight_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Country_BusinessPartners_AssocS" Association="GWSAMPLE_BASIC.Assoc_VH_Country_BusinessPartners" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CountrySet" Role="FromRole_Assoc_VH_Country_BusinessPartners"/>
<End EntitySet="BusinessPartnerSet" Role="ToRole_Assoc_VH_Country_BusinessPartners"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_UnitLength_Products_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_UnitLength_Products" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_UnitLengthSet" Role="FromRole_Assoc_VH_UnitLength_Products"/>
<End EntitySet="ProductSet" Role="ToRole_Assoc_VH_UnitLength_Products"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Currency_SalesOrders_AssocSet" Association="GWSAMPLE_BASIC.Assoc_VH_Currency_SalesOrders" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CurrencySet" Role="FromRole_Assoc_VH_Currency_SalesOrders"/>
<End EntitySet="SalesOrderSet" Role="ToRole_Assoc_VH_Currency_SalesOrders"/>
</AssociationSet>
<AssociationSet Name="Assoc_SalesOrder_SalesOrderLineItems_Ass" Association="GWSAMPLE_BASIC.Assoc_SalesOrder_SalesOrderLineItems" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="SalesOrderSet" Role="FromRole_Assoc_SalesOrder_SalesOrderLineItems"/>
<End EntitySet="SalesOrderLineItemSet" Role="ToRole_Assoc_SalesOrder_SalesOrderLineItems"/>
</AssociationSet>
<AssociationSet Name="Assoc_BusinessPartner_SalesOrders_AssocS" Association="GWSAMPLE_BASIC.Assoc_BusinessPartner_SalesOrders" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="BusinessPartnerSet" Role="FromRole_Assoc_BusinessPartner_SalesOrders"/>
<End EntitySet="SalesOrderSet" Role="ToRole_Assoc_BusinessPartner_SalesOrders"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_Currency_SalesOrderLineItems_As" Association="GWSAMPLE_BASIC.Assoc_VH_Currency_SalesOrderLineItems" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_CurrencySet" Role="FromRole_Assoc_VH_Currency_SalesOrderLineItems"/>
<End EntitySet="SalesOrderLineItemSet" Role="ToRole_Assoc_VH_Currency_SalesOrderLineItems"/>
</AssociationSet>
<AssociationSet Name="Assoc_BusinessPartner_Contacts_AssocSet" Association="GWSAMPLE_BASIC.Assoc_BusinessPartner_Contacts" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="BusinessPartnerSet" Role="FromRole_Assoc_BusinessPartner_Contacts"/>
<End EntitySet="ContactSet" Role="ToRole_Assoc_BusinessPartner_Contacts"/>
</AssociationSet>
<AssociationSet Name="Assoc_VH_UnitQuantity_SalesOrderLineItem" Association="GWSAMPLE_BASIC.Assoc_VH_UnitQuantity_SalesOrderLineItem" sap:creatable="false" sap:updatable="false" sap:deletable="false" sap:content-version="1">
<End EntitySet="VH_UnitQuantitySet" Role="FromRole_Assoc_VH_UnitQuantity_SalesOrderLineItem"/>