在这里,我正在使用该表显示来自OData服务的数据。宁愿显示数据,我也可以看到空白但什么也没有,这意味着它表示值可用。但是它无法导航到路径或显示值。
view.xml
<Table id="BoM" headerText="BOM Details" class="sapUiResponsiveMargin" width="auto"
items="{path : 'oModelBoM>/'
}">
<columns>
<Column>
<Label text="Material" />
</Column>
<Column>
<Label text="Component" />
</Column>
<Column>
<Label text="Brand" />
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{oModelBoM>Material}" />
<Text text="{oModelBoM>Component}" />
<Text text="{oModelBoM>Brand}" />
</cells>
</ColumnListItem>
</items>
</Table>
odata.js
getProductBoM : function(iNumber){
var sNumber = iNumber.toString();
while (sNumber.length < 18) {
sNumber = "0" + sNumber
}
var vUriRead = "/ProductHeadSet('12345')/ProductHead2BOM/
var oResult;
this.initODataModel( );
this.oDataModel.read(vUriRead, null, null, false, function(oData, oResponse) {
oResult = oData;
}, function(oError) {
jQuery.sap.log.error("OData-Error in function getProductBoM (EntityProductHead2BOM)");
xyz_homepage.xyz_homepage.src.odata.displayRequestFailedMessage(oError);
});
return oResult;
}
controller.js
onInit : function() {
var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
oRouter.attachRouteMatched(this.handleRouteMatched, this);
this.oModelBoM = new sap.ui.model.json.JSONModel();
this.getView().setModel(this.oModelBoM, "oModelBoM");
},
handleRouteMatched : function(oEvent) {
if (oEvent.getParameter("name") === "ListDetailView") {
var iNumber = oEvent.getParameter("arguments").number;
//Call bom routine and set data
var oBoM = xyz_homepage.xyz_homepage.src.odata.getProductBoM(iNumber);
this.oModelBoM.setData(oBoM);
因此,Uri尝试导航到路径BOM,但没有发生,应显示与“ 12345”匹配的BOM的引用。在这里,我使用静态引用作为“ 12345”,如果它是动态的,则添加到同一点。
编辑:
我得到空白表,但是当我调试时,数组正在传递值。请在下面找到屏幕截图,但表中未显示这些值。
感谢并感激!!
答案 0 :(得分:0)
首先,我对您的getProductBoM
函数起作用感到惊讶。您正在返回变量oResult
。该变量的值是在回调中设置的,因此在大多数情况下,在返回之后。
似乎您将read函数的async
参数设置为false?考虑切换到Promises。不推荐使用同步呼叫(通过浏览器!)。
第二,您的模型具有以下结构:
{
"__metadata": {
...
},
"results": [
{ ... },
{ ... }
]
}
因此,我将更改将数据设置为this.oModelBoM.setData(oBoM.results);
的行
答案 1 :(得分:0)
按如下所示在视图中设置表绑定应该起作用:
<Table id="BoM" items="{path : 'oModelBoM>**results**'}" >
但是,您遵循的方法并不是很好。您可以消除jsonModel的使用,并在读取成功后直接绑定OData Model。
在这种情况下,您的代码应该可以按现在的样子工作,而无需进行任何更改。