代码之家  ›  专栏  ›  技术社区  ›  THI

如何通过ui5中的odataModel.create为2个或多个实体集创建条目

  •  0
  • THI  · 技术社区  · 7 年前

    我有一个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",
              }
          ]
       }
    }
    

    控制器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));
    

    **调试器-头负载**

    {  
       "CompanyID":"RSW0",
       "StockRoomID":"A200",
       "SalesDocument":"4053",
       "Return":"X",
       "Reason":"101",
       "ItemSet":[  
          {  
             "SalesDocument":"4053",
             "SalesDocumentItem":"000010",
             "StockRoomID":"A200",
             "ReturnItemFlag":"X",
             "QtyToReturn":"1.000"
          },
          {  
             "SalesDocument":"4053",
             "SalesDocumentItem":"000020",
             "StockRoomID":"A200",
             "ReturnItemFlag":"X",
             "QtyToReturn":"1.000"
          },
          {  
             "SalesDocument":"4053",
             "SalesDocumentItem":"000030",
             "StockRoomID":"A200",
             "ReturnItemFlag":"X",
             "QtyToReturn":"1.000"
          }
       ]
    }
    

    **调试程序-响应**

    {  
       "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"
             }
          }
       }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Nandan Chaturvedi    7 年前

    这是从标题到项目的依赖实体或导航属性的场景。google“深入了解sapui5和odata”。

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

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

    oEntry.Items = ItemSet; 
    

    如果有帮助,请告诉我。