Таблица не отображает данные - PullRequest
0 голосов
/ 26 ноября 2018

Здесь я использую таблицу для отображения данных из сервиса 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 пытается перейти к спецификации пути, но этого не происходит, при этом должна отображаться ссылка на соответствующую спецификацию "12345".Здесь я использую статическую ссылку как «12345», добавляя к той же точке, может ли она быть динамической.

РЕДАКТИРОВАТЬ:

Я получаю пустую таблицу, но когда я отлаживаю, массив передает значение.Снимок экрана приведен ниже, но значения не отображаются в таблице.

Спасибо и ценим !!!

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Установка привязки таблицы в представлении должна работать следующим образом:

<Table id="BoM" items="{path : 'oModelBoM>**results**'}" >

Однако подход, который вы используете, не очень хорош.Вы можете исключить использование jsonModel и напрямую связать модель OData при успешном чтении.

В этом случае ваш код должен работать, как сейчас, без каких-либо изменений.

0 голосов
/ 27 ноября 2018

Прежде всего, я удивлен, что ваша функция getProductBoM работает.Вы возвращаете переменную oResult.Значение этой переменной устанавливается в обратном вызове, поэтому в большинстве случаев ПОСЛЕ того, как оно возвращается.

Похоже, что для параметра async функции чтения установлено значение false?Подумайте о переходе на Обещания.Синхронизация вызовов не рекомендуется (браузерами!).

Во-вторых, ваша модель имеет следующую структуру:

{
    "__metadata": {
        ...
    },
    "results": [
        { ... },
        { ... }
    ]
}

Поэтому я бы изменил строку, в которой вы устанавливаете данные, на this.oModelBoM.setData(oBoM.results);

...