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

146

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.


RAP - Draft Query

Kategorie - ABAP

In diesem Artikel schauen wir uns die Draft Query in RAP an und wie du damit die Einträge und ihre Sichtbarkeit steuern kannst. Dazu schauen wir uns die Praxis an einem Beispiel an.

03.04.2026

RAP - Importance

Kategorie - ABAP

Schauen wir einmal auf die Wichtigkeit von Informationen innerhalb einer SAP Fiori Anwendung und wie wir damit die Sichtbarkeit in der RAP Anwendung steuern können.

24.03.2026

RAP - Kritikalität

Kategorie - ABAP

Für was brauchst du eigentlich die Kritikalität in deiner Anwendung und was kannst du damit erreichen? Schauen wir uns verschiedene Formen und Szenarien an.

17.03.2026

RAP - Icons

Kategorie - ABAP

Wie findest du eigentliche Icons im UI5 Umfeld und wie kannst du diese mit ABAP Mitteln in deine Fiori Elements Anwendung einbauen? Lass uns diese Frage im Artikel beantworten.

13.03.2026

RAP - Gruppierung von Aktionen

Kategorie - ABAP

Wie kannst du eigentlich deine verschiedenen Aktion in RAP unter einem Button gruppieren, vor allem wenn die Aktionen relativ ähnlich sind. In diesem Artikel schauen wir uns die Details zur Umsetzung mit ABAP an.

10.03.2026