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

RAP - Aktion

297

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 - Mehrere Filter und Einstellungen

Kategorie - ABAP

Wie sieht es eigentlich aus, wenn wir in RAP mehrere Filter und Felder als Standard setzen wollen und dazu noch eine standardmäßige Sortierung benötigen?

16.05.2025

RAP - Länge von Meldungen

Kategorie - ABAP

Deine Meldung wird bei der Ausgabe mit RAP abgeschnitten? Lass uns das Problem und eine Lösung anschauen.

13.05.2025

RAP - Suchhilfe und Schlüssel optimieren

Kategorie - ABAP

In diesem Artikel optimieren wir unsere Suchhilfen im Custom Pattern, verwenden das Additional Binding und machen unsere RAP Anwendung fit für den Endanwender.

06.05.2025

RAP - Festwert-Filter

Kategorie - ABAP

Wie verwendest du Festwerte aus einer Domäne für einen Filter und passt diesen nach deinen Bedüfnissen in RAP an? Mehr dazu hier.

02.05.2025

RAP - Custom Pattern (Verhalten)

Kategorie - ABAP

In diesem Artikel erweitern wir das Custom Pattern in RAP um zusätzliche Daten und Verhalten. Damit können wir Mehrwerte in der Implementierung schaffen.

29.04.2025