移动开发工具包-如何为一个循环中的一个动作设置几个actionBindings

2020-08-17 10:12发布

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

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


大家好,

目前,我正在开发一个应用程序,要对该应用程序对实体"订单"的多个实例执行删除操作。

我查询了该实体以获取要删除的实例,对于每个实例,我想执行一个删除操作,因为" DeleteEntity"操作一次只能删除一个实体(如果我输入错误,请更正我 )。

因此,我想通过设置actionBinding(setActionBinding)来移交每个实体的readLink,并执行该动作。

您是否有"最佳实践",使用" DeleteEntity"操作一次删除一个实体的多个实例? 不幸的是,在资产管理器的实施中找不到任何示例。

最好的问候

Sher-Chan Kodirov

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

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


大家好,

目前,我正在开发一个应用程序,要对该应用程序对实体"订单"的多个实例执行删除操作。

我查询了该实体以获取要删除的实例,对于每个实例,我想执行一个删除操作,因为" DeleteEntity"操作一次只能删除一个实体(如果我输入错误,请更正我 )。

因此,我想通过设置actionBinding(setActionBinding)来移交每个实体的readLink,并执行该动作。

您是否有"最佳实践",使用" DeleteEntity"操作一次删除一个实体的多个实例? 不幸的是,在资产管理器的实施中找不到任何示例。

最好的问候

Sher-Chan Kodirov

付费偷看设置
发送
3条回答
shere_lin
1楼 · 2020-08-17 11:01.采纳回答

您好 Jitendra Kansal

你是对的,我得到了答案。 我们已经开发了一种解决方案,基本上可以做到这一点,但是我们没有使用for循环,而是使用了数组的" reduce"方法来链接promise。 我只是想分享我从你那里得到的信息:

 function ExecuteDeleteProduct(prodBinding){
   console.log(`关于删除产品:$ {prodBinding [" @ odata.readLink"]}`);
  //在这种情况下," this"是我们使用下面的bind(pageProxy,...)设置的PageProxy类...
   this.setActionBinding(prodBinding);
  //必须返回executeAction返回的promise,以使链保持活动状态。
   返回this.executeAction('/ProductListApp/Actions/Products/DeleteProduct.action');
 }
/**
  *描述此功能...
  * @param {IClientAPI}上下文
  */
 导出默认功能DeleteProductEntities(context){
   让pageProxy = context.getPageProxy();
  //REPLACE THIS:但是,您计划以数组的形式获取要删除的产品列表。
   var listOfProductToDelete = [];
   var length = listOfProductToDelete.length;
   var LatestPromise = Promise.resolve(); //在链中创建初始承诺,该初始承诺将立即解决。
  //因为通过PageProxy.setActionBinding,每页只有1个动作绑定副本,所以我们必须将所有删除链接在一起,
  //,以便使用promise链一对一地同步执行它们。
  //我们不能并行执行它们,因为您只能有1个动作绑定副本,它们最终将一遍又一遍地删除相同的产品。
   for(var i = 0; i  ReadLink应绑定到" {@ odata.readLink}"
    //等待触发下一个产品删除之前解决最新的承诺
    //使用bind将PageProxy设置为函数的'this'上下文,
    //执行时将prodBinding传递给函数
    //然后将新返回的Promise设置为LatestPromise变量以进行链接。
     LatestPromise = LatestPromise.then(ExecuteDeleteProduct.bind(pageProxy,prodBinding));
   }
  //添加最后一条链以显示所有产品均已删除的祝酒词。 并且必须记住要返回连锁承诺!
   返回LatestPromise.then(function(){
    //您可以将其替换为其他内容
     this.executeAction("/img/ProductListApp/Actions/Service/ProductsDeletionSuccesful.action");
   } .bind(pageProxy));
 } 

我猜这些注释很好地描述了代码!

感谢重播和BR,

Sher-Chan Kodirov

SAP德到
2楼-- · 2020-08-17 10:52

Sher-Chan Kodirov

您的理解是正确的, OData DeleteEntity操作一次只能删除一个实体。

关于您的要求,我发现我们的专家已经用您的示例回答了您的问题,请看一看,希望对您有所帮助。

当学会了学习
3楼-- · 2020-08-17 10:58

Hi Jitendra,

你是对的,我得到了答案。 我们已经开发了一种解决方案,基本上可以做到这一点,但是我们没有使用for循环,而是使用了数组的" reduce"方法来链接promise。 我只是想分享我从你那里得到的信息:

 function ExecuteDeleteProduct(prodBinding){
   console.log(`关于删除产品:$ {prodBinding [" @ odata.readLink"]}`);
  //在这种情况下," this"是我们使用下面的bind(pageProxy,...)设置的PageProxy类...
   this.setActionBinding(prodBinding);
  //必须返回executeAction返回的promise,以使链保持活动状态。
   返回this.executeAction('/ProductListApp/Actions/Products/DeleteProduct.action');
 }
/**
  *描述此功能...
  * @param {IClientAPI}上下文
  */
 导出默认功能DeleteProductEntities(context){
   让pageProxy = context.getPageProxy();
  //REPLACE THIS:但是,您计划以数组的形式获取要删除的产品列表。
   var listOfProductToDelete = [];
   var length = listOfProductToDelete.length;
   var LatestPromise = Promise.resolve(); //在链中创建初始承诺,该初始承诺将立即解决。
  //因为通过PageProxy.setActionBinding,每页只有1个动作绑定副本,所以我们必须将所有删除链接在一起,
  //,以便使用promise链一对一地同步执行它们。
  //我们不能并行执行它们,因为您只能有1个动作绑定副本,它们最终将一遍又一遍地删除相同的产品。
   for(var i = 0; i  ReadLink应绑定到" {@ odata.readLink}"
    //等待触发下一个产品删除之前解决最新的承诺
    //使用bind将PageProxy设置为函数的'this'上下文,
    //执行时将prodBinding传递给函数
    //然后将新返回的Promise设置为LatestPromise变量以进行链接。
     LatestPromise = LatestPromise.then(ExecuteDeleteProduct.bind(pageProxy,prodBinding));
   }
  //添加最后一条链以显示所有产品均已删除的祝酒词。 并且必须记住要返回连锁承诺!
   返回LatestPromise.then(function(){
    //您可以将其替换为其他内容
     this.executeAction("/img/ProductListApp/Actions/Service/ProductsDeletionSuccesful.action");
   } .bind(pageProxy));
 } 

我猜这些注释很好地描述了代码!

感谢重播和BR,

Sher-Chan Kodirov

一周热门 更多>