Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Odata 如何在详细信息页上绑定实体对象_Odata_Sapui5 - Fatal编程技术网

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

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

我正在使用SAP UI5开发一个master detail Fiori应用程序。由于details包含40多列,我为master和details创建了单独的OData服务

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

我在详细信息页面的变量中得到两个键,如下所示,它工作正常:

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服务的数据提供程序类的方法
    get_entity
    的ABAP实现

非常感谢您的详细回答和澄清。请参阅。我还添加了一个示例演示。您不需要为此使用或实现
$filter
查询。
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");