Odata 如何在详细信息页上绑定实体对象
我正在使用SAP UI5开发一个master detail Fiori应用程序。由于details包含40多列,我为master和details创建了单独的OData服务 在母版页中,数据正确输入。现在我的任务是,在任何表行上,当用户单击Detail时,下一页将打开基于主表的两个键值的details 我在详细信息页面的变量中得到两个键,如下所示,它工作正常:Odata 如何在详细信息页上绑定实体对象,odata,sapui5,Odata,Sapui5,我正在使用SAP UI5开发一个master detail Fiori应用程序。由于details包含40多列,我为master和details创建了单独的OData服务 在母版页中,数据正确输入。现在我的任务是,在任何表行上,当用户单击Detail时,下一页将打开基于主表的两个键值的details 我在详细信息页面的变量中得到两个键,如下所示,它工作正常: var spayid=jQuery.sap.getUriParameters().get(“payid”); var spaydt=jQu
var spayid=jQuery.sap.getUriParameters().get(“payid”);
var spaydt=jQuery.sap.getUriParameters().get(“paydt”);
接下来,我创建了两个过滤器,如下所示,它们也可以正常工作
var过滤器1=新过滤器({
路径:“劳菲”,
操作员:FilterOperator.EQ,
价值1:spayid
});
var filter2=新过滤器({
路径:“Laufd”,
操作员:FilterOperator.EQ,
值1:spaydt
});
现在我打电话给OData服务,该服务也运行良好:
var oODataModel=new ODataModel(“proxy/http/FIORI-DEV.abc.com:8000/sap/opu/odata/sap/ZASA\u FI\u pay\u D\u SRV?sap client=100”{
是的,
useBatch:false
});
this.getView().setModel(oODataModel);
我现在不知道如何过滤数据。上面应该包括哪些内容,以便它根据我的过滤器filer1
和filter2
过滤数据?我试过跟随,但不起作用
filters:[filter1,filter2],
是的,
useBatch:false
我非常擅长ABAP,但不是SAPUI5方面的专家。我正处于学习阶段
首先,我想在OData服务上传递参数,以便只获取所需的数据。意味着我的OData通话应该是这样的:
新ODataModel(“proxy/http/FIORI-DEV.abc.com:8000/sap/opu/odata/sap/ZASA\u FI\u PAYMENT\u D\u SRV/PdetailSet(Laufi=spayd,Laufd=spaydt)?sap client=100”);
但这似乎不可能
第二种选择是,我将在OData服务中获取全部细节,然后在绑定到表的过程中应用过滤器。sap.ui.model.filter类的目的通常是将过滤器应用于ui上的列表。例如,如果您有一个项目列表,并且希望将该列表限制为满足某些条件的项目子集 但是,您在这里看到的似乎是一个经典的主细节场景,其中您有一个项目列表,然后当用户选择一个时,将显示有关该项目的更多信息 对于这种情况,通常的解决方案是将完整模型分配给详细视图,然后在视图上使用(也称为“上下文绑定”)命令来告诉它要显示哪个项目 当该项的源是对已具有元素绑定的元素的单击时,实际上可以从单击事件中检索正确的绑定路径,并将其应用于详细信息视图 : 如果没有任何方便的方法从中获取元素路径,则必须自己构造一个:
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");
后一个代码段当然假设oData服务实际上支持使用由laufi
和laufd
组成的密钥进行访问。这是由以下方面决定的:
- SAP网关服务生成器(事务SEGW)中实体类型关键字段的定义
- 该oData服务的数据提供程序类的方法
的ABAP实现get_entity
$filter
查询。
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");