This is a test message to test the length of the message box.
Login
|
ABAP RAP Mixed Content
Erstellt von Software-Heroes

RAP - Mixed Content

115

Wie bekommen wir eigentlich unterschiedlichen Content in die gleiche Spalte im List Report? Schauen wir uns dazu einmal ein praktisches Beispiel für unsere Sales App an.

Werbung


In diesem Artikel gruppieren wir mehrere Felder in einer Spalte und blenden Elemente dymanisch aus, die wir nicht mehr sehen wollen.

 

Einleitung

In unserer Sales App haben wir auch einen Bereich für Abweichungen. Dabei wollen wir vermerken, um wie viel wir vom eigentlichen Wert des Verkaufs abweichen. Dabei steht uns ein fester Betrag zur Verfügung, aber auch ein Feld für eine prozentuale Abweichung. Eine der beiden Informationen wollen wir gern im List Report anzeigen, ohne dabei zu viel Platz mit 4 Spalten wegzunehmen. Dazu wollen wir die verschiedenen Spalten in Gruppen zusammenführen und anzeigen.

 

Annotation

Erweitern wir dazu im ersten Schritt unsere Metadata Extension ZBS_C_SASale, damit wir die Felder im List Report in eine Spalte bekommen. Dazu definieren wir pro Spalte ein neues "UI.lineItem", was dafür sorgt, dass das Feld als eigene Spalte dargestellt wird. Den Typ setzen wir nun auf "AS_FIELDGROUP", um eine Gruppe bilden zu können und definieren eine ID über "valueQualifier". Alle Felder die nun in der gleichen Spalte sein sollen, erhalten nun noch eine "UI.fieldGroup" mit dem passenden Qualifier. Es muss aber auch an dem gleichen Feld definiert werden, welches wir bereits mit dem LineItem markiert haben. Für die beiden Spalten erhalten wir nun die folgenden zusätzlichen Annotationen:

