亲爱的SAPUI5开发人员,
我使用SAPUI5 Fiori Worklist
模板项目开发了WebIDE
项目。
在Component.js
文件中已获取OData模型。
var sServiceUrl = this.getMetadata().getManifestEntry("sap.app").dataSources.mainService.uri;
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, {
json: true,
loadMetadataAsync: true
});
oModel.attachMetadataFailed(function() {
// Call some functions from APP controller to show suitable message
}, this);
this.setModel(oModel, "BrandSet");
这段代码导致调用OData服务器从远程服务器获取数据。
现在我想在后端订购数据然后接收数据。假设已经在后端正确实现了排序功能。
因此,如果我使用$orderby=name
或$orderby=price
,则必须分别按名称或价格进行排序。
在某些文章中,他们说要在XML视图文件中使用sorter
选项。像这儿:
https://sapui5.hana.ondemand.com/#docs/guide/c4b2a32bb72f483faa173e890e48d812.html
现在我的问题是:
如何在启动模型的Component.js
文件中应用此排序?
第二个问题是当我们将过滤器应用于模型时如何应用此排序?就像在以下链接中应用过滤器的示例: https://sapui5.hana.ondemand.com/#docs/guide/5295470d7eee46c1898ee46c1b9ad763.html
实际上我正在寻找将$orderby=xxx
添加到OData服务调用的函数或任何方法。
我在这里找到了一个方法:https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.odata.ODataModel.html#constructor
如果我使用mParameters.serviceUrlParams
,那么我可以在服务请求中添加一些网址参数,但是已经说过"这些参数将附加到所有请求&# 34; 。这是否意味着如果我使用此方法添加$orderby
然后我无法在该数据模型的进一步请求中删除它,例如用于过滤?
答案 0 :(得分:2)
应用程序的结构通常与您的建议略有不同。一般的假设是后端有很多数据可用,并且一次加载所有这些数据会导致性能问题,特别是在通过移动电话网络使用时。此外,数据是一个oData实体集,即一个相同类型的许多项的列表,因此数据将在UI中显示一个列表或表。
通常,应用程序会在某种列表中显示数据,例如sap.m.List或sap.m.Table。这些控件旨在处理大量数据,并最初加载实体集中的前20个项目。只有当用户向下滚动数据列表时,才会加载其他项目。此外,通过这些控件,用户可以决定根据数据中的某些字段对数据进行排序或过滤。
假设您的应用是这样的,这是标准方法。
主模型(在清单中定义)不会在Component.js中加载,而是通过应用程序的xml视图中定义的绑定加载。在视图中,您可以在绑定中定义固定的排序和/或过滤器,或者您可以允许用户设置排序和过滤条件。这将在各个控制器中以编程方式处理。通常,用户对排序和过滤器所做的更改将单独应用。例如,他/她选择新的排序顺序,重新读取oData并在UI中显示新的排序顺序。然后,用户可以选择过滤标准,并且也适用。当然,在控制器中的编程逻辑中,您需要应用任何默认排序和过滤条件,然后将这些标准与用户选择的标准组合或替换。
要查看此示例,我建议您在WebIDE中查看模板应用程序“SAP Fiori Master-Detail Application”。