首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在详细信息页上绑定实体对象

如何在详细信息页上绑定实体对象
EN

Stack Overflow用户
提问于 2020-07-17 07:36:24
回答 1查看 1K关注 0票数 2

我正在开发一个使用SAP UI5的主细节Fiori应用程序。由于详细信息包含了40多个列,所以我为Master&Details创建了单独的OData服务。

在母版页中,数据是正确的。现在,我的任务是在任何表行上,当用户单击details时,将打开基于的下一页详细信息--主表的两个键值。

我在详细的页面中得到了两个变量键,如下所示,它运行得很好:

代码语言:javascript
复制
var spayid = jQuery.sap.getUriParameters().get("payid");
var spaydt = jQuery.sap.getUriParameters().get("paydt");

接下来,我创建了两个过滤器,如下所示,它们也很好地工作。

代码语言:javascript
复制
var filter1 = new Filter({
  path: "Laufi",
  operator: FilterOperator.EQ,
  value1: spayid
});
var filter2 = new Filter({
  path: "Laufd",
  operator: FilterOperator.EQ,
  value1: spaydt
});

现在,我正在调用OData服务,该服务也运行良好:

代码语言:javascript
复制
var oODataModel = new ODataModel("proxy/http/FIORI-DEV.abc.com:8000/sap/opu/odata/sap/ZASA_FI_pay_D_SRV?sap-client=100", {
  json: true,
  useBatch: false
});
this.getView().setModel(oODataModel);

我现在不知道如何过滤数据。上面应该包括哪些内容,以便根据我的筛选器filer1filter2过滤数据?我试过跟随,但它不起作用。

代码语言:javascript
复制
  filters : [ filter1, filter2 ],
  json: true,
  useBatch: false

我非常擅长ABAP,但不是SAPUI5的专家。我正处于学习阶段。

首先,我考虑在OData服务上传递参数,以便只获取所需的数据。这意味着我的OData调用应该是这样的:

代码语言:javascript
复制
new ODataModel("proxy/http/FIORI-DEV.abc.com:8000/sap/opu/odata/sap/ZASA_FI_PAYMENT_D_SRV/PdetailSet(Laufi= spayid, Laufd = spaydt)?sap-client=100");

但这似乎不可能。

第二个选项是,我将在OData服务中获取整个细节,然后在绑定到表期间应用过滤器。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 09:32:56

sap.ui.model.Filter类的目的通常是将过滤器应用于UI上的列表。例如,如果您有一个项目列表,并且希望将该列表限制为满足特定条件的项目子集。

但是,这里的内容似乎是一个典型的主细节场景,其中您有一个项目列表,然后当用户选择一个显示有关该的更多信息的项目。

这种场景的通常解决方案是将整个模型分配给细节视图,然后在视图上使用一个元素绑定 (也称为“上下文绑定”)来告诉它要显示哪个项。

当项目的来源是单击已经有元素绑定的元素时,那么您实际上可以从click事件中检索正确的绑定路径,并将其应用到您的细节视图中。

从一个官方的演示

代码语言:javascript
复制
onItemSelected: function(oEvent) {
    var oSelectedItem = oEvent.getSource();
    var oContext = oSelectedItem.getBindingContext("products");
    var sPath = oContext.getPath();
    var oProductDetailPanel = this.byId("productDetailsPanel");
    oProductDetailPanel.bindElement({ path: sPath, model: "products" });
}

当您没有任何方便的方法从元素路径中获取元素路径时,您必须自己构造一个元素路径:

代码语言:javascript
复制
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");

当然,后一个代码段假定oData-服务实际上支持使用由laufilaufd组成的密钥的访问。这是由以下方面决定的:

  • SAP网关服务生成器(transaction )中实体类型的关键字段的定义
  • 该oData-service的数据提供程序类的方法get_entity的ABAP实现。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62949276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档