【发布时间】:2017-07-24 01:36:59
【问题描述】:
我正在使用 UI5 呈现表格并使用 ViewSettingsDialog 控件进行排序/分组/过滤。 在我的 OData 服务中,我有一个“项目”实体集,每个实体都有一个关联的客户(一个客户可以有多个项目)。 另一方面,我有一个“客户”实体集。它显示了 1000 多个条目客户,但并非所有客户都有正在进行的项目,因此我无法将其用于 ViewSettingsFilterItem 中的项目聚合。
为了允许按客户进行 ViewSettingsDialog 过滤器,我正在为 ViewSettingsFilterItem 中的项目聚合传递“项目”实体集。但是那些有不止一个项目正在进行的客户出现不止一次。
如何将绑定限制为只显示一次,让客户拥有多个项目?
使用 Northwind 检查这个 sn-p: https://jsbin.com/sakurisoxo/edit?html,output
如果你去过滤器,你可以看到它们是如何重复的
提前谢谢你
[代码]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SAPUI5</title>
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
id="sap-ui-bootstrap"
data-sap-ui-theme="sap_belize"
data-sap-ui-libs="sap.m"
data-sap-ui-bindingSyntax="complex"
data-sap-ui-compatVersion="edge"
data-sap-ui-preload="async"></script>
<!-- use "sync" or change the code below if you have issues -->
<!-- XMLView -->
<script id="myXmlView" type="ui5/xmlview">
<mvc:View
controllerName="MyController"
xmlns="sap.m"
xmlns:core="sap.ui.core"
xmlns:mvc="sap.ui.core.mvc">
<Table
id="myTable"
growing="true"
growingThreshold="25"
growingScrollToLoad="true"
busyIndicatorDelay="0"
items="{/Orders}">
<headerToolbar>
<Toolbar>
<Title text="Orders of ALFKI"/>
<ToolbarSpacer/>
<Button text="Click here for filters" press="onDialogOpen"/>
</Toolbar>
</headerToolbar>
<columns>
<Column>
<Text text="OrderID"/>
</Column>
<Column>
<Text text="CustomerID"/>
</Column>
</columns>
<items>
<ColumnListItem>
<cells>
<Text text="{OrderID}"/>
<Text text="{CustomerID}"/>
</cells>
</ColumnListItem>
</items>
</Table>
</mvc:View>
</script>
<!-- XML Fragment -->
<script id="myXMLFragment" type="ui5/fragment">
<core:FragmentDefinition
xmlns="sap.m"
xmlns:core="sap.ui.core">
<ViewSettingsDialog
confirm="onTableSettingsConfirm">
<sortItems>
<ViewSettingsItem text="OrderID" key="OrderID" selected="true" />
</sortItems>
<filterItems>
<ViewSettingsFilterItem
text="CustomerID"
key="CustomerID"
multiSelect="true"
items="{path: '/Orders', sorter: [{path: 'CustomerID', descending: false}]}">
<items>
<ViewSettingsItem text="{CustomerID}" key="{CustomerID}" />
</items>
</ViewSettingsFilterItem>
</filterItems>
</ViewSettingsDialog>
</core:FragmentDefinition>
</script>
<script>
sap.ui.getCore().attachInit(function () {
"use strict";
//### Controller ###
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/odata/v2/ODataModel"
], function (Controller, ODataModel) {
"use strict";
return Controller.extend("MyController", {
_oTableSettingsDialog: null,
onInit : function () {
this.getView().setModel(
new ODataModel("https://cors-anywhere.herokuapp.com/services.odata.org/V2/Northwind/Northwind.svc/")
);
},
onDialogOpen: function(){
if (!this._oTableSettingsDialog) {
this._oTableSettingsDialog = sap.ui.xmlfragment({
fragmentContent : jQuery("#myXMLFragment").html()
});
this._oTableSettingsDialog.setModel(this.getView().getModel());
}
this._oTableSettingsDialog.open();
}
});
});
//### THE APP: place the XMLView somewhere into DOM ###
sap.ui.xmlview({
viewContent : jQuery("#myXmlView").html()
}).placeAt("content");
});
</script>
</head>
<body class="sapUiBody">
<div id="content"></div>
</body>
</html>
【问题讨论】:
-
我想知道为什么不能按项目名称对客户 ID 进行分组?这样,您可以为每个项目设置单独的部分,并且每个项目都会在其中显示客户 ID。甚至可以按客户 ID 本身进行分组。让我知道这是否有帮助。 sapui5.hana.ondemand.com/#docs/guide/…
-
嗨 Rahul,我也在我的应用程序中实现了 gouping(不是在 sn-p 中),但无论如何我需要实现过滤器功能。我应该呈现一个包含许多条目(7 列)的原始响应表,并为 Sorting&Grouping&Filtering 列值提供可能性这就是为什么我使用 ViewSettingsDialog 控件sapui5.hana.ondemand.com/explored.html#/sample/… Grouping 和 Sorting 工作顺利,但我过滤器有描述的问题。
-
嗨 Rafael,我只想提一下,您可能需要考虑使用 sap.ui.table.Table 而不是 sap.m.Table。后一个控件并不意味着处理大量数据,并且会在 7 列(尤其是在 IE 上)存在显着的性能问题。我不得不通过痛苦的经验来学习它。
标签: javascript data-binding filter sapui5