【发布时间】:2018-07-26 14:57:57
【问题描述】:
我有一个使用OData V2 的SAPUI5 应用程序。
在删除列表中项目的应用程序的一部分中,我必须在每次调用后关闭更改集。
然后我使用下面的代码:
sGroupId = "dmsch" + new Date().getTime();
oDataModel.setDeferredGroups([sGroupId]);
for (var i = 0; i < aSelectedContexts.length; i++) {
var sObjectPath = aSelectedContexts[i].getPath();
this._deleteObject(sObjectPath, sGroupId, fnAllRequestCompleted, fnAllRequestFailed);
}
oDataModel.submitChanges({
groupId: sGroupId
});
在_deleteObject 函数中,我为每个请求设置了不同的changeSetId,b:
_deleteObject: function(sObjectPath, sGroupId, fnSuccessCallBackFunction, fnFailedCallBackFunction) {
var oDataModel = this.getModel();
var sChangeSetId = "cs" + (new Date().getTime() * (1 + Math.random()));
oDataModel.remove(sObjectPath, {
groupId: sGroupId,
changeSetId: sChangeSetId,
......
现在,在我使用 createEntry 函数创建新条目成功删除后,它会尝试将该条目的数据发送到服务器。
问题是如何重置setDeferredGroups函数的效果。
注意:我需要使用setDeferredGroups,我确信这是每次更改都会自动将新创建的条目发送到服务器的原因。我需要将 ODataModel 的设置设置回其原始状态。
注意 2:Here 是关于 oData 版本 4 的内容,它解释了失败后的这种自动行为。
【问题讨论】:
-
默认更改组是
{ "*" : { groupId: "changes" } }——所以你可以使用oModel.setChangeGroups( { "*" : { groupId: "changes"} } )和oModel.setDeferredGroups(["changes"])——这就是你想要做的吗?
标签: sapui5