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

RAP - Aktion

647

In diesem Artikel schauen wir uns einmal Aktionen an, wie sie aufgebaut werden und was sie eigentlich mit dem RAP Business Objekt machen.

Werbung


In den letzten RAP Artikeln hatten wir uns mit dem Thema Validierungen und Ermittlungen beschäftigt, dies wollen wir nun vervollständigen mit den Aktionen. Wie du Aktionen definieren kannst und diese implementierst, erfährst du in diesem Artikel.

 

Einführung

Aktionen kann man sich am einfachsten wie Buttons auf einer Oberfläche vorstellen, man kann sie von außen auslösen und sie führen verschiedene Schritte aus. In den meisten Fällen werden auch Daten des RAP Business Objekts beeinflusst. Ähnlich wie Validierungen und Ermittlungen müssen sie in der Verhaltensdefinition des Objekts angelegt werden.

 

Bereitstellung

Im ersten Schritt definieren wir zwei einfache Aktionen in der Verhaltensdefinition, dazu musst du nur die "action" und einen Namen angeben. In diesem Fall definieren wir zwei Aktionen, eine Normal und eine Static. Über STRG + 1 können die beiden Aktionen und deren Methoden erzeugt werden, um später das Coding zu implementieren.

action fillEmptyStreets;
static action clearAllEmptyStreets;

 

Damit die Aktionen auch in der App oder Schnittstelle genutzt werden können, müssen diese in der Projektion bekannt gegeben werden. Erst durch die Bereitstellung nach Außen, kann sie auch genutzt werden. 

use action fillEmptyStreets;
use action clearAllEmptyStreets;

 

Damit die Aktionen nun auf dem UI erscheinen, muss die Metadata Extension erweitert werden. Dazu kann ein beliebiges Feld um weitere Annotationen erweitert werden. Über die Erweiterung von LineItem tauchen die Buttons über der Liste auf. Wichtig ist vor allem die Defintion des "types" und der "dataAction", damit der Button angezeigt wird und die richtige Aktion auslöst.

