我如何通过oData服务将对象数组传递到后端系统

2020-09-10 06:20发布

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

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


你好

我必须使用oData服务将表传递给后端系统,但是每次我尝试执行该服务时,都会抛出一条错误消息: ERROR_INFO解析XML流时出错。

我哪里出错了?

ONAPPROVESET_CREATE_ENTITY

 TYPES:类型为ts_req,
              request_no TYPE/aag362/sd_apdet-request_no,
              customerid TYPE/aag362/sd_spreq-customer_code,
              收货人类型/aag362/sd_spreq-consignee_code,
              材料类型/aag362/sd_spreq-material_code,
              item_no TYPE/aag362/sd_apdet-item_no,
              批准者类型/aag362/sd_spreq-requestor,
              TYPE被拒绝/aag362/sd_apdet拒绝,
            ts_req的结尾。

     数据:ls_req TYPE ts_req,
           wa_req TYPE ts_req,
           ls_entity喜欢er_entity,
           lt_return bapiret2的类型表。

     数据lo_logger类型参考/iwbep/cl_cos_logger。
     数据lv_text TYPE/iwbep/sup_msg_longtext。
     数据:lt_req_det ts_req的类型表。
     数据:g_ref类型REF TO/aag362/cl_sd_spa。
     创建对象g_ref。

     尝试。
         调用方法io_data_provider-> read_entry_data
           输入
             es_data = lt_req_det。
       捕捉/iwbep/cx_mgw_tech_exception。
     ENDTRY。

     如果lt_req_det不是INITIAL。
       读取表lt_req_det INTO wa_req索引1。
       呼叫方法g_ref-> on_approval
         出口
           im_reqno = wa_req-request_no
           im_customer = wa_req-customerid
           im_req_details = lt_req_det
 *重要
 * ex_status =
         。
 

