如何在UI5中通过OdataModel.create为2个或更多实体集创建条目

如何在UI5中通过OdataModel.create为2个或更多实体集创建条目,odata,sapui5,Odata,Sapui5,我有一个Odata服务,有4种实体类型——地址、抄送、标题、项目、注释。 在用户按下“订单”按钮后,我想使用此服务在后端创建一个条目。我需要传递一个标题和相关项目 来自后端的oData服务: { "d" : { "__metadata" : { "id" : "http://.../sap/opu/odata/sap/ZOrders/HeaderSet('3898')", "uri" : "http://.../sap/opu/odata/sap/ZOrder

我有一个Odata服务,有4种实体类型——地址、抄送、标题、项目、注释。 在用户按下“订单”按钮后,我想使用此服务在后端创建一个条目。我需要传递一个标题和相关项目

来自后端的oData服务:

{
  "d" : {
    "__metadata" : {
      "id" : "http://.../sap/opu/odata/sap/ZOrders/HeaderSet('3898')",
      "uri" : "http://.../sap/opu/odata/sap/ZOrders/HeaderSet('3898')",
      "type" : "ZOrder.Header"
    },
    "CompanyID" : "W",
    "StockRoomID" : "A",
    "SalesDocument" : "3898",  


"ItemSet" : [
        {
          "__metadata" : {
            "id" : "http://.../sap/opu/odata/sap/ZOrders/ItemSet(SalesDocument='3898',SalesDocumentItem='000010')",
            "uri" : "http://.../sap/opu/odata/sap/ZOrders/ItemSet(SalesDocument='3898',SalesDocumentItem='000010')",
            "type" : "ZOrders.Item"
          },
          "SalesDocument" : "3898",
          "SalesDocumentItem" : "000010",  //Line item number
          "StockRoomID" : "A",
          }
      ]
   }
}
Controller.js

 buttonClick: function(event) {
    var sServiceURl = this.getOwnerComponent().getMetadata().getManifestEntry("sap.app").dataSources["ZOrders"].uri;
   this.OdataModel = new sap.ui.model.odata.v2.ODataModel(sServiceURl);
   var model = vc.getView().getModel();

   var oEntry = {};
   oEntry.CompanyID = model.getProperty("/CompanyID");
   oEntry.StockRoomID = model.getProperty("/StockRoomID");
   oEntry.SalesDocument = model.getProperty("/SalesDocument");



    //Now want to pass items data to service so 
    //Creating an empty ItemSet array, pulling data from model.

    //But my logic is wrong here for sure. 
            var itemData = [];

            var itemsArray = v.getProperty("/ItemSet");

            for (var i = 0; i < itemsArray.results.length; i++) {
            itemData.push({
                    SalesDocument: itemsArray.results[i].SalesDocument,
                    SalesDocumentItem: itemsArray.results[i].SalesDocumentItem,
                    StockRoomID: itemsArray.results[i].StockRoomID,

                });

            }
            oEntry.ItemSet = itemData;

     this.OdataModel.create("/HeaderSet", oEntry, this._submitOrderSuccess.bind(this), this._submitOrderError.bind(this));
**调试器-响应**

{  
   "d":{  
      "__metadata":{  
         "id":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')",
         "uri":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')",
         "type":"ZORDER.Header"
      },
      "CompanyID":"",
      "StockRoomID":"",
      "SalesDocument":"60000353",
      "ReferenceDoc":"",
      "AccountNumber":"",
      "PoNumber":"",
      "Message":"Return order 0060000353 has been created successfully",
      "OrderTotal":"0.00",
      "StockRoomName":"",
      "Return":"",
      "Reason":"",
      "Auth":"",
      "ItemSet":null,
      "HeaderCSDSet":{  
         "__deferred":{  
            "uri":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')/HeaderCSDSet"
         }
      },
      "AddressSet":{  
         "__deferred":{  
            "uri":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')/AddressSet"
         }
      },
      "GeneralCommentsSet":{  
         "__deferred":{  
            "uri":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')/GeneralCommentsSet"
         }
      },
      "CreditCardSet":{  
         "__deferred":"uri":"https://.../sap/opu/odata/sap/ZORDER/HeaderSet('60000353')/CreditCardSet"
         }
      }
   }
}

这是从标题到项目的从属实体或导航属性的场景。谷歌“在SAPUI5和oData中深入了解实体”

您提到的代码中有一个错误:“逻辑错误”

只需在for循环后添加一行:

oEntry.Items = ItemSet; 

让我知道这是否有帮助

谢谢你的回答。我编辑了我的控制器后的一行:“逻辑是错误的,这里肯定”。我还添加了您在for循环之后告诉我的行。你能检查一下这个代码吗?因为,现在我没有任何错误。但调试器不会在成功函数处停止。在网络中:在标题下,我看到有效负载,我可以看到传递的项目集。但在$batch的响应选项卡中,显示“ItemSet”:null。对于至少像这样的其他集合显示:“HeaderCSDSet”:{“u deferred”:{“uri”:“…sap/opu/odata/sap/ZOrders/HeaderSet('60000339')/HeaderCSDSet”}},请求的响应(状态代码)是什么?能否共享显示完整“oEntry”的调试器快照?我已编辑问题以显示调试器--标题和响应。在后端,可以正确创建顺序,但在调试模式下,光标不会在成功断点处停止。尼瑟错了。我也尝试过发出警报,但什么也没有出现。不知道光标在哪里。创建调用。
oEntry.Items = ItemSet;