SAP Hybrid应用-OData问题

2020-08-20 06:23发布

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

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


专家们,

我们正在构建具有离线功能的SAP Hybrid应用。 我们正在调用oData服务,该应用应为此应用创建离线存储。 我们以以下方式定义了定义请求:

 openStore:function(){
         console.log("在openStore");
         jQuery.sap.require(" sap.ui.thirdparty.datajs"); //使用SAPUI5和Kapsel离线商店时需要
         var properties = {
             " name":" store_PurchaseOrder",
             "主机":sap.hybrid.kapsel.appContext.registrationContext.serverHost,
             "端口":sap.hybrid.kapsel.appContext.registrationContext.serverPort,
             " https":sap.hybrid.kapsel.appContext.registrationContext.https,
             " serviceRoot":fiori_client_appConfig.appID +" _ECConPremise/sap/opu/odata/sap/ZGOODSRECEIPT_OFFLINE_SRV/",
 " definingRequests":{
 " PurchaseOrderItemSet":"/img/PurchaseOrderItemSet?$ top = 50"
 }
         };
    
         store = sap.OData.createOfflineStore(properties);
    
         var openStoreSuccessCallback = function(){
             console.log("在openStoreSuccessCallback");
             sap.OData.applyHttpClient(); //现在可以针对datajs进行离线OData调用。
             sap.hybrid.startApp();
         }
    
         var openStoreErrorCallback = function(error){
             console.log("在openStoreErrorCallback");
             alert("发生错误" + JSON.stringify(错误));
         }
    
         store.open(openStoreSuccessCallback,openStoreErrorCallback);
     },
 

在日志中,我们可以看到正在创建商店并正确打开了商店。

我们正在通过以下服务电话读取数据

 var oDataModel = sap.ui.model.odata.v2.ODataModel(
 "/img/sap/opu/odata/sap/ZGOODSRECEIPT_OFFLINE_SRV",true);

 var mParameters = {
 成功:函数(oData,oResponse){
 调试器;
 console.log(JSON.stringify(oData));
 } .bind(this),

         错误:函数(oError){

 } .bind(this)
 };
 oDataModel.read("/img/PurchaseOrderItemSet",mParameters);
 

当我们使用Webide Preview运行应用程序时,我们会收到odata服务返回的多条记录,但是当我们在设备上以混合应用程序(在执行Build Packaged App之后)运行该应用程序时,我们只会得到 服务。 我们在后端设置了外部断点,并注意到服务在输出中返回了多条记录,但在应用程序中,我们仅获得了一条记录(结果集的最后一条记录)。 任何人都可以建议为什么在将应用程序作为混合应用程序运行时,为什么oData会有不同的响应。

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

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


专家们,

我们正在构建具有离线功能的SAP Hybrid应用。 我们正在调用oData服务,该应用应为此应用创建离线存储。 我们以以下方式定义了定义请求:

 openStore:function(){
         console.log("在openStore");
         jQuery.sap.require(" sap.ui.thirdparty.datajs"); //使用SAPUI5和Kapsel离线商店时需要
         var properties = {
             " name":" store_PurchaseOrder",
             "主机":sap.hybrid.kapsel.appContext.registrationContext.serverHost,
             "端口":sap.hybrid.kapsel.appContext.registrationContext.serverPort,
             " https":sap.hybrid.kapsel.appContext.registrationContext.https,
             " serviceRoot":fiori_client_appConfig.appID +" _ECConPremise/sap/opu/odata/sap/ZGOODSRECEIPT_OFFLINE_SRV/",
 " definingRequests":{
 " PurchaseOrderItemSet":"/img/PurchaseOrderItemSet?$ top = 50"
 }
         };
    
         store = sap.OData.createOfflineStore(properties);
    
         var openStoreSuccessCallback = function(){
             console.log("在openStoreSuccessCallback");
             sap.OData.applyHttpClient(); //现在可以针对datajs进行离线OData调用。
             sap.hybrid.startApp();
         }
    
         var openStoreErrorCallback = function(error){
             console.log("在openStoreErrorCallback");
             alert("发生错误" + JSON.stringify(错误));
         }
    
         store.open(openStoreSuccessCallback,openStoreErrorCallback);
     },
 

在日志中,我们可以看到正在创建商店并正确打开了商店。

我们正在通过以下服务电话读取数据

 var oDataModel = sap.ui.model.odata.v2.ODataModel(
 "/img/sap/opu/odata/sap/ZGOODSRECEIPT_OFFLINE_SRV",true);

 var mParameters = {
 成功:函数(oData,oResponse){
 调试器;
 console.log(JSON.stringify(oData));
 } .bind(this),

         错误:函数(oError){

 } .bind(this)
 };
 oDataModel.read("/img/PurchaseOrderItemSet",mParameters);
 

当我们使用Webide Preview运行应用程序时,我们会收到odata服务返回的多条记录,但是当我们在设备上以混合应用程序(在执行Build Packaged App之后)运行该应用程序时,我们只会得到 服务。 我们在后端设置了外部断点,并注意到服务在输出中返回了多条记录,但在应用程序中,我们仅获得了一条记录(结果集的最后一条记录)。 任何人都可以建议为什么在将应用程序作为混合应用程序运行时,为什么oData会有不同的响应。

付费偷看设置
发送
3条回答
d56caomao
1楼-- · 2020-08-20 06:54

嗨,

没有关于您的数据集和数据结构的更多信息:您是否可能未在SEGW中定义属性键字段? 在将自己预订到数据库中时,每行可能会覆盖之前的那一行,因为它具有相同的密钥……这只是我的第一个想法,因为代码本身看起来确实不错。

代楠1984
2楼-- · 2020-08-20 06:52
< p>嘿arjun,

在相同情况下,我得到了任何解决方案。

谢谢

问候

Jai

昵称总是被占用
3楼-- · 2020-08-20 07:03

嗨,Oliver,

感谢您的回复。

我们的odata输出类似于:

< p>

PO号和物料号的组合是组合主键。

在我们的应用程序中 我们正在尝试为采购订单进行GR发布。 因此,在过帐采购订单时,将生成物料凭证。 因此,我们在发布时使用以下代码进行创建操作:

当通过混合应用执行上述代码时,出现以下错误:

{"错误":{"代码":-10103,"消息":{" lang":" zh-CN","值":" [-10103] 新实体的指定键是 现有实体。"}}}

为解决此问题,在Odata输出结构中,我们添加了一个新的键字段。在新的键字段中,我们将从UI传递随机编号以使其保持不变

当前,在odata读取操作过程中,这个新的关键字段没有得到任何值。是否可能引起问题?

请告知我们的方法是否需要一些方法 纠正。

一周热门 更多>