未在SAPUI5的表控件中加载“子模型”数据

问题描述

环境

框架:SAPUI5 V.1.38.39
使用的控件:Table
IDE:SAP Web IDE

问题

绑定到控件的数据为或为空,或者为oData模型而不是oData“子模型”

代码

manifest.json中主模型的定义:

"sap.app": {
    [...]
    "dataSources": {
        "ZTRACK_AND_TRACE_SRV": {
            "uri": "/sap/opu/odata/sap/ZTRACK_AND_TRACE_SRV","type": "OData","settings": {
                "odataVersion": "2.0","localUri": "localService/Metadata.xml","annotations": []
            }
        }
    }
},[...]
"sap.ui5": {
    [...]
    "models": {
        "TrackAndTrace": {
            "type": "sap.ui.model.odata.ODataModel","settings": {
                "defaultOperationMode": "Auto","defaultBindingMode": "OneWay","defaultCountMode": "None"
            },"dataSource": "ZTRACK_AND_TRACE_SRV","preload": true
        },"HandlingUnitMultipleModel": {
            "type": "sap.ui.model.odata.ODataModel",[...]
}

在控制器中创建oData模型:

sap.ui.define([
    [...]
    "TrackAndTrace/ztntapp_b2b/model/models"
],function ([...],models) {
    "use strict";

    return BaseController.extend("TrackAndTrace.controller.DirectTrackView",{
        formatter: formatter,onInit: function () {

            var sSendingId = window.URI()._parts.fragment.split("/")[2] ? window.URI()._parts.fragment.split("/")[2] : "";
            var sWaybill = window.URI()._parts.fragment.split("/")[3] ? window.URI()._parts.fragment.split("/")[3] : "";
            var sZip = window.URI()._parts.fragment.split("/")[4] ? window.URI()._parts.fragment.split("/")[4] : "";
            this.initODataModel();

            this.getView().setModel(models.createHandlingUnit(this.oTrackNTraceModel,sSendingId,sWaybill,sZip),"HandlingUnitModel"); 
            // this.oTrackNTraceModel is the model from the manifest
            [...]
        },[...]

如何在model.js中定义HandlingUnitModel:

createHandlingUnit: function (oModel,sZip) {
            var HandlingUnitModel = new JSONModel();
            oModel.read(`/HANDLING_UNITSet(SendingId='${sSendingId}',Waybill='${sWaybill}',Zip='${sZip}')`,{
                success: function (oData) {
                    HandlingUnitModel.setData(oData.results ? oData.results[0] : oData);
                }
            });
            return HandlingUnitModel;
},

最后在try 1上查看:

<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
    <columns>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>date}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>time}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="40%">
            <Text text="{i18n>state}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="30%">
                <Text text="{i18n>city}" />
        </Column>
    </columns>
    <items>
        <ColumnListItem>
            <cells>
                <Text text="{path:'HandlingUnitModel>/StateTimestamp',type:'sap.ui.model.type.Date'}"/>
                <Text text="{path:'HandlingUnitModel>/StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
                <Text text="{parts:[{path: 'HandlingUnitModel>/EventCategory'},{path: 'HandlingUnitModel>/StateId'},{path: 'HandlingUnitModel>/StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
                    <customData>
                        <core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
                    </customData>
                </Text>
                <Text text="{HandlingUnitModel>/City}" />
            </cells>
        </ColumnListItem>
    </items>
</Table>

尝试1的问题是绑定数据来自HandlingUnitModel,而不是表的“ items”属性中提到的HandlingUnitModel / toDetails

尝试2:

<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
    <columns>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>date}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>time}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="40%">
            <Text text="{i18n>state}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="30%">
                <Text text="{i18n>city}" />
        </Column>
    </columns>
    <items>
        <ColumnListItem>
            <cells>
                <Text text="{path:'HandlingUnitModel>StateTimestamp',type:'sap.ui.model.type.Date'}"/>
                <Text text="{path:'HandlingUnitModel>StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
                <Text text="{parts:[{path: 'HandlingUnitModel>EventCategory'},{path: 'HandlingUnitModel>StateId'},{path: 'HandlingUnitModel>StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
                    <customData>
                        <core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
                    </customData>
                </Text>
                <Text text="{HandlingUnitModel>City}" />
            </cells>
        </ColumnListItem>
    </items>
</Table>

使用try 2时,没有数据绑定,表为空,控制台中没有任何错误消息

尝试3:

<Table inset="false" items="{path: 'HandlingUnitModel>/toDetails'}" id="tableStatusDetails">
    <columns>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>date}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="15%">
            <Text text="{i18n>time}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="40%">
            <Text text="{i18n>state}"/>
        </Column>
        <Column minScreenWidth="Tablet" demandPopin="true" width="30%">
                <Text text="{i18n>city}" />
        </Column>
    </columns>
    <items>
        <ColumnListItem>
            <cells>
                <Text text="{path:'HandlingUnitModel>/toDetails/StateTimestamp',type:'sap.ui.model.type.Date'}"/>
                <Text text="{path:'HandlingUnitModel>/toDetails/StateTimestamp',formatter:'.formatter.formatStateTime'}"/>
                <Text text="{parts:[{path: 'HandlingUnitModel>/toDetails/EventCategory'},{path: 'HandlingUnitModel>/toDetails/StateId'},{path: 'HandlingUnitModel>/toDetails/StateDescription'}],formatter:'.formatter.noExpectedStatus'}">
                    <customData>
                        <core:CustomData key="EventCategory" value="{HandlingUnitModel>/EventCategory}"/>
                    </customData>
                </Text>
                <Text text="{HandlingUnitModel>/toDetails/City}" />
            </cells>
        </ColumnListItem>
    </items>
</Table>

尝试3的问题与尝试2的问题相同

假设

我想从HandlingUnitModel> / toDetails中的数据没有加载,为什么?以及如何实现它?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)