我可以在格式化程序中使用oData调用吗?

2020-09-19 16:16发布

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

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


专家您好,

我实现了一个函数导入,该函数接受来自实体A的合作伙伴代码并返回来自实体B的合作伙伴描述。由于代码不是实体A的一部分,并且SEGW不允许我创建代码,因此此处无法使用关联 之一。 从实体B开始加载数据也不是一种选择,它包含超过150.000个条目。 函数导入工作正常,我的问题是格式器似乎不等待oData调用返回的数据,即使我同时附加了promise和" batchrequestcompleted "事件。 我在调试器中观看了以正确顺序执行的所有指令(并返回了预期的结果),但似乎视图没有等待。 是否可以使用某种技术使视图等待结果,还是我必须在实体A中附加额外的字段以将描述存储在后端,出于某些明显的原因,我不想这样做 。 (非常简短)下面附上的代码,有什么想法吗?

干杯

格雷格

PS:在观察代码时,有人会很容易注意到值返回了两次,一次是在成功函数中,一次是在promise之后。 毕竟,它们只是为了测试而已:D

 textPartner:函数(sValue){
 如果(!sValue){
 返回"";
 }
 var that = this.getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getController();
 var oModel = this.getModel();
 var oModelUpdateDeferred = jQuery.Deferred();


 oModel.attachEventOnce(" batchRequestCompleted",function(oEvent){
 如果(that._checkIfBatchRequestSucceeded(oEvent)){
  oModelUpdateDeferred.resolve();
 }
 });

 oModel.callFunction("/img/Get_Partner_Name",{urlParameters:{Partner_Code:sValue},
 成功:function(oData,sResponse){
 sValue = oData.ReturnValue;
 返回sValue;
 },
 错误:function(oError){
 jQuery.sap.log.error(" oData Failure",oError);
 }
 });
 var readyToGo = function(){
 返回sValue;
 };
 jQuery.when(oModelUpdateDeferred).done()。then(jQuery.proxy(readyToGo,this));
 }

       /*第二个简化的同步版本,行为相同*/

         textPartner:函数(sValue){
 如果(!sValue){
 返回"";
 }
 var oModel = this.getModel();


 oModel.callFunction("/img/Get_Partner_Name",{urlParameters:{Partner_Code:sValue},async:false,
 成功:function(oData,sResponse){
 sValue = oData.ReturnValue;
//返回sValue;
 },
 错误:function(oError){
 jQuery.sap.log.error(" oData Failure",oError);
 }
 });
 返回sValue;
 }
         

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

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


专家您好,

我实现了一个函数导入,该函数接受来自实体A的合作伙伴代码并返回来自实体B的合作伙伴描述。由于代码不是实体A的一部分,并且SEGW不允许我创建代码,因此此处无法使用关联 之一。 从实体B开始加载数据也不是一种选择,它包含超过150.000个条目。 函数导入工作正常,我的问题是格式器似乎不等待oData调用返回的数据,即使我同时附加了promise和" batchrequestcompleted "事件。 我在调试器中观看了以正确顺序执行的所有指令(并返回了预期的结果),但似乎视图没有等待。 是否可以使用某种技术使视图等待结果,还是我必须在实体A中附加额外的字段以将描述存储在后端,出于某些明显的原因,我不想这样做 。 (非常简短)下面附上的代码,有什么想法吗?

干杯

格雷格

PS:在观察代码时,有人会很容易注意到值返回了两次,一次是在成功函数中,一次是在promise之后。 毕竟,它们只是为了测试而已:D

 textPartner:函数(sValue){
 如果(!sValue){
 返回"";
 }
 var that = this.getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getParent()。getController();
 var oModel = this.getModel();
 var oModelUpdateDeferred = jQuery.Deferred();


 oModel.attachEventOnce(" batchRequestCompleted",function(oEvent){
 如果(that._checkIfBatchRequestSucceeded(oEvent)){
  oModelUpdateDeferred.resolve();
 }
 });

 oModel.callFunction("/img/Get_Partner_Name",{urlParameters:{Partner_Code:sValue},
 成功:function(oData,sResponse){
 sValue = oData.ReturnValue;
 返回sValue;
 },
 错误:function(oError){
 jQuery.sap.log.error(" oData Failure",oError);
 }
 });
 var readyToGo = function(){
 返回sValue;
 };
 jQuery.when(oModelUpdateDeferred).done()。then(jQuery.proxy(readyToGo,this));
 }

       /*第二个简化的同步版本,行为相同*/

         textPartner:函数(sValue){
 如果(!sValue){
 返回"";
 }
 var oModel = this.getModel();


 oModel.callFunction("/img/Get_Partner_Name",{urlParameters:{Partner_Code:sValue},async:false,
 成功:function(oData,sResponse){
 sValue = oData.ReturnValue;
//返回sValue;
 },
 错误:function(oError){
 jQuery.sap.log.error(" oData Failure",oError);
 }
 });
 返回sValue;
 }
         
付费偷看设置
发送
5条回答
My梦
1楼 · 2020-09-19 17:07.采纳回答

解决方法是使用SEGW的 Jun Wu 方法(建议1)(忽略 关键的东西),并使用绑定中的expand获取数据。 同步逻辑似乎不起作用。

微wx笑
2楼-- · 2020-09-19 16:53

Ack! 找到了,问题是..." expand"参数前面的$,谢谢:-)

Bunny_CDM
3楼-- · 2020-09-19 16:50

1。 如果我不厌倦,联想应该可以工作,钥匙没关系

2。 使您的odata调用syncnus

槿木_熙
4楼-- · 2020-09-19 16:54

我已经在SEGW中使关联部分正常工作,测试并正常工作,现在我的问题是绑定,检查线程中的最后一个答案,感谢您介入 仍然可以帮助您:-)

半个程序猿
5楼-- · 2020-09-19 16:42

嗨,

该协会应该像 Jun Wu 那样工作。 但是,当您进行关联时,必须使用不同的逻辑。

请查看此博客

https://blogs.sap.com/2017/12/21/list-report-adding-a-contact-quick-view-to-a-table-without-cds/

在该部分

SAP网关部分:数据模型,它将向您展示如何创建与该逻辑的关联。

亲切的问候,

约瑟夫

一周热门 更多>