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

RAP - Numbering

1020

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:
RAPBTPNumberingREX1
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 - Sales App Learnings

Kategorie - ABAP

Das Tutorial für die Sales App ist zu Ende und dieses Mal wurde eine große Bandbreite an Themen und Bereichen adressiert. In diesem Artikel schauen wir auf das Gelernte und wichtige Punkte.

08.09.2026

052: 10 Minutes from Start to Launchpad

Kategorie - YouTube

In dieser Folge schauen wir uns an, wie wir innerhalb von 10 Minuten eine RAP Anwendung erstellen können, diese generieren und bereitstellen und am Ende fertig im Launchpad aufrufen.

07.09.2026

RAP - Navigation (App to App)

Kategorie - ABAP

Wie kannst du eigentlich innerhalb deiner Fiori Anwendung auf eine andere Anwendung navigieren, ohne das der User die App manuell wechseln muss? Schauen wir uns die Navigation zwischen Fiori Apps an.

01.09.2026

ABAP in der Praxis - Setup App erstellen

Kategorie - ABAP

Keine SAP GUI mehr? Wie erstellen wir dann eigentlich eine statische Setup App und bleiben auf ABAP Seite trotzdem flexibel für die weitere Implementierung? Hier ein praktisches Beispiel.

28.08.2026

RAP - Singleton Pattern

Kategorie - ABAP

Das Singleton Pattern in RAP gibt es schon länger, doch wie genau funktioniert es und wie kannst du es auch für andere Use-Cases nutzen? Schauen wir uns dazu die Details in diesem Artikel an.

25.08.2026