Ich verwende UI5, um eine Tabelle zu rendern und mit dem ViewSettingsDialog-Steuerelement zu sortieren/gruppieren/zu filtern. In meinem OData-Service habe ich eine Entitäten "Projekte" festgelegt, und jeder hat einen Kunden zugeordnet (ein Kunde kann mehrere Projekte haben). Auf der anderen Seite habe ich eine Entität "Kunden" festgelegt. Es zeigt mehr als 1000 Einträge Kunden, aber nicht alle haben ein Projekt, so dass ich es nicht für die Aggregation von Elementen in ViewSettingsFilterItem verwenden kann.SAPUI5 Entfernen von Duplikaten in Aggregationsbindung
Um den ViewSettingsDialog-Filter nach Kunden zuzulassen, übergebe ich die "projects" -Entität, die für die Elemente-Aggregation in ViewSettingsFilterItem festgelegt wurde. Aber diejenigen Kunden, die mehr als ein Projekt haben, erscheinen mehr als einmal.
Wie kann ich die Bindung beschränken, um nur einmal die Kunden mit mehr als einem Projekt zu zeigen?
prüfen diese Schnipsel mit Northwind: https://jsbin.com/sakurisoxo/edit?html,output
Wenn Sie den Filter gehen, können Sie sehen, wie sie wiederholt
Danke im Voraus
[Code]
<!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>
Ich frage mich, warum können Sie die Kunden-IDs nicht nach Projektnamen gruppieren? Auf diese Weise können Sie separate Abschnitte für jedes Projekt erstellen und jedes Projekt zeigt Kunden-IDs an. Oder gruppieren Sie sich selbst nach Kunden-IDs. Lassen Sie mich wissen, ob das hilft. https://sapui5.hana.ondemand.com/#docs/guide/c4b2a32bb72f483faa173e890e48d812.html –
Hallo Rahul, ich implementiere auch Gouping in meiner App (nicht im Snippet), aber trotzdem muss ich die Filterfunktionalität implementieren. Ich sollte eine rohe reaktionsfähige Tabelle mit vielen Einträgen (7 Spalten) rendern und bieten die Möglichkeit für ** Sortieren & Gruppierung & Filterung ** die Spaltenwerte Deshalb verwende ich ViewSettingsDialog Steuerelement https://sapui5.hana.ondemand.com /explored.html#/sample/sap.m.sample.TableViewSettingsDialog/preview Gruppierung und Sortierung funktioniert reibungslos, aber ich habe das beschriebene Problem für die Filter. –
Hallo Rafael, ich wollte nur erwähnen, dass Sie vielleicht [sap.ui.table.Table] (https://openui5.hana.ondemand.com/explored.html#/entity/sap.ui.table) in Erwägung ziehen könnten .Tabelle/Beispiele) anstelle von SAP.M.Table. Die letztgenannte Kontrolle ist nicht dazu gedacht, mit einer großen Menge von Daten fertig zu werden, und wird ein signifikantes Leistungsproblem mit 7 Spalten haben (besonders im IE). Ich musste es schmerzlich durch Erfahrung lernen. – boghyon