2014-10-27 11 views
2

我得到了,我想在我的SAP後臺更新多個EntititySets,所以我取我的數據(有效載荷)爲JSON並把它放在一個請求(它的成功在節點「數據」):SAPUI5 - 批量操作 - 如何做到這一點?

代碼:

var oTreeJSON = oTreeTable.getModel().getProperty("/root"); 
var oModel = sap.ui.getCore().getModel(); 
var batchChanges = []; 

for (var i = 0; i < oTreeAll.length; i++) { 
    batchChanges.push(oModel.createBatchOperation("/sap/opu/odata/sap/MY_SERVICE/?$batch", "POST", oTreeAll[i])); 
} 

oModel.submitBatch(); 

我的要求是這樣的:

enter image description here

應該在哪裏它在SAP(哪種方法)到達?我做錯了什麼,在任何地方都沒有錯誤,但沒有電話到達我的後端......很高興每一個提示!謝謝。

具有降低的複雜工作實施例:

var oEntry = {}; 
oEntry.MyId = "00000001"; 
oEntry.Value = "300"; 

batchChanges.push(oModel.createBatchOperation("MyEntitySet", "POST", oEntry, null)); 
oModel.addBatchChangeOperations(batchChanges); 
oModel.setUseBatch(true); 
oModel.submitBatch(); 

對於記錄,方法調用:

  • 1)/ IWBEP/IF_MGW_CORE_SRV_RUNTIME〜CHANGESET_BEGIN:SAP提案EXIT。
  • 2)/ iwbep/if_mgw_appl_srv_runtime_create_entity。 (n次)//將您的 填入實體
  • 3)/ iwbep/if_mgw_core_srv_runtime〜changeset_end:SAP提案COMMIT WORK。

回答

2
oModel.addBatchChangeOperations(batchChanges); 
oModel.setUseBatch(true); 

如果你需要設置在後端斷點批處理操作,只需設置方法CHANGESET_BEGINCHANGESET_END一個破發點。

+0

它沒有到達後端...我必須手動設置任何標題數據嗎? (之前不需要設置任何標題,全部在同一個域中,因此我認爲這次是相同的)......這是正確的方法嗎?在/ IWBEP/IF_MGW_CORE_SRV_RUNTIME〜CHANGESET_BEGIN和/ IWBEP/IF_MGW_APPL_SRV_RUNTIME〜CHANGESET_BEGIN中得到斷點,兩者都不會被激活。 – zyrex 2014-10-27 07:56:50

+0

嗨,您需要添加批處理操作。 oModel.addBatchChangeOperations(batchChanges); oModel.setUseBatch(true); – Allen 2014-10-27 08:12:21

+0

我得到它運行一個複雜性降低的版本,現在我已經適應了它..至少該呼叫正在轉移到後端。我會更新我的答案,我認爲你的兩個提示是必要的,所以我會接受它作爲答案:-) – zyrex 2014-10-27 09:25:47

0

後我POST代碼sap.ui.model.odata.v2.ODataModel

"models": { "": { "dataSource": "mainService", "preload": true, "settings" : { "useBatch" : true, "defaultBindingMode": "TwoWay", "defaultCountMode" : "None", //default is sap.ui.model.odata.UpdateMethod.Merge "defaultUpdateMethod" : "Put" } } }

var sPath = oView.getBindingContext().getPath(); 
oModel.setDeferredGroups(["editGroup"]); 
oModel.update(sPath, oData, {groupId: "editGroup"}); 
oModel.update(sPath, oData2, {groupId: "editGroup"}); 
oModel.submitChanges({ 
    groupId: "editGroup", 
    success: this.successCallback, 
    error: this.errorCallback 
}); 

其實,v2.ODataModel將默認useBatch,用update()/create()/delete()沒有setDeferredGroups()submitChanges()是OK。但通過這種方式,我將爲每個請求獲取回調,我使用submitChanges將響應合併到一個請求。