我正在开发一个使用SAP UI5的主细节Fiori应用程序。由于详细信息包含了40多个列,所以我为Master&Details创建了单独的OData服务。
在母版页中,数据是正确的。现在,我的任务是在任何表行上,当用户单击details时,将打开基于的下一页详细信息--主表的两个键值。
我在详细的页面中得到了两个变量键,如下所示,它运行得很好:
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服务中获取整个细节,然后在绑定到表期间应用过滤器。
发布于 2020-07-17 09:32:56
sap.ui.model.Filter类的目的通常是将过滤器应用于UI上的列表。例如,如果您有一个项目列表,并且希望将该列表限制为满足特定条件的项目子集。
但是,这里的内容似乎是一个典型的主细节场景,其中您有一个项目列表,然后当用户选择一个显示有关该的更多信息的项目。
这种场景的通常解决方案是将整个模型分配给细节视图,然后在视图上使用一个元素绑定 (也称为“上下文绑定”)来告诉它要显示哪个项。
当项目的来源是单击已经有元素绑定的元素时,那么您实际上可以从click事件中检索正确的绑定路径,并将其应用到您的细节视图中。
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组成的密钥的访问。这是由以下方面决定的:
get_entity的ABAP实现。https://stackoverflow.com/questions/62949276
复制相似问题