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

RAP - Numbering

202

In diesem Artikel schauen wir uns einmal die automatische Nummernvergabe an und wie wir im Fall der Partner-App, selbst Nummern vergeben können.

Werbung


Wenn wir mit der bisherigen App gearbeitet haben, mussten wir bei neuen Datensätzen immer selbst eine Nummer vergeben. Hier sollte das RAP Objekt aber selbst die Vergabe der Nummer übernehmen und uns als Anwender damit in Ruhe lassen. 

 

Szenarien

Für die Vergabe von Nummern gibt es in RAP drei verschiedene Szenarien, die auch für unterschiedliche Einsatzzwecke gedacht sind:

  • Frühe Nummernvergabe (Extern) - Diese Variante wurde bereits in der alten App von uns eingesetzt, der Anwender ist selbst für die Vergabe des Primärschlüssels verantwortlich. Die Validierung prüft nur auf doppelte Schlüssel und ob der Schlüssel befüllt wurde.
  • Frühe Nummernvergabe (Intern) - Bei dieser Variante besteht das Schlüsselfeld meist aus einer UUID und die Vergabe der eindeutigen ID geschieht über das RAP Framework. Eine Prüfung auf Eindeutigkeit ist nicht mehr nötig, da die UUID immer eindeutig ist.
  • Späte Nummernvergabe - Die späte Nummernvergabe geschieht erst in der Speichersequenz des Frameworks, kurz bevor die Daten auf die Datenbank geschrieben werden. An dieser Stelle kannst du eine Nummer per Nummernkreis vergeben oder auf eine andere Art den Schlüssel vergeben.

 

Die Vergabe der Nummer kann vor allem dann wichtig sein, wenn es um lückenlose Belege oder Nummerierungen geht. Ein Beleg, der den Draft-Status nicht verlässt oder wieder gelöscht wird, würde so eine Lücke in den Belegnummern erzeugen, was betriebswirtschaftlich nicht geht.

 

Frühe Nummernvergabe (intern)

Für diese Form der Nummernvergabe gibt es zwei Ausprägungen, einmal die Variante über die automatische Vergabe einer UUID und die zweite Variante mit der manuellen Vergabe einer Nummer. Bei der ersten Variante wird an dem dafür entsprechenden Feld das Attribut "numbering" definiert. Damit weiß RAP das hier eine automatische UIUD vergeben werden soll.

field ( numbering : managed ) FieldName;

 

Für die interne Vergabe per Methode, muss in der Verhaltensdefinition des Objekts der Zusatz "early numbering" verwendet werden. Im Anschluss muss die Methode "FOR NUMBERING" implementiert werden. Dort hat man dann die Möglichkeit mit Coding eine Nummernvergabe zu implementieren. Diese Variante ist so ähnlich wie das nachfolgende Beispiel für die späte Nummernvergabe.

 

Späte Nummernvergabe

Um die späte Nummernvergabe zu realisieren, muss in der Verhaltensdefinition am Objekt der Zusatz "late numbering" ergänzt werden. Gleichzeitig sollte das Schlüsselfeld auf Read-Only gesetzt werden, da der User hier keine Eingabe mehr machen kann. Dazu der Auszug aus der Verhaltensdefinition:

managed implementation in class zbp_bs_demo_rappartner unique;
strict;

define behavior for ZBS_I_RAPPartner alias Partner
persistent table zbs_dmo_partner
lock master
authorization master ( instance )
late numbering
{
  create;
  update;
  delete;

  field ( readonly ) PartnerNumber;

  mapping for zbs_dmo_partner
  {
    PartnerNumber = partner;
    PartnerName = name;
    Street = street;
    City = city;
    Country = country;
    PaymentCurrency = payment_currency;
  }
}

 

Der Compiler verweist uns im Anschluss darauf, dass wir noch die Implementierung generieren müssen, was über STRG + 1 automatisch erledigt wird. Die leere Implementierung wird in der Speichersequenz angelegt und nicht wie bisher, in der Verhaltensimplementierung. Die Methode "ADJUST_NUMBERS" kann nun befüllt werden:

CLASS lsc_zbs_i_rappartner DEFINITION INHERITING FROM cl_abap_behavior_saver.
  PROTECTED SECTION.
    METHODS adjust_numbers REDEFINITION.
ENDCLASS.


CLASS lsc_zbs_i_rappartner IMPLEMENTATION.
  METHOD adjust_numbers.
  ENDMETHOD.
ENDCLASS.

 

Für die Nummernvergabe verwenden wir eine sehr einfach Logik, in dem wir die maximale Nummer ermitteln und dann bei allen neuen Datensätzen erhöhen:

SELECT FROM zbs_dmo_partner
  FIELDS MAX( partner )
  INTO @DATA(ld_max_partner).

LOOP AT mapped-partner REFERENCE INTO DATA(lr_partner).
  ld_max_partner += 1.
  lr_partner->PartnerNumber = ld_max_partner.
ENDLOOP.

 

 

Test

Bevor wir mit dem Test beginnen können, müssen wir noch die Implementierung der Methode "validateKeyIsFilled" auskommentieren. Die Vergabe des Schlüssels erfolgt nicht mehr extern, sondern erst in der Speichersequenz. Da die Validierung vor der Sequenz aufgerufen wird, würde die Validierung des Speichervorgang behindern. Schauen wir uns dazu einmal größte Partnernummer an:

 

Über "Create" legen wir einen leeren Datensatz an und sehen auch, dass die Partnernummer gesperrt ist, eine manuelle Eingabe wie bisher ist nicht möglich

 

Nachdem die Felder befüllt wurden, können wir auf den "Save" Button klicken, die Felder werden gesperrt und der neue Datensatz wird präsentiert. Die Nummer wurde vergeben und ist im Detailbild zu sehen.

 

Fazit

Du siehst, die Implementierung der automatischen Nummernvergabe ist kein Hexenwerk und benötigt nur einige kleinere Schritte. Bereits beim Design der RAP Business Objekte solltest du dir Gedanken machen, welche Art von Schlüsseln du verwenden möchtest. Egal ob UUID oder Nummernkreis, nimmt die automatische Vergabe einiges an Arbeit ab.


Enthaltene Themen:
RAPBTPNumbering
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 - Übersetzungs-App (Beispiel)

Kategorie - ABAP

Schauen wir uns einmal ein praktisches Beispiel für die Entwicklung einer RAP Anwendung im ABAP Environment an und wie du mit wenig Aufwand eine App erstellst.

02.08.2024

RAP - Custom Entity Wertehilfe (Deep Dive)

Kategorie - ABAP

Mit der Custom Entity hast du in RAP die meisten Freiheiten in der Entwicklung von ABAP Cloud Anwendungen, doch wie sieht es mit potentiellen Fehlern aus?

12.07.2024

RAP - Deep Action in OData v4

Kategorie - ABAP

In diesem Artikel schauen wir uns einmal Aktionen mit tiefen Strukturen an, wie wir sie erzeugen und Daten an einen API Endpunkt übergeben können.

24.05.2024

BTP - Anbindung On-Premise (Consumption Model v2)

Kategorie - ABAP

In diesem Artikel wollen wir noch einmal einen Update zur Anbindung von On-Premise Systemen geben und wie dies mit einem Communication Arrangement durchgeführt wird.

15.12.2023

RAP - App Count anzeigen (Kachel)

Kategorie - ABAP

In diesem Beispiel geht es um die Anzeige eines Zählers auf der Kachel einer Fiori Elements Anwendung und wie sich so etwas umsetzen lässt.

06.10.2023