@UI.lineItem: [ { position: 55, type: #AS_FIELDGROUP, valueQualifier: 'DIFF_NUM', label: 'Difference' } ]
@UI.fieldGroup: [{ qualifier: 'DIFF_NUM' }]
DifferenceAmount;

@UI.lineItem: [ { position: 57, type: #AS_FIELDGROUP, valueQualifier: 'DIFF_UNIT', label: 'Difference (Unit)' } ]
@UI.fieldGroup: [{ qualifier: 'DIFF_UNIT' }]
DifferenceCurrency;

@UI.fieldGroup: [{ qualifier: 'DIFF_NUM' }]
DifferenceQuantity;

@UI.fieldGroup: [{ qualifier: 'DIFF_UNIT' }]
DifferenceUnit;

 

Laden wir unsere Liste und den Liste Report noch einmal, dann erhalten wir neue Spalten mit entsprechenden Überschriften und die Felder werden untereinander dargestellt.

 

Virtuelle Felder

Aktuell sieht das UI aber noch nicht sehr ansprechend aus, die Felder werden doppelt dargestellt und leere Informationen interessieren uns eigentlich nicht. Daher wollen wir am besten diese Informationen ausblenden, was wir leicht über virtuelle Felder erreichen können. Definieren wir dazu in unserer Entität ZBS_C_SASale die entsprechenden virtuellen Felder.

        @ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_RAP_SALES_VE'
virtual isAmountHidden   : abap_boolean,

        @ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_RAP_SALES_VE'
virtual isQuantityHidden : abap_boolean,

 

Dazu müssen wir noch die Ableitungslogik in der Klasse ZCL_BS_DEMO_RAP_SALES_VE implementieren. Wir nehmen dazu in der Methode GET_CALCUALTION_INFO die Felder "DifferenceAmount" und "DifferenceQuantity" auf, da diese die Grundlage zur Ableitung sind. Zum Abschluss erweitern wir den CASE in der Methode CALCULATE, um die beiden virtuellen Felder zu befüllen.

WHEN 'ISAMOUNTHIDDEN'.
  original->isAmountHidden = xsdbool( original->DifferenceAmount IS INITIAL ).
WHEN 'ISQUANTITYHIDDEN'.
  original->isQuantityHidden = xsdbool( original->DifferenceQuantity IS INITIAL ).

 

Ist das entsprechende Feld leer, dann wollen wir diese Information im UI ausblenden. Damit das Ausblenden dann auch vom UI übernommen wird, müssen wir im letzten Schritt die Metadata Extension anpassen und die Annotation "hidden" an den Elementen ergänzen. Die neuen Annotationen sollten wie folgt aussehen.

@UI.lineItem: [ { position: 55, type: #AS_FIELDGROUP, valueQualifier: 'DIFF_NUM', label: 'Difference' } ]
@UI.fieldGroup: [{ qualifier: 'DIFF_NUM', hidden: #(isAmountHidden) }]
DifferenceAmount;

@UI.lineItem: [ { position: 57, type: #AS_FIELDGROUP, valueQualifier: 'DIFF_UNIT', label: 'Difference (Unit)' } ]
@UI.fieldGroup: [{ qualifier: 'DIFF_UNIT', hidden: #(isAmountHidden) }]
DifferenceCurrency;

@UI.fieldGroup: [{ qualifier: 'DIFF_NUM', hidden: #(isQuantityHidden) }]
DifferenceQuantity;

@UI.fieldGroup: [{ qualifier: 'DIFF_UNIT', hidden: #(isQuantityHidden) }]
DifferenceUnit;

 

Test

Für den Test des UI haben wir den Datengenerator ZCL_BS_DEMO_RAP_SALES_DATA noch einmal angepasst, sodass auch die Feldinformationen befüllt werden uns wir Daten für den Test haben. Laden wir das UI neu, dann werden nun die Informationen sauber angezeigt.

 

Die Zeilen im unteren Bereich sind leer, da dort keine der beiden Informationen gefüllt sind, entsprechend werden sie über die virtuellen Elemente auch ausgeblendet. Zwischen den Beispieldaten wirst du einmal auch beide Informationen finden, hier macht es durchaus Sinn über eine Validierung zu prüfen, dass nur eine der beiden Informationen befüllt wird. Damit ist die Funktion umgesetzt und wir können uns zum Abschluss noch einmal die Spalte genauer anschauen. Wenn wir auf den Header klicken, finden wir die gruppierten Felder noch einmal in der Übersicht und können hier weitere Einstellungen, wie die Sortierung, definieren.

 

Vollständiges Beispiel

Das vollständige Beispiel findest du in GitHub im entsprechenden Paket für die Sales App. Die Änderungen aus diesem Artikel findest du in diesem Commit und kannst damit die Änderungen, plus die Zusatzinformationen, nachvollziehen.

 

Fazit

Mit Feldgruppen kannst du mehr machen als nur Elemente auf der Object Page zu gruppieren. Du kannst sie ebenso nutzen, um den Inhalt im List Report in den verschiedenen Spalten zu gruppieren. Vor allem wenn nicht mehr so viel Platz zur Verfügung steht, kannst du damit sinnvolle Erweiterungen zur Verfügung stellen.


Enthaltene Themen:
RAPBTPMixed ContentFieldgroupREX7
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden Dienstag und Freitag neuen Content im Bereich ABAP und unregelmäßig in allen anderen Bereichen. Schaue bei unseren Tools und Apps vorbei, diese stellen wir kostenlos zur Verfügung.


ADT - RAP Analyzer [MIA]

Kategorie - ABAP

Die Einarbeitung und Übersicht in bestehende RAP Objekte kann nicht immer einfach sein, vor allem wenn es sich um komplexe Objekte handelt. Fragen wie das verwendete Pattern und wichtige Objekte müssen sich meist erarbeitet werden.

24.02.2026

RAP - Position der Buttons

Kategorie - ABAP

In diesem Artikel schauen wir uns die verschiedenen Positionen der Buttons an. Wo können wir in RAP die verschiedenen Actions platzieren und wie nutzen wir diese.

17.02.2026

RAP - Analytical Table

Kategorie - ABAP

Schauen wir uns einmal in RAP das letzten fehlende Puzzlestück zur Ablösung des ALVs an und wie wir die Analytical Table mit wenig Aufwand einrichten können.

13.02.2026

RAP - Augmentation

Kategorie - ABAP

In diesem Artikel stellen wir unser Datenmodell der RAP Anwendung um und ändern die Form wie wir mit den Texten umgehen. Dabei verwenden wir Augmentation, um unser Datenmodell trotzdem vollständig zu halten.

03.02.2026

034: Recycling-Heroes - Object and RAP Generator (Document)

Kategorie - YouTube

In dieser Episode erstellen wir unsere neue Dokumenten-App mit Hilfe von Generatoren zur Erstellung des Datenmodells und anschließend zur Erstellung des RAP Objekts.

02.02.2026