<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Order Management</title>
<!-- Bootstrap the UI5 core library -->
<script id="sap-ui-bootstrap"
src="https://openui5.hana.ondemand.com/1.38.7/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m"
data-sap-ui-theme="sap_bluecrystal"
data-sap-ui-compatVersion="edge"
data-sap-ui-resourceroots='{"ss.ui5.problem.odataupdinbatch": ""}'
data-sap-ui-frameOptions='allow'>
</script>
<script>
sap.ui.getCore().attachInit(function() {
/** jQuery.sap.require("ss/ui5/problem/odataupdinbatch/mockserver");
new sap.ui.core.ComponentContainer({
name: "ss.ui5.problem.odataupdinbatch"
}).placeAt("content"); */
sap.ui.require([
"ss/ui5/problem/odataupdinbatch/mockserver"
], function (mockserver) {
// set up test service for local testing
mockserver.init();
new sap.ui.core.ComponentContainer({
name : "ss.ui5.problem.odataupdinbatch"
}).placeAt("content");
});
});
</script>
</head>
<!-- UI Content -->
<body class="sapUiBody" id="content">
</body>
</html>
sap.ui.define([
"sap/ui/core/util/MockServer"
], function(MockServer) {
"use strict";
var oMockServer,
_sAppModulePath = "ss/ui5/problem/odataupdinbatch/",
_sJsonFilesModulePath = _sAppModulePath ,
_sMetadataUrl = _sAppModulePath + "metadata",
_sMainDataSourceUrl = "/here/goes/your/serviceurl/";
return {
/**
* Initializes the mock server.
* You can configure the delay with the URL parameter "serverDelay".
* The local mock data in this folder is returned instead of the real data for testing.
* @public
*/
init: function() {
var oUriParameters = jQuery.sap.getUriParameters(),
sJsonFilesUrl = jQuery.sap.getModulePath(_sJsonFilesModulePath),
sEntity = "Orders",
sErrorParam = oUriParameters.get("errorType"),
iErrorCode = sErrorParam === "badRequest" ? 400 : 500,
sMetadataUrl = jQuery.sap.getModulePath(_sMetadataUrl, ".xml");
oMockServer = new MockServer({
rootUri: _sMainDataSourceUrl
});
// configure mock server with a delay of 1s
MockServer.config({
autoRespond: true,
autoRespondAfter: (oUriParameters.get("serverDelay") || 1000)
});
oMockServer.simulate(sMetadataUrl, {
sMockdataBaseUrl: sJsonFilesUrl,
bGenerateMissingMockData: true
});
var aRequests = oMockServer.getRequests();
aRequests.push({
method: "MERGE",
path: new RegExp("(.*)Order(.*)"),
response: function(oXhr, sUrlParams) {
debugger;
jQuery.sap.log.debug("Mock Server: Incoming request for external resource");
var oResponse = {
data: {},
headers: {
"Content-Type": "application/json;charset=utf-8",
"DataServiceVersion": "1.0"
},
status: "204",
statusText: "No Content"
};
oXhr.respond(oResponse.status, oResponse.headers, JSON.stringify({ d: oResponse.data }));
}
});
oMockServer.setRequests(aRequests);
var fnResponse = function(iErrCode, sMessage, aRequest) {
aRequest.response = function(oXhr) {
oXhr.respond(iErrCode, {
"Content-Type": "text/plain;charset=utf-8"
}, sMessage);
};
};
// handling the metadata error test
if (oUriParameters.get("metadataError")) {
aRequests.forEach(function(aEntry) {
if (aEntry.path.toString().indexOf("$metadata") > -1) {
fnResponse(500, "metadata Error", aEntry);
}
});
}
// Handling request errors
if (sErrorParam) {
aRequests.forEach(function(aEntry) {
if (aEntry.path.toString().indexOf(sEntity) > -1) {
fnResponse(iErrorCode, sErrorParam, aEntry);
}
});
}
oMockServer.start();
jQuery.sap.log.info("Running the app with mock data");
},
/**
* @public returns the mockserver of the app, should be used in integration tests
* @returns {sap.ui.core.util.MockServer} the mockserver instance
*/
getMockServer: function() {
return oMockServer;
}
};
});
/* Styles go here */
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/model/odata/v2/ODataModel",
"sap/ui/model/resource/ResourceModel"
], function(UIComponent, ODataModel, ResourceModel) {
"use strict";
return UIComponent.extend("ss.ui5.problem.odataupdinbatch.Component", {
metadata: {
"version": "1.0.0",
"includes": [],
"rootView": {
"viewName": "ss.ui5.problem.odataupdinbatch.App",
"type": "XML",
"id": "app"
},
"dependencies": {
"libs": ["sap.ui.core", "sap.m", "sap.ui.layout"]
},
"config": {
"i18nBundle": "ss.ui5.problem.odataupdinbatch",
"serviceUrl": "/here/goes/your/serviceurl/",
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
}
},
init: function() {
var oCore = sap.ui.getCore();
var mConfig = this.getMetadata().getConfig();
var oConfig = {
disableHeadRequestForToken: true,
useBatch: true,
defaultOperationMode: "Client"
};
var oModel = new ODataModel(mConfig.serviceUrl, oConfig);
if (oModel.isBindingModeSupported(sap.ui.model.BindingMode.TwoWay)) { // true
oModel.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay);
}
this.setModel(oModel);
this._createMetadataPromise(oModel);
// set the i18n model
var oResourceModel = new ResourceModel({
"bundleName": mConfig.i18nBundle
});
this.setModel(oResourceModel, "i18n");
// call the base component's init function
UIComponent.prototype.init.apply(this, arguments);
// create the views based on the url/hash
//this.getRouter().initialize();
},
destroy: function() {
this.getModel().destroy();
this.getModel("i18n").destroy();
// call the base component's destroy function
UIComponent.prototype.destroy.apply(this, arguments);
},
_createMetadataPromise: function(oModel) {
this.oWhenMetadataIsLoaded = new Promise(function(fnResolve, fnReject) {
oModel.attachEventOnce("metadataLoaded", fnResolve);
oModel.attachEventOnce("metadataFailed", fnReject);
});
}
});
});
<mvc:View controllerName="ss.ui5.problem.odataupdinbatch.App" displayBlock="true" xmlns="sap.m" xmlns:mvc="sap.ui.core.mvc" xmlns:l="sap.ui.layout" xmlns:f="sap.ui.layout.form">
<App id="app">
<pages>
<Page id="p1" title="Maintain Order" >
<f:SimpleForm id="form" minWidth="1024" maxContainerCols="2" editable="true" layout="ResponsiveGridLayout" labelSpanL="3"
labelSpanM="3" emptySpanL="1" emptySpanM="1" class="editableForm">
<f:content>
<Label text="Order ID"></Label>
<Input value="{OrderId}" editable="false"></Input>
<Label text="Order Status"></Label>
<Input value="{Status}" editable="false"></Input>
<Label text="Order Date"></Label>
<DatePicker dateValue="{OrderDate}" valueFormat="yyyyMMdd" displayFormat="dd.MM.yyyy"></DatePicker>
<Label text="Customer Name"></Label>
<Input value="{CustomerName}" editable="true"></Input>
<Label text="Address Street"></Label>
<Input value="{CustomerAddressStreet}" editable="true"></Input>
<Label text="Postcode"></Label>
<Input value="{CustomerAddressPostcode}" editable="true"></Input>
<Label text="Country"></Label>
<Input value="{CustomerAddressCountry}" editable="true"></Input>
</f:content>
</f:SimpleForm>
<footer><Toolbar><Button text="Save" press="onSave"/></Toolbar></footer>
</Page>
</pages>
</App>
</mvc:View>
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel"
], function(Controller, JSONModel) {
"use strict";
return Controller.extend("ss.ui5.problem.odataupdinbatch.App", {
onInit: function() {
this._oODataModel = this.getOwnerComponent().getModel();
this._oResourceBundle = this.getOwnerComponent().getModel("i18n").getResourceBundle();
var oViewModel = new JSONModel({
busy: false,
delay: 0
});
this.getView().setModel(oViewModel, "appView");
this._oViewModel = this.getView().getModel("appView");
this.getOwnerComponent().oWhenMetadataIsLoaded.then(this._doBinding.bind(this));
},
_doBinding: function() {
var sPath = "/" + this._oODataModel.createKey("Orders", {
OrderId: "ORDER01"
});
//"/Orders('ORDER01')"
this.getView().bindElement(sPath);
},
onSave: function() {
this._oODataModel.attachEventOnce("batchRequestCompleted", this.onBatchRequestCompleted);
this._oODataModel.attachEventOnce("batchRequestFailed", this.onBatchRequestFailed);
this._oODataModel.submitChanges();
},
onBatchRequestCompleted: function(oData) {
debugger;
},
onBatchRequestFailed: function(oData) {
debugger;
}
});
});
<?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="odataupdinbatch_srv" xml:lang="en" sap:schema-version="1 " xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
<EntityType Name="Order" sap:content-version="1">
<Key>
<PropertyRef Name="OrderId" />
</Key>
<Property Name="OrderId" Type="Edm.String" MaxLength="10" sap:label="Order ID" sap:creatable="false" sap:updatable="false" sap:sortable="true" sap:filterable="true" />
<Property Name="OrderDate" Type="Edm.DateTime" Precision="7" sap:label="Order date" sap:creatable="true" sap:updatable="true" sap:sortable="true" />
<Property Name="Status" Type="Edm.String" MaxLength="1" sap:label="Status" sap:creatable="false" sap:updatable="false" sap:sortable="true" sap:filterable="true" />
<Property Name="CustomerName" Type="Edm.String" MaxLength="100" sap:label="Customer Name" sap:creatable="true" sap:updatable="true" sap:sortable="true" sap:filterable="true" />
<Property Name="CustomerAddressStreet" Type="Edm.String" MaxLength="100" sap:label="Street" sap:creatable="true" sap:updatable="true" sap:sortable="true" sap:filterable="true" />
<Property Name="CustomerAddressPostcode" Type="Edm.String" MaxLength="20" sap:label="Postcode" sap:creatable="true" sap:updatable="true" sap:sortable="true" sap:filterable="true" />
<Property Name="CustomerAddressCountry" Type="Edm.String" MaxLength="40" sap:label="Country" sap:creatable="true" sap:updatable="true" sap:sortable="true" sap:filterable="true" />
</EntityType>
<EntityContainer Name="odataupdinbatch_srv_Entities" m:IsDefaultEntityContainer="true" sap:supported-formats="atom json xlsx">
<EntitySet Name="Orders" EntityType="odataupdinbatch_srv.Order" sap:label="Orders" sap:creatable="true" sap:deletable="true" sap:searchable="true" sap:content-version="1" />
</EntityContainer>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
[
{
"OrderId": "ORDER01",
"OrderDate": "/Date(1245318362000)/",
"Status": "P",
"CustomerName": "Joe Blogs",
"CustomerAddressStreet": "1 Green Street",
"CustomerAddressPostcode": "SW1 1AA",
"CustomerAddressCountry": "United Kingdom",
"__metadata": {
"uri": "Orders('ORDER01')",
"type": "odataupdinbatch_srv.Order"
}
},
{
"OrderId": "ORDER02",
"OrderDate": "/Date(1265318382000)/",
"Status": "C",
"CustomerName": "Jane Blogs",
"CustomerAddressStreet": "1 Blue Street",
"CustomerAddressPostcode": "KT2 2BB",
"CustomerAddressCountry": "United Kingdom",
"__metadata": {
"uri": "Orders('ORDER02')",
"type": "odataupdinbatch_srv.Order"
}
}
]