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

RAP - Virtual Elements

1149

Im Umfeld der Projektionen gibt es virtuelle Elemente, wir zeigen dir wie du sie nutzen und implementieren kannst, um dein RAP Objekt zu erweitern.

Werbung


Bereits in einem älteren Artikel sind wir auf virtuelle Elemente in CDS Views eingegangen. Heute stellen wir eine weitere Variante vor, die vor allem in Projektionen von RAP Objekten verwendet wird.

 

Definition

Die Elemente erhalten im CDS View ein eigenes Schlüsselwort und erhalten wieder die Annotation, um die implementierende Klasse anzugeben. Diese virtuellen Elemente können nur in der Projektionsschicht verwendet werden und führen bei einem View oder Standard Entität zu einem Fehler.

@ObjectModel.virtualElementCalculatedBy: 'ABAP:ZCL_BS_DEMO_CRAP_VE_EXIT' 
virtual NumberOfPositions : abap.int4,

 

Klasse

Die Klasse wird wieder entsprechend mit dem Interface IF_SADL_EXIT_CALC_ELEMENT_READ implementiert. Dabei reicht es die Methode CALCULATE mit Inhalt zu befüllen. Die Beispiel-Implementierung der Methode könnte wie folgt aussehen:

LOOP AT it_requested_calc_elements INTO DATA(ld_virtual_field).
  LOOP AT ct_calculated_data ASSIGNING FIELD-SYMBOL(<ls_calculated_data>).
    DATA(ld_tabix) = sy-tabix.
    ASSIGN COMPONENT ld_virtual_field OF STRUCTURE <ls_calculated_data> TO FIELD-SYMBOL(<ld_field>).

    DATA(ls_original) = CORRESPONDING ZBS_C_RAPCInvoice( it_original_data[ ld_tabix ] ).

    IF ls_original-Partner = '1000000002'.
      <ld_field> = 999.

    ELSE.
      SELECT FROM zbs_dmo_position
        FIELDS COUNT( * )
        WHERE document = @ls_original-Document
        INTO @<ld_field>.

    ENDIF.
  ENDLOOP.
ENDLOOP.

 

Die Methode loopt über die angeforderten Elemente und ergänzt dann die Inhalte, die angefordert wurden. Um unsere Informationen aus den Daten abzuleiten, weisen wir diese einer internen Variable zu. Da die Datentypen als ANY definiert wurden, müssen wir diesen Weg gehen, um die Elemente über ihre Namen anzusprechen. Am Ende setzen wir für einen bestimmten Partner die Anzahl auf 999 und für alle anderen Partner ermitteln wir die Anzahl der Positionen. Die Gesamtimplementierung würde dann wie folgt aussehen:

CLASS zcl_bs_demo_crap_ve_exit DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_sadl_exit_calc_element_read.
ENDCLASS.


CLASS zcl_bs_demo_crap_ve_exit IMPLEMENTATION.
  METHOD if_sadl_exit_calc_element_read~calculate.
    LOOP AT it_requested_calc_elements INTO DATA(ld_virtual_field).
      LOOP AT ct_calculated_data ASSIGNING FIELD-SYMBOL(<ls_calculated_data>).
        DATA(ld_tabix) = sy-tabix.
        ASSIGN COMPONENT ld_virtual_field OF STRUCTURE <ls_calculated_data> TO FIELD-SYMBOL(<ld_field>).

        DATA(ls_original) = CORRESPONDING ZBS_C_RAPCInvoice( it_original_data[ ld_tabix ] ).

        IF ls_original-Partner = '1000000002'.
          <ld_field> = 999.

        ELSE.
          SELECT FROM zbs_dmo_position
            FIELDS COUNT( * )
            WHERE document = @ls_original-Document
            INTO @<ld_field>.

        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDMETHOD.


  METHOD if_sadl_exit_calc_element_read~get_calculation_info.
  ENDMETHOD.
ENDCLASS.

 

Verwendung

Innerhalb von RAP können damit zusätzliche Informationen an das Frontend gegeben werden, die im Datenmodell so nicht vorhanden sind. Für technische Festwerte könnten so lesbare Inhalte übergeben werden. Das Ergebnis des oben gezeigten Beispiels sieht wie folgt aus:

 

Fazit

Die aktuelle Variante haben wir wie immer in GitHub commited, sodass du die Änderungen und Beispiele nachvollziehen kannst. Virtuelle Elemente sind recht einfach implementiert, es sollten allerdings Informationen aus JOIN und Assoziation bevorzugt verwendet werden.


Enthaltene Themen:
RAPBTPVirtual ElementsVIRTUALREX2
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 - Änderungsbelege implementieren (Nativ)

Kategorie - ABAP

Hast du das passende Release, dann kannst du Änderungsbelege auch mittlerweile nativ in RAP implementieren, ohne viel mnauelle Implementierung. Schauen wir uns dazu die verschiedenen Schritte an.

24.04.2026

RAP - Auxiliary Class

Kategorie - ABAP

Wenn die Implementierung in der Verhaltensimplementierung eines RAP Objekts wächst, welche Möglichkeiten hast du dann noch für eine saubere Kapselung? Schauen wir uns das einmal im Detail an.

17.04.2026

RAP - Änderungsbelege implementieren (Manuell)

Kategorie - ABAP

In diesem Artikel steigen wir in die manuelle Implementierung der Änderungsbelege in unser RAP Objekt ein und schauen uns die verschiedenen Schritte der Integration an. Am Ende sollen Änderungsbelege automatisch erzeugt werden.

14.04.2026

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