HTTP同步请求-sap.m.BusyDialog不起作用

2020-08-27 09:51发布

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

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


专家们,

我开发了一个ui5应用程序,在循环中,我正在使用JavaScript调用销售订单API 在S4HANA云中更新多个销售订单。

示例代码:

var a = new sap.m.BusyDialog();

a.open();

for循环{

var data = null;

var xhr = new XMLHttpRequest();

xhr.withCredentials = false; xhr.addEventListener(" readystatechange",function(){if(this.readyState === this.DONE){console.log(this.responseText);}});

//设置请求方法

//API沙箱的API端点

xhr.open(" PATCH"," https://XXXX.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder('{SalesOrder }')"); //可用的API端点//https://{host}:{port}/sap/opu/odata/sap/API_SALES_ORDER_SRV//添加请求标头xhr.setRequestHeader(" Content-Type"," application/json",false );

xhr.setRequestHeader(" Accept"," application/json");

//API沙箱的API密钥xhr.setRequestHeader(" APIKey"," ");

//适用于生产性API端点的可用安全方案

//基本身份验证

//基本身份验证:在授权标头中以Base64提供用户名:密码

//xhr.setRequestHeader(" Authorization"," Basic ");

//发送请求xhr.send(data);

}

a.close();

但是BusyDialog不起作用。 需要您的帮助。

谢谢

拉克什曼·巴拉那古(Lakshman Balanagu)。

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

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


专家们,

我开发了一个ui5应用程序,在循环中,我正在使用JavaScript调用销售订单API 在S4HANA云中更新多个销售订单。

示例代码:

var a = new sap.m.BusyDialog();

a.open();

for循环{

var data = null;

var xhr = new XMLHttpRequest();

xhr.withCredentials = false; xhr.addEventListener(" readystatechange",function(){if(this.readyState === this.DONE){console.log(this.responseText);}});

//设置请求方法

//API沙箱的API端点

xhr.open(" PATCH"," https://XXXX.api.sap.com/s4hanacloud/sap/opu/odata/sap/API_SALES_ORDER_SRV/A_SalesOrder('{SalesOrder }')"); //可用的API端点//https://{host}:{port}/sap/opu/odata/sap/API_SALES_ORDER_SRV//添加请求标头xhr.setRequestHeader(" Content-Type"," application/json",false );

xhr.setRequestHeader(" Accept"," application/json");

//API沙箱的API密钥xhr.setRequestHeader(" APIKey"," ");

//适用于生产性API端点的可用安全方案

//基本身份验证

//基本身份验证:在授权标头中以Base64提供用户名:密码

//xhr.setRequestHeader(" Authorization"," Basic ");

//发送请求xhr.send(data);

}

a.close();

但是BusyDialog不起作用。 需要您的帮助。

谢谢

拉克什曼·巴拉那古(Lakshman Balanagu)。

付费偷看设置
发送
8条回答
宇峰Kouji
1楼 · 2020-08-27 10:14.采纳回答

您好拉奎尔·马丁·巴里那不勒斯马丹

谢谢你们。

现在,我将更新逻辑从javascript(xhr.send)更改为Odata api(OdataModel.update),一切正常。 最初,我没有在manifest.json中正确初始化odata模型。

现在,更新正在异步模式下进行。 甚至sap.m.BusyDialog也可以按预期运行。

对于Etag,我要传递" *"。

  oModel.update(" ../Salesorder('key')",oData,{
   merge:true,/*如果设置为true:PATCH/MERGE */
   成功:function(){/*做某事*/},
   错误:function(oError){/*做某事*/},
  Etag:" *"
 }); 

谢谢

拉克什曼·巴拉那古(Lakshman Balanagu)。

四川大学会员
2楼-- · 2020-08-27 10:15

嗨,拉克什曼,

当您说BusyDialog不起作用时,它在完成循环后不会停止吗?

最好的问候

苏尼尔·辛塔拉帕蒂

Nan4612
3楼-- · 2020-08-27 10:14

亲爱的拉什曼·巴拉那古

为什么要尝试使用同步内容。 您可以通过帮助的异步方式进行引用。 您可以非常轻松地在调用响应中调用对话框的关闭,并检查是否最后输入然后关闭对话框。 同步XHR现在处于弃用状态

" XMLHttpRequest 支持 同步和异步通信都可以,但是总的来说,出于性能方面的考虑,异步请求应优先于同步请求。

同步请求阻止执行代码,从而导致屏幕上的"冻结"和无响应的用户体验。"

谢谢

nabheet

Baoming ROSE
4楼-- · 2020-08-27 10:12

嗨苏尼尔,

感谢您的回复。 BusyDialog不会在屏幕上弹出。 如果我使用chrome inspect进行调试,则它会出现在屏幕上。

感谢,
Lakshman Balanagu。

吹牛啤
6楼-- · 2020-08-27 10:17

Lakshman Balanagu 的一个小要求不要将其发布为答案,因为我们仍然在讨论评论方面要好得多。 更新是此修补程序请求的正确方法。 您可以将该代码与一些调试器屏幕截图一起粘贴吗? 我希望异步内容很清楚

huskylover
7楼-- · 2020-08-27 10:32

您好 Lakshman Balanagu

如果您查看拉奎尔·马丁·巴里发布的有用的博客链接, 可以直接使用Odata服务方法。 在一个循环中。 一旦成功完成回调,就可以隐藏忙碌的对话框。

谢谢

nabheet

一周热门 更多>