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

RAP - Aktion

237

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:
RAPBTPAktion
Kommentare (0)



Und weiter ...

Bist du zufrieden mit dem Inhalt des Artikels? Wir posten jeden 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 - Popup Pflichtfelder

Kategorie - ABAP

Wie kannst du eigentlich Pflichtfelder für ein Popup in RAP definieren? In diesem Artikel werden wir etwas genauer auf die Details eingehen.

14.01.2025

RAP - Deep Table Action

Kategorie - ABAP

Ist die Übergabe von Tabellen an Aktionen in RAP aktuell möglich? Dieser Artikel soll einen besseren Einblick in das Thema gewähren.

07.01.2025

ABAP Cloud - Programmiermodell

Kategorie - ABAP

Welches Programmiermodell kommt mit ABAP Cloud zum Einsatz und was können wir aus dem Vorgänger lernen? Mehr Details im Artikel.

03.01.2025

RAP - Side Effects

Kategorie - ABAP

Wie kannst du Teile der Fiori UI aktualisieren, ohne einen kompletten Refresh zu machen? Mit Side Effects ist das in ABAP und RAP ganz leicht möglich.

27.12.2024

RAP - Events

Kategorie - ABAP

Wie kannst du eigentlich Events in RAP erzeugen und mit ABAP verarbeiten? Hier erfährst du mehr zur eventgetriebenen Verarbeitung.

23.12.2024