如何在详情页绑定实体对象
How to bind an entity object on a Detail page
我正在使用 SAP UI5 开发主细节 Fiori 应用程序。由于详细信息包含超过 40 列,因此我为 master 和 detail 分别制作了 OData 服务。
在主页中,数据正确。现在我的任务是,在任何 table 行上,当用户单击详细信息时,将打开下一页,其中包含基于 主 table 的两个键值的详细信息。
我在详细页面的变量中得到两个键,如下所示,并且工作正常:
var spayid = jQuery.sap.getUriParameters().get("payid");
var spaydt = jQuery.sap.getUriParameters().get("paydt");
接下来,我创建了两个过滤器,如下所示,它们也可以正常工作。
var filter1 = new Filter({
path: "Laufi",
operator: FilterOperator.EQ,
value1: spayid
});
var filter2 = new Filter({
path: "Laufd",
operator: FilterOperator.EQ,
value1: spaydt
});
现在我正在调用 OData 服务,它也工作正常:
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);
我现在不知道如何过滤数据。上面应该包含什么,以便它根据我的过滤器 filer1
和 filter2
过滤数据?我已尝试关注,但它不起作用。
filters : [ filter1, filter2 ],
json: true,
useBatch: false
我对ABAP很在行,但对SAPUI5不是专家。我在学习阶段。
首先,我想在 OData 服务上传递参数,以便只获取所需的数据。意味着我的 OData 调用应该是这样的:
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 服务中获取全部详细信息,然后在绑定到 table 期间我将应用过滤器。
sap.ui.model.Filter
class 的目的通常是将过滤器应用于 UI 上的列表。例如,如果您有一个项目列表,并且您希望将该列表限制为满足特定条件的项目子集。
但是你在这里看到的似乎是一个 classic 主从场景,你有一个项目列表,然后当用户选择一个项目时显示关于那个 一个的更多信息项。
这种情况的通常解决方案是将完整模型分配给详细视图,然后在视图上使用 element binding(也称为“上下文绑定”)来告诉它要哪个项目显示。
当项目的来源是对已经具有元素绑定的元素的点击时,您实际上可以从点击事件中检索正确的绑定路径,并将其应用于您的详细信息视图。
From one of the official demos:
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" });
}
当你没有任何方便的方法从中获取元素路径时,你必须自己构造一个:
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");
后一个代码片段当然假定 oData 服务实际上支持使用由 laufi
和 laufd
组成的密钥进行访问。这是由:
决定的
- SAP Gateway Service Builder(事务SEGW)中实体类型关键字段的定义
- 该 oData 服务的数据提供者 class 方法
get_entity
的 ABAP 实现。
我正在使用 SAP UI5 开发主细节 Fiori 应用程序。由于详细信息包含超过 40 列,因此我为 master 和 detail 分别制作了 OData 服务。
在主页中,数据正确。现在我的任务是,在任何 table 行上,当用户单击详细信息时,将打开下一页,其中包含基于 主 table 的两个键值的详细信息。
我在详细页面的变量中得到两个键,如下所示,并且工作正常:
var spayid = jQuery.sap.getUriParameters().get("payid");
var spaydt = jQuery.sap.getUriParameters().get("paydt");
接下来,我创建了两个过滤器,如下所示,它们也可以正常工作。
var filter1 = new Filter({
path: "Laufi",
operator: FilterOperator.EQ,
value1: spayid
});
var filter2 = new Filter({
path: "Laufd",
operator: FilterOperator.EQ,
value1: spaydt
});
现在我正在调用 OData 服务,它也工作正常:
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);
我现在不知道如何过滤数据。上面应该包含什么,以便它根据我的过滤器 filer1
和 filter2
过滤数据?我已尝试关注,但它不起作用。
filters : [ filter1, filter2 ],
json: true,
useBatch: false
我对ABAP很在行,但对SAPUI5不是专家。我在学习阶段。
首先,我想在 OData 服务上传递参数,以便只获取所需的数据。意味着我的 OData 调用应该是这样的:
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 服务中获取全部详细信息,然后在绑定到 table 期间我将应用过滤器。
sap.ui.model.Filter
class 的目的通常是将过滤器应用于 UI 上的列表。例如,如果您有一个项目列表,并且您希望将该列表限制为满足特定条件的项目子集。
但是你在这里看到的似乎是一个 classic 主从场景,你有一个项目列表,然后当用户选择一个项目时显示关于那个 一个的更多信息项。
这种情况的通常解决方案是将完整模型分配给详细视图,然后在视图上使用 element binding(也称为“上下文绑定”)来告诉它要哪个项目显示。
当项目的来源是对已经具有元素绑定的元素的点击时,您实际上可以从点击事件中检索正确的绑定路径,并将其应用于您的详细信息视图。
From one of the official demos:
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" });
}
当你没有任何方便的方法从中获取元素路径时,你必须自己构造一个:
var detailPanel = this.getView().byId("idOfDetailPanel");
detailPanel.bindElement("PdetailSet(Laufi = " + spayid +", Laufd = " + spaydt + ")");
后一个代码片段当然假定 oData 服务实际上支持使用由 laufi
和 laufd
组成的密钥进行访问。这是由:
- SAP Gateway Service Builder(事务SEGW)中实体类型关键字段的定义
- 该 oData 服务的数据提供者 class 方法
get_entity
的 ABAP 实现。