表未显示数据

时间:2018-11-26 14:03:36

标签: uitableview odata sapui5

在这里,我正在使用该表显示来自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”,如果它是动态的,则添加到同一点。

编辑:

我得到空白表,但是当我调试时,数组正在传递值。请在下面找到屏幕截图,但表中未显示这些值。

感谢并感激!!

enter image description here

2 个答案:

答案 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。

在这种情况下,您的代码应该可以按现在的样子工作,而无需进行任何更改。