ODataModel 在读取中传递“expand”参数

问题描述 投票:0回答:2

我想将扩展参数传递给

read
,因为如果我像这样调用服务,它就不起作用:

oModel1.read("/LinesSet?$expand=ToCells", {
odata sapui5
2个回答
16
投票

read
API 等待选项映射 作为第二个参数,我们可以在其中使用属性
urlParameters
:

定义任何查询
oModel1.read("/LinesSet", {
  urlParameters: {
    "$expand": "ToCells",
    "$select": "LineID,ToCells/CellID,...", // reduce data load
  },
  filters: [ // Filter required from sap/ui/model/Filter
    new Filter({/*...*/}), // reduce data load
  ],
  success: this.onSuccess.bind(this),
  // ...
});

⚠️ 请注意,加载大量数据会对内存消耗和用户体验产生负面影响。这甚至可能最终导致应用程序完全崩溃。请参阅文档中的加载大量数据部分。

每当您在应用程序代码中使用 [...]

sap.ui.model.odata.v2.ODataModel#read
[...] 等方法时,您的应用程序不得加载大量数据。

⚠️

read
从应用程序的角度来看是一个低级 API。还有其他 API 和方法可以帮助减少金额控制器代码。


替代(更好)的解决方案

我想强调的是,

v2.ODataModel#read
通常是不是必需的。您可以通过将
<NavigationProperty>
的相应名称分配给 XML 中的控件来简单地使用 OData Context/ListBinding:

<Table binding="{ToThatRelatedSingleEntity}" items="{ToThatRelatedCollection}" growing="true">

注意: 您可能需要将

templateShareable
添加到聚合绑定中,如主题中所述:绑定模板的生命周期

绑定(而不是应用程序)将自动为您准备请求。无需使用中间

JSONModel
。与
v4.ODataModel
相同,甚至没有
read
方法。
这也使得迁移到 OData V4 变得更加容易。


0
投票

感谢@boghyon-hoffmann! 替代解决方案看起来很棒! 它改变了思维方式。 我想知道我想添加到成功/错误可能性中的逻辑是什么?

© www.soinside.com 2019 - 2024. All rights reserved.