
RAP - Mehrere Filter und Einstellungen
Wie sieht es eigentlich aus, wenn wir in RAP mehrere Filter und Felder als Standard setzen wollen und dazu noch eine standardmäßige Sortierung benötigen?
Inhaltsverzeichnis
In diesem Artikel schauen wir uns an, wie wir mit Varianten mehrere Felder mit verschiedenen Filtern vorbelegen können und unsere Ausgabe sortieren und gruppieren können.
Einleitung
Im letzten Artikel hatten wir uns angeschaut, wie wir einen Standardwert auf einem Feld belegen, um so einen Filter vorzubefüllen. In diesem Artikel schauen wir, wie wir das für mehrere Felder und mit mehreren Abgrenzungen machen können. Dazu verwenden wir Selektions- und Präsentationsvarianten, um den ListReport zu beeinflussen. Dazu erweitern wir unser Report Pattern um die neuen Varianten.
Vorbereitung
Bevor wir in die Beispiele einsteigen, müssen wir noch den View für uns vorbereiten. Dazu benötigen wir für die folgenden Beispiele noch ein Feld als Selektion. Dazu ergänzen wir die Metadata Extension "ZBS_C_DRPCurrency".
@UI.selectionField: [{ position: 20 }]
Decimals;
Nach unserer Anpassung sieht die App erst einmal wie folgt aus, wir haben zwei zusätzliche Filter im oberen Teil der Anwendung. An der Liste hat sich erst einmal nichts geändert.
Präsentation
In diesem Kapitel schauen wir uns die Präsentationsvarianten und ihre Wirkung an.
Grundlage
Bei der Präsentationsvariante geht es um die Gruppierung und Sortierung der Ausgabe. Dabei können wir die verschiedenen Felder beim Laden der Liste beeinflussen. Dazu definieren wir einen "qualifier" für die Variante, über den wir die Variante identifizieren können. Als Basis definieren wir im Header nun die folgenden Annotationen.
@UI.presentationVariant: [ {
qualifier: 'pVariant',
visualizations: [{ type: #AS_LINEITEM }]
} ]
@UI.selectionPresentationVariant: [ {
presentationVariantQualifier: 'pVariant'
} ]
Dabei definieren wir eine Variante mit dem Namen "pVariant" und einer Visualisierung auf Zeilenebene. Da wir mehrere Varianten anlegen könnten, ordnen wir zum Abschluss die aktive Variante zu.
Sortierung
Nach der Grunddefinition gibt es erst einmal keine Änderungen in der Liste. Wollen wir nun eine neue Sortierung einführen, dann definieren wir Felder und Reihenfolge über die Variante.
sortOrder: [{ by: 'Currency', direction: #DESC }],
In diesem Fall erzeugen wir eine Sortierung absteigend über das Feld "Currency". Laden wir nun unsere App Preview, dann erhalten wir die folgende Änderung. Ebenfalls ist die Sortierung an dem Icon an der Spalte zu erkennen.
Gruppierung
Wollen wir nun zum Beispiel Gruppen erstellen, dann verwenden wir in der Variante den Zusatz "groupBy" und können dort eine Liste von Spalten hinterlegen. In Unserem Beispiel erzeugen wir eine Gruppe über den letzten Änderer.
groupBy: [ 'EditorName' ],
Laden wir nun die App erneut, dieses Mal ohne die Sortierung, dann erhalten wir eine gruppierte Ansicht.
Selektion
Die Selektionsvariante beeinflusst die Selektion unserer Liste. Damit können wir zum Beispiel einen komplexen Filter beim Laden setzen.
Grundlage
Die Grundlage ist ähnlich wie bei der Präsentationsvariante. Bei der Selektionsvariante erzeugen wir ebenfalls eine neue Variante mit eigener ID. Diese ID ordnen wir dann als aktive Variante zu.
@UI.selectionVariant: [{
qualifier: 'sVariant',
filter: ''
}]
@UI.selectionPresentationVariant: [ {
selectionVariantQualifier: 'sVariant'
} ]
Mehrere Werte
Wollen wir nun mehrere Werte abgrenzen, können wir das zum Beispiel über den freien Filter machen. Dazu definieren wir uns einen Filter über vier Währungen. Hierbei müssen wir die alte Version des Vergleichsoperators verwenden (EQ).
filter: 'Currency EQ AED OR Currency EQ AFN OR Currency EQ EUR OR Currency EQ USD'
Schauen wir uns dann die Filterbar in der Anwendung an, dann wurden die 4 Währungen als Standardfilter übernommen.
Mehrere Felder
Wollen wir mehrere Felder mit Defaultwerten befüllen, dann können wir einfach einen entsprechend komplexen Filter vorbelegen. In diesem Fall setzen wir unsere Logik in Klammern und ergänzen um einen Filter auf den Dezimalstellen.
filter: '( Currency EQ AED OR Currency EQ AFN OR Currency EQ EUR OR Currency EQ USD ) AND Decimals EQ 2'
In der Anwendung sollten nun beide Filter vorbelegt sein und die Datenmenge entsprechend klein werden.
Vollständiges Beispiel
Die Änderungen findest du bei uns im GitHub Repository und noch einmal im speziellen in diesem Commit. Insgesamt haben wir die Metadata Extension um diese beiden Defaultvarianten ergänzt.
@UI.presentationVariant: [ {
qualifier: 'pVariant',
sortOrder: [{ by: 'Currency', direction: #DESC }],
groupBy: [ 'EditorName' ],
visualizations: [{ type: #AS_LINEITEM }]
} ]
@UI.selectionVariant: [{
qualifier: 'sVariant',
filter: '( Currency EQ AED OR Currency EQ AFN OR Currency EQ EUR OR Currency EQ USD ) AND Decimals EQ 2'
}]
@UI.selectionPresentationVariant: [ {
presentationVariantQualifier: 'pVariant',
selectionVariantQualifier: 'sVariant'
} ]
Sind alle beiden Varianten in der vollen Ausprägung aktiv, ändert sich nun unsere Liste zur folgenden Ausgabe. Es werden nur noch die 4 Einträge ermittelt, die Sortierung ist absteigend und es wird die Gruppierung auf den Änderer angezeigt.
Fazit
Über die Varianten können standardmäßig mehrere Filter gesetzt werden, es kann die Sortierung oder eine Gruppierung geändert werden. Grundsätzlich kann der Anwender über die App-Varianten das gleiche machen und sich auch neue Sichten speichern. Hier verhält sich die Liste die die ALV-Varianten.