JS

 var that = this;
    var i;
    var标志= 0;
    var oTable = that.getView()。byId(" tabReqDet");
    var oItems = oTable.getSelectedItems();
    var reqNo = that.getView()。byId(" txtReqNo")。getText();
    var reqData = {
     reqData:[{
      申请号码: "",
      顾客ID: "",
      项目编号: "",
      rejectedItems:""
     }]
    };
    that.jModel = new sap.ui.model.json.JSONModel();
    that.jModel.setData(reqData);
    reqData.reqData.pop({
     申请号码: "",
     顾客ID: "",
     项目编号: "",
     rejectedItems:""
    });
    var sServiceUrl ="/img/sap/opu/odata/AAG362/SD_SPECIALPRICE_APP_SRV";
    var reqDets ="/img/masterListSet('" + reqNo +"')/detailPageSet";
    var oPath = new sap.ui.model.odata.ODataModel(sServiceUrl,true);
    oPath.setUseBatch(false);
    oPath.read(reqDets,{
     成功:功能(oData,响应){
      if(oData.results!=="未定义" || oData.results!== null){
       对于(i = 0; i 
 

EntitySet

预先感谢

致谢

Siddharth

(15.5 kB)

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

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


你好

我必须使用oData服务将表传递给后端系统,但是每次我尝试执行该服务时,都会抛出一条错误消息: ERROR_INFO解析XML流时出错。

我哪里出错了?

ONAPPROVESET_CREATE_ENTITY

 TYPES:类型为ts_req,
              request_no TYPE/aag362/sd_apdet-request_no,
              customerid TYPE/aag362/sd_spreq-customer_code,
              收货人类型/aag362/sd_spreq-consignee_code,
              材料类型/aag362/sd_spreq-material_code,
              item_no TYPE/aag362/sd_apdet-item_no,
              批准者类型/aag362/sd_spreq-requestor,
              TYPE被拒绝/aag362/sd_apdet拒绝,
            ts_req的结尾。

     数据:ls_req TYPE ts_req,
           wa_req TYPE ts_req,
           ls_entity喜欢er_entity,
           lt_return bapiret2的类型表。

     数据lo_logger类型参考/iwbep/cl_cos_logger。
     数据lv_text TYPE/iwbep/sup_msg_longtext。
     数据:lt_req_det ts_req的类型表。
     数据:g_ref类型REF TO/aag362/cl_sd_spa。
     创建对象g_ref。

     尝试。
         调用方法io_data_provider-> read_entry_data
           输入
             es_data = lt_req_det。
       捕捉/iwbep/cx_mgw_tech_exception。
     ENDTRY。

     如果lt_req_det不是INITIAL。
       读取表lt_req_det INTO wa_req索引1。
       呼叫方法g_ref-> on_approval
         出口
           im_reqno = wa_req-request_no
           im_customer = wa_req-customerid
           im_req_details = lt_req_det
 *重要
 * ex_status =
         。
 

JS

 var that = this;
    var i;
    var标志= 0;
    var oTable = that.getView()。byId(" tabReqDet");
    var oItems = oTable.getSelectedItems();
    var reqNo = that.getView()。byId(" txtReqNo")。getText();
    var reqData = {
     reqData:[{
      申请号码: "",
      顾客ID: "",
      项目编号: "",
      rejectedItems:""
     }]
    };
    that.jModel = new sap.ui.model.json.JSONModel();
    that.jModel.setData(reqData);
    reqData.reqData.pop({
     申请号码: "",
     顾客ID: "",
     项目编号: "",
     rejectedItems:""
    });
    var sServiceUrl ="/img/sap/opu/odata/AAG362/SD_SPECIALPRICE_APP_SRV";
    var reqDets ="/img/masterListSet('" + reqNo +"')/detailPageSet";
    var oPath = new sap.ui.model.odata.ODataModel(sServiceUrl,true);
    oPath.setUseBatch(false);
    oPath.read(reqDets,{
     成功:功能(oData,响应){
      if(oData.results!=="未定义" || oData.results!== null){
       对于(i = 0; i 
 

EntitySet

预先感谢

致谢

Siddharth

(15.5 kB)
付费偷看设置
发送
3条回答
SKY徐
1楼 · 2020-09-10 06:29.采纳回答

嗨,

我认为您的结构不正确。

这是我的方法:

 var oZiekteDatums = [];
 for(var i = 0; i 
 

在我的情况下," ZiekteDatumSet"是" ZiekteRegsitratie"的关联:

在您的情况下,我应该这样做:

创建一个实体" requestDataSet"和一个关联" requestDataItemsSet"。

比这样做:

填充数组的深层结构:

 aRequestDataItem.push(
 {requestNumber:" 123",
 customerId:" 456",
 itemNumber:" 789",
 rejectedItems:" XXX"
 }

 aRequestDataItem.push(
 {requestNumber:" 789",
 customerId:" 741",
 itemNumber:" 852",
 rejectedItems:" XYZ"
 } 

填写您的有效载荷:

 var oRequestDataSet = {
 " key":aKey,
 " requestDataItemsSet":aRequestDataItem
 }; 

" requestDataItemSet"是您的关联的名称!

致电您的服务

 oModel.create("/img/onApproveSet",oRequestDataSet,{成功:...,错误:...} 

这应该有效;-)

KR

Vincent

Cikesha
2楼-- · 2020-09-10 06:43

感谢您回答我的问题。

我实现了该方法,并对其进行了测试以在其中放置一个外部调试器。

,但是从Fiori应用程序调用时,程序未到达断点。

在到达该点之前,我得到了xml解析器错误。

致谢

Siddharth

Alawn_Xu
3楼-- · 2020-09-10 06:37

嗨,

您将必须实现方法

/IWBEP/IF_MGW_APPL_SRV_RUNTIME〜CREATE_DEEP_ENTITY

检索数据:

尝试。
         io_data_provider-> read_entry_data(
           输入
             es_data = ls_gw_request
         )。
       捕捉/iwbep/cx_mgw_tech_exception。  "
     ENDTRY。

ls_gw_request包含您的数据

KR

Vincent

一周热门 更多>