@UI.selectionField : [ { position: 10 } ]
@UI.lineItem: [
  { position: 20, importance: #MEDIUM },
  { position: 10, type: #FOR_ACTION, label: 'Fill', dataAction: 'fillEmptyStreets' },
  { position: 20, type: #FOR_ACTION, label: 'Clear All', dataAction: 'clearAllEmptyStreets' }
]
@UI.identification: [{ position: 10, qualifier: 'PARTNER_INFO' }]
@EndUserText.label: 'Partner'
@EndUserText.quickInfo: 'Identifier of the partner'
PartnerNumber;

 

Die Buttons werden damit nun auch auf dem UI angezeigt und können genutzt werden:

 

Zum Abschluss implementieren wir nun die beiden Aktionen. Die Aktion "fillEmptyStreets" befüllt einen Datensatz, bei dem die Straße leer ist, mit einem Wert. Die Aktion "clearAllEmptyStreets" löscht die Werte nun wieder, aber keine anderen Straßen. Die Implementierung sieht wie folgt aus:

METHOD clearAllEmptyStreets.
  SELECT FROM zbs_dmo_partner
    FIELDS partner, street
    WHERE street = 'EMPTY'
    INTO TABLE @DATA(lt_partner_data).

  LOOP AT lt_partner_data INTO DATA(ls_partner).
    MODIFY ENTITIES OF ZBS_I_RAPPartner IN LOCAL MODE
      ENTITY Partner
      UPDATE FIELDS ( Street )
      WITH VALUE #( ( PartnerNumber = ls_partner-partner Street = '' %control-Street = if_abap_behv=>mk-on ) ).
  ENDLOOP.

  INSERT VALUE #(
    %msg = new_message_with_text( text = |{ lines( lt_partner_data ) } records changed|
    severity = if_abap_behv_message=>severity-success )
  ) INTO TABLE reported-partner.
ENDMETHOD.


METHOD fillEmptyStreets.
  READ ENTITIES OF ZBS_I_RAPPartner IN LOCAL MODE
    ENTITY Partner
    FIELDS ( Street )
    WITH CORRESPONDING #( keys )
    RESULT DATA(lt_partner_data).

  LOOP AT lt_partner_data INTO DATA(ls_partner) WHERE Street IS INITIAL.
    MODIFY ENTITIES OF ZBS_I_RAPPartner IN LOCAL MODE
      ENTITY Partner
      UPDATE FIELDS ( Street )
      WITH VALUE #( ( %tky = ls_partner-%tky Street = 'EMPTY' %control-Street = if_abap_behv=>mk-on ) ).
  ENDLOOP.
ENDMETHOD.

 

Aktionen

Im oberen Beispiel haben wir zwei Aktionen verwendet, eine normale "Action" und eine "Static Action". Die normale Aktion ist zu Beginn inaktiv und kann erst genutzt werden, wenn einer oder mehrere Datensätze in der Liste markiert wurden. Die Aktion wird nur auf diesem Datensatz ausgeführt.

Die zweite Aktion ist immer aktiv, dass sie auf das ganze Objekt Einfluss hat und nicht abhängig von einem markierten Datensatz ist. Entsprechend anders läuft die Aktion, denn hier müssen wir alle Schlüssel selbst von der Datenbank lesen und bekommen sie nicht übergeben.

 

Meldungen

Aktionen bringen die Möglichkeit mit, entsprechende Meldungen an den User zurückzugeben. In unserer Beispielimplementierung haben wir eine einfache Erfolgsmeldung ausgegeben, die einen Message Toast erzeugt, der nach wenigen Sekunden verschwindet.

 

Hier besteht aber auch die Möglichkeit mehr Meldungen zu erzeugen. Werden mehr Meldungen erzeugt, dann ändert sich die Form in ein Popup, werden andere Typen verwendet, wir die Meldung anders dargestellt oder muss vielleicht auch erst bestätigt werden.

 

Fazit

Aktionen geben dem RAP Objekt weitere Möglichkeiten auf die Daten einzuwirken, ohne Änderungen direkt vorzunehmen. Die Aktionen können einfach sein und Daten verändern oder komplexe Aktionen auslösen, wie Daten über eine Schnittstelle nachzulesen.


Enthaltene Themen:
RAPBTPAktionREX1
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 - Generierung mit Template

Kategorie - ABAP

Die Generatoren in RAP sind mächtig, wenn es um die schnelle Bereitstellung von RAP Objekten geht. Über Templates kannst du die Entitäten noch einmal schneller anlegen, wenn du eine Schulung machst.

13.01.2026

RAP - CDS Pattern

Kategorie - ABAP

Wie geht eigentlich das CDS Pattern und was hat CDS-only damit zu tun? In diesem Artikel schauen wir auf die Architektur und Nutzung des Patterns.

28.11.2025

Recycling Heroes - Kontakt App

Kategorie - ABAP

In diesem Tutorial modellieren wir eine RAP Anwendung von der Datenbank, über das Modell und das UI, bis zum Deployment und Bereitstellung im System. Damit solltest du den vollen Entwicklungszyklus für modernen ABAP Cloud Anwendungen lernen.

25.11.2025

RAP - EML Varianten

Kategorie - ABAP

Wenn du EML verwendest, um mit dem ABAP RESTful Application Programming Model zu interagieren, stehen dir aktuell mehrere Varianten zur Verfürgung. Schauen wir sie uns einmal im Detail an.

16.09.2025

RAP - Generator (from Scratch)

Kategorie - ABAP

Deine Entwicklung mit RAP fühlt sich manchmal sehr langsam an? Generatoren nehmen dir die Arbeit ab, um den eigentlich Stack aufzubauen und wiederkehrende Arbeit abzunehmen.

05.08.2025