我们必须将OData url绑定到UI5的ODataModel
https://sapes1.sapdevcenter.com/sap/opu/odata/sap/ZCD204_EPM_DEMO_SRV/BusinessPartners('0100000000')/ SalesOrders /?$ expand = SalesOrderItems
我们能够绑定属于每个SalesOrder的根级项目.但是,如果将SalesOrderItems
子数据绑定到子进程,我们遇到问题SalesOrder
.
我们无法将SalesOrderItems的字段绑定到任何对象.我们尝试使用{SalesOrderItems/results/QuantityUnit}
,{SalesOrderItems/QuantityUnit}
没有太多运气.
你能建议任何替代方案吗?
SalesOrder和SalesOrderItem之间有1..m基数
// model of oData
var model = sap.ui.model.odata.ODataModel("proxy/https/sapes1.sapdevcenter.com/sap/opu/odata/sap/ZCD204_EPM_DEMO_SRV/",true,'username','password');
//app is defined in index.html here we are setting model to the app.
App.setModel(model);
// create a table
var pastOrder_S3= new sap.m.Table("PastOrder_S3",{
inset:true,
//visibleRowCount: 2,
firstVisibleRow: 2,
fixedColumnCount: 2,
columns:[
new sap.m.Column({
header:new sap.m.Label("item").setText("Items"),
hAlign:"Left",
width:"20px",
demandPopin:true,
popinDisplay:"Block",
minScreenWidth: sap.m.ScreenSize.Medium
}),
new sap.m.Column({
header:new sap.m.Label("orderdetail").setText("OrderDetails"),
hAlign:"Left",
width:"200px",
demandPopin:true,
popinDisplay:"Block",
minScreenWidth: sap.m.ScreenSize.Medium
})
});
//create a template to bind into the table using model.
var oTemplate_S3= new sap.m.ColumnListItem({
type: sap.m.ListType.Active,
cells: [
new sap.m.Text({
text:"{ProductName} \n {ProductID}"
}),
new sap.m.Text({
text:"OrderId: {SalesOrderID} \n {DeliveryDate} \n {TotalSum}{Currency}"
})
]
});
Run Code Online (Sandbox Code Playgroud)
// bind into the table.
`pastOrder_S3.bindAggregation("items","BusinessPartners('BusinessPartnerId')/SalesOrders/?$expand=SalesOrderItems",oTemplate_S3);`
Run Code Online (Sandbox Code Playgroud)
这里我们有一个名为'SalesOrderItems'的子属性,我们需要读取salesorderitems中的属性.
将聚合绑定到OData集合时,expand
必须单独给出参数(以及该问题的任何其他参数),而不是集合URI的一部分.
简而言之,您必须执行以下操作:
oTable.bindAggregation("items", {
path: "/BusinessPartners('BusinessPartnerId')/SalesOrders",
template: oTemplate,
parameters: {
expand: "SalesOrderItems"
}
});
Run Code Online (Sandbox Code Playgroud)
查看bindAggregation和ODataListBinding构造函数文档以获取更多详细信息.
您将面临的另一个问题是SaleOrder和SaleOrderItems之间有1:n基数.这意味着您将只能使用此导航属性来绑定聚合而不是直接绑定属性(因此您需要在另一个表中包含类似表的内容).
您必须清楚地定义应从SaleOrderItems显示的内容,以便能够"展平"它(例如,进行聚合,或选择第一个,等等).这很可能意味着必须在OData服务中进行更改,或者您必须使用UI5中的自定义控件或JSONModel而不是/与OData一起使用.
归档时间: |
|
查看次数: |
12859 次 |
最近记录: |