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
相关产品推荐
相关产品推荐

