You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fiori自由式开发:对象页面数据不显示问题排查求助

Fiori自由式开发对象页面数据不显示问题排查

我正在使用Fiori自由式开发实现需求,以CDS view作为数据源,已创建列表页,点击条目可跳转至对象页面,但页面数据无法显示。请查看详情/对象页面的控制器与视图代码,请问我是否遗漏了什么内容?

控制器代码

sap.ui.define([
    'sap/ui/core/mvc/Controller',
    'sap/ui/model/odata/v2/ODataModel',
    'sap/ui/model/Filter',
    'sap/ui/core/util/MockServer',
    'sap/m/MessageToast',
    'sap/ui/core/routing/History',
], function (Controller, ODataModel, Filter) {
    "use strict";
    return Controller.extend("myapp.controller.DisplayRequest", {
        onInit: function () {
            var oRouter = sap.ui.core.UIComponent.getRouterFor(this);
            oRouter.getRoute("DisplayRequest").attachMatched(this._onRouteMatched, this);
        },     
        _onRouteMatched: function (oEvent) {
            var oArgs = oEvent.getParameter("arguments");
            var reqid = oArgs.Reqid;
            this._fetchData(reqid);
        }     
        _fetchData: function (reqid) {
            
            var oData = this.getView().getModel().read("/myCDSView", {
                filters: [new sap.ui.model.Filter("reqid", sap.ui.model.FilterOperator.EQ, reqid)],
                success: function (oData) {
                    var oModel = new sap.ui.model.json.JSONModel(oData);
                    this.getView().setModel(oModel, "data");
                }.bind(this),
                error: function (oError) {
                    // Handle error
                }
            });
        }
        
    });
});

视图代码

<mvc:View controllerName="myapp.controller.DisplayRequest" height="10%"
    xmlns:mvc="sap.ui.core.mvc" displayBlock="true" xmlns="sap.m"
    xmlns:core="sap.ui.core" xmlns:smartFilterBar="sap.ui.comp.smartfilterbar"
    xmlns:smartTable="sap.ui.comp.smarttable" xmlns:uxap="sap.uxap" xmlns:form="sap.ui.comp.smartform"
    xmlns:smart="sap.ui.comp.smartfield">

    <uxap:ObjectPageLayout>
        <uxap:headerTitle>
        </uxap:headerTitle>
        <uxap:sections>
            <uxap:ObjectPageSection
                titleUppercase="false" id="idGeneralInfo" title="General Info">
                <uxap:subSections>
                    <uxap:ObjectPageSubSection   title="General Info" titleUppercase="false">
                        <form:SmartForm
                            id="SF1" class="editableForm" editTogglable="false" editable="true">
                            <form:Group id="G1">
                                <form:GroupElement id="GE-Cocode">
                                    <smart:SmartField id="idCocode" value="{data>company_code}"/>
                                </form:GroupElement>
                            </form:Group>

                            <form:Group id="G2"> <form:GroupElement id="GE-Vendor">
                                    <smart:SmartField id="idVendor" value="{data>vendor}"/>
                                </form:GroupElement>
                            </form:Group>
                        </form:SmartForm>
                    </uxap:ObjectPageSubSection>
                </uxap:subSections>
            </uxap:ObjectPageSection>
        </uxap:sections>
    </uxap:ObjectPageLayout>
</mvc:View>

问题排查与修复方案

1. 控制器语法错误

_onRouteMatched方法末尾缺少逗号,导致JavaScript解析失败,_fetchData方法无法执行。修复后代码:

_onRouteMatched: function (oEvent) {
    var oArgs = oEvent.getParameter("arguments");
    var reqid = oArgs.Reqid;
    this._fetchData(reqid);
}, // 添加此逗号

2. OData Read返回数据结构处理错误

OData v2模型的read方法成功回调中的oData是包含results数组的对象,直接传入JSONModel会导致绑定路径错误。按reqid过滤应返回单条数据,需取出数组第一条:

success: function (oData) {
    var oRecord = oData.results.length > 0 ? oData.results[0] : {};
    var oModel = new sap.ui.model.json.JSONModel(oRecord);
    this.getView().setModel(oModel, "data");
}.bind(this),

3. 视图高度设置异常

视图的height="10%"会导致内容被压缩无法显示,建议改为height="100%"或移除该属性:

<mvc:View controllerName="myapp.controller.DisplayRequest" height="100%"
    ...>

4. SmartField绑定优化(可选)

SmartField依赖OData元数据自动渲染控件,绑定JSONModel会丢失该特性。建议直接使用主OData模型绑定,无需额外创建JSONModel:

  • 控制器修改:
_onRouteMatched: function (oEvent) {
    var oArgs = oEvent.getParameter("arguments");
    var sPath = this.getView().getModel().createKey("/myCDSView", { reqid: oArgs.Reqid });
    this.getView().bindElement({
        path: sPath,
        events: {
            dataFailed: function (oError) {
                // 错误处理逻辑
            }
        }
    });
}
  • 视图绑定修改:
<smart:SmartField id="idCocode" value="{company_code}"/>
<smart:SmartField id="idVendor" value="{vendor}"/>

内容的提问来源于stack exchange,提问作者Akshay vijayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 19:45:09