如何在UI5中通过OdataModel.create为2个或更多实体集创建条目
我有一个Odata服务,有4种实体类型——地址、抄送、标题、项目、注释。 在用户按下“订单”按钮后,我想使用此服务在后端创建一个条目。我需要传递一个标题和相关项目 来自后端的oData服务:如何在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
{
"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;