ABAP RAP Nummernvergabe

ABAP RAP Nummernvergabe

Die Nummernvergabe ist ein wesentlicher Bestandteil von ABAP RAP Anwendungen. Konkret geht es bei der Nummernvergabe darum, wie die Schlüsselfelder der Entität mit Werten versorgt werden. RAP bietet uns hier verschieden Lösungsansätze, welche jedoch manchmal auch zur Verwirrung führen und ich deshalb hier kurz erläutern möchte.

Zuerst müssen wir einmal klären, was Früh/Spät und Managed/Unmanaged bei der Nummernvergabe bedeutet.

Frühe- und Späte Nummernvergabe

Bei der frühen Nummerierung geht es darum, dass die Nummer bereits durch den Consumer oder durch das RAP-Framework zu einem frühen Zeitpunkt erzeugt wird. Bei der späten Nummerierung werden die eigentlichen Keys erst zum SAVE-Zeitpunkt vergeben, wodurch eine lückenlose Nummerierung realisiert werden kann.

Managed und Unmanaged

Wenn man als Key-Feld eine Guid hat, kann man sich für eine automatische (=managed) Nummerierung entscheiden. Bei der unmanaged Nummerierung wird die Nummernvergabe durch entsprechende ABAP Codes realisiert.

Folgende Kombinationsmöglichkeiten sind vorhanden:

Frühe NummernvergabeSpäte Nummernvergabe
ExternX
ManagedXX
UnmanagedXX

Frühe externe Nummernvergabe

Bei der frühen externen Nummernvergabe werden die Key-Felder bereits durch den Consumer gefüllt. In der Behavior-Definition müssen wir dafür sorgen, dass das Feld bei der Erstellung änderbar ist, bei Änderungen jedoch nicht mehr geändert werden kann.

In der Behavior Definition ist für diese Nummerierung keine spezielle Angabe zu machen. Jedoch sollten die Key-Felder bei Updates auf readonly gesetzt werden:

field ( readonly : update ) orderId;

Frühe interne Nummernvergabe

Die frühe interne Nummernvergabe kann nur angewendet werden, wenn es sich bei dem Key-Feld um eine Guid (Raw 16) handelt. In der Behavior Definition sind auch in diesem Scenario nur zwei kleine Definitionen für das Key-Feld vorzunehmen:

field ( readonly ) orderGuid;
field ( numbering : managed ) orderGuid;

Zuerst setzen wir die Guid auf readonly und in zweiten Zeile legen wir die automatische interne Nummerierung auf die Guid fest.

Unmanaged interne Nummernvergabe

Diese unmanaged interne Nummernvergabe kann sowohl für managed als auch unmanaged RAP Business Objekte verwendet werden. Auf Entity Level müssen wir eben in der Behavior Definition diese Nummerierung mit early numbering definieren. Ebenso sollten die Key-Felder auf readonly gesetzt werden.

Nun kann man entweder über Quick-Fix oder manuell eine Implementierung für die Nummerierung vornehmen. Die Methodensignatur sieht wie folgt aus:

METHODS earlyNumberingOrder method for NUMBERING
   [IMPORTING] entities FOR CREATE business_object_entity …

In der Methode ist nun die Nummernvergabe für die Objekte in entities umzusetzen. Wichtig ist, dass die erfolgreichen Nummernvergaben in die Exporttabelle mapped bekannt gegeben werden müssen.

Unmanaged späte Nummernvergabe

Auch die unmanaged späte Nummernvergabe kann für beide RAP Szenarien verwendet werden. Auf Entity Level wird dies durch late numbering definiert. Ebenso sollten die Key-Felder auf readonly gesetzt werden.

Die Implementierung der Nummernvergabe erfolgt in einer Methode adjust_numbering, welche im Zuge der save sequence – nach dem Point of no return – aufgerufen wird. Die Methode kann man sich wieder mit einem Quick-Fix erzeugen lassen.

Die erzeugte Nummer muss über den Export-Parameter mapped mit dem internen temporären Key zugeordnet werden.

Referenzen

Posted in Allgemein and tagged .