未调用带有commitChanges回调的批处理请求

2020-08-31 01:16发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我不是SAPUI5的专家,但是我已经从SAP Webide生成的应用程序开始构建了Fiori Applications。 也许这就是我错过某些东西的原因,但是这次我使用的是FIORI模板的最新版本,它无法按预期工作。

模型在manifest.json中定义:

"模型":{
 " i18n":{
 " type":" sap.ui.model.resource.ResourceModel",
 "设置":{
 " bundleName":" customerexpiredprices.i18n.i18n"
 }
 },
 "":{
 " dataSource":" mainService",
 " preload":是的,
 "设置":{
 " defaultBindingMode":" TwoWay",
 " useBatch":是的,
 " defaultCountMode":"内联"
 }
 }
 },
 

我想删除一个实体的多行,但是我想在一个请求中删除它,这就是为什么我使用submitChanges调用批处理请求并处理submitChanges中成功或错误事件的原因:

 onDeletePress:function(oEvent){


 var self = this;


//获取模型
 var oModel = this.getView()。getModel();


//获取选中的行
 var oSelectedContextPaths = this.byId(" idMaterialList")。getSelectedContextPaths();


//每行调用delete
 如果(oSelectedContextPaths.length === 0){
 MessageBox.error(this.getResourceBundle()。getText(" noSelection"));;
 }其他{
 oSelectedContextPaths.forEach(function(sPath){
 this.remove(sPath);
 },oModel);
 }


 this.getModel(" detailView")。setProperty("/img/busy",true);
 oModel.submitChanges({
 成功:function(oData,sResponse){
 MessageToast.show(self.getResourceBundle()。getText(" deleteConditionSuccess"));;
 self.getView()。getModel()。refresh(true);
 self.getModel(" detailView")。setProperty("/img/busy",false);
 },
 错误:function(oError){
 self.getModel(" detailView")。setProperty("/img/busy",false);
 }
 });
 },
 

submitChanges方法中定义的成功函数和错误函数都不会被调用。 虽然如果我将成功函数附加到remove方法中,则它会被调用,但是每行都会出现。

我没有想到这种行为,而且我很确定我之前做过类似的事情,并且成功从commitChanges中调用。

请帮助...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我不是SAPUI5的专家,但是我已经从SAP Webide生成的应用程序开始构建了Fiori Applications。 也许这就是我错过某些东西的原因,但是这次我使用的是FIORI模板的最新版本,它无法按预期工作。

模型在manifest.json中定义:

"模型":{
 " i18n":{
 " type":" sap.ui.model.resource.ResourceModel",
 "设置":{
 " bundleName":" customerexpiredprices.i18n.i18n"
 }
 },
 "":{
 " dataSource":" mainService",
 " preload":是的,
 "设置":{
 " defaultBindingMode":" TwoWay",
 " useBatch":是的,
 " defaultCountMode":"内联"
 }
 }
 },
 

我想删除一个实体的多行,但是我想在一个请求中删除它,这就是为什么我使用submitChanges调用批处理请求并处理submitChanges中成功或错误事件的原因:

 onDeletePress:function(oEvent){


 var self = this;


//获取模型
 var oModel = this.getView()。getModel();


//获取选中的行
 var oSelectedContextPaths = this.byId(" idMaterialList")。getSelectedContextPaths();


//每行调用delete
 如果(oSelectedContextPaths.length === 0){
 MessageBox.error(this.getResourceBundle()。getText(" noSelection"));;
 }其他{
 oSelectedContextPaths.forEach(function(sPath){
 this.remove(sPath);
 },oModel);
 }


 this.getModel(" detailView")。setProperty("/img/busy",true);
 oModel.submitChanges({
 成功:function(oData,sResponse){
 MessageToast.show(self.getResourceBundle()。getText(" deleteConditionSuccess"));;
 self.getView()。getModel()。refresh(true);
 self.getModel(" detailView")。setProperty("/img/busy",false);
 },
 错误:function(oError){
 self.getModel(" detailView")。setProperty("/img/busy",false);
 }
 });
 },
 

submitChanges方法中定义的成功函数和错误函数都不会被调用。 虽然如果我将成功函数附加到remove方法中,则它会被调用,但是每行都会出现。

我没有想到这种行为,而且我很确定我之前做过类似的事情,并且成功从commitChanges中调用。

请帮助...

付费偷看设置
发送
3条回答
太Q了
1楼 · 2020-08-31 01:44.采纳回答

我怀疑调用'submitChanges'时是否发生了任何事情。 验证是否在"网络"选项卡中。

调用this.remove()时,我怀疑本身已在其中调用了"删除"。

如果您想让" submitChanges"触发调用,则需要使用API​​" setDeferredGoups"。

Alawn_Xu
2楼-- · 2020-08-31 01:49

也许我不太清楚,但是可以。 批处理请求已发送,但由于我没有收到回调,因此似乎不是由commitChanges方法发送的。

无论如何,非常感谢,如果我定义了自己的延期小组,那就行了!

看起来像这样:

 var self = this;


//获取模型
 var oModel = this.getView()。getModel();


//获取选中的行
 var oSelectedContextPaths = this.byId(" idMaterialList")。getSelectedContextPaths();

//定义组ID
 oModel.setDeferredGroups([" priceDeleteGroup"]);


//每行调用delete
 如果(oSelectedContextPaths.length === 0){
 MessageBox.error(this.getResourceBundle()。getText(" noSelection"));;
 }其他{
 oSelectedContextPaths.forEach(function(sPath){
 this.remove(sPath,{groupId:" priceDeleteGroup"});
 },oModel);
 }


 this.getModel(" detailView")。setProperty("/img/busy",true);
 oModel.submitChanges({
 groupId:" priceDeleteGroup",
 成功:function(oData,sResponse){
 MessageToast.show(self.getResourceBundle()。getText(" deleteConditionSuccess"));;
 self.getView()。getModel()。refresh(true);
 self.getModel(" detailView")。setProperty("/img/busy",false);
 },
 错误:function(oError){
 self.getModel(" detailView")。setProperty("/img/busy",false);
 }
 });
 

我仍然不明白的是为什么我以前不需要这个。 而且我很确定它在没有显式定义groupId的情况下仍能正常工作。

亦是此间程序员
3楼-- · 2020-08-31 01:39

这是一个旧线程,但是无论如何:
对oModel.remove的调用(没有批处理组)通常会立即触发一个请求。 我个人认为这是一个错误。

致敬莫滕

一周热门 更多>