ABAP Obsolet - GUID erzeugen
Wie erzeugst du eine eindeutige Identifikation (ID) im System? Du wirst die Antwort wahrscheinlich kennen, doch ist sie noch aktuell?
Inhaltsverzeichnis
In den meisten Hilfen im Internet oder in Foren wirst du immer über die Verwendung eines Funktionsbausteins stolpern. Wenn du unsere Serie über Modernes ABAP verfolgt hast, weißt du aber bereits das die Verwendung von Funktionsbausteinen mittlerweile auf ein Minimum reduziert werden sollte. Nicht weil Funktionsbausteine obsolet sind, sondern eher zu anderen Zwecken verwendet werden sollten.
Was ist das?
GUID bedeutet "Globally Unique Identifiers", ist also ein eindeutiger Schlüssel im System der nicht zweimal vorkommen kann. Generiert wird dieser Schlüssel aus verschiedenen Informationen aus dem System, der Zeit und zufälligen Nummern, vergleichbar mit einem Hash in anderen Sprachen/Systemen.
Eine Nummer kann in drei Ausgabeformaten generiert werden:
- 16-stellig vom Typ x (42D85ED56C0A1EE9A5CA741861FC924B)
- 32-stellig vom Typ c (42D85ED56C0A1EE9A5CA741861FC924B)
- 22-stellig vom Typ c (GjXUrMmA7kcbodGOOVoIIm)
Die ersten beiden Formate sind in der Ausgabe gleich, unterscheiden sich aber durch ihren Datentyp in dem sie gespeichert werden.
Funktionsbaustein
Beim Aufruf des Funktionsbausteins GUID_CREATE bekommst du mit einem Aufruf alle drei GUIDs zurückgeliefert. Über die Write Ausgabe, kannst du dir die Werte direkt anzeigen lassen.
DATA:
ld_guid_16 TYPE guid_16,
ld_guid_22 TYPE guid_22,
ld_guid_32 TYPE guid_32.
CALL FUNCTION 'GUID_CREATE'
IMPORTING
ev_guid_16 = ld_guid_16
ev_guid_22 = ld_guid_22
ev_guid_32 = ld_guid_32.
WRITE: / ld_guid_16, ', ', ld_guid_22, ', ', ld_guid_32
Die Verwendung des Funktionsbausteines wurde bereits als obsolet gekennzeichnet und in den Kommentaren findet man die Nachfolgeklasse zur Generierung der IDs.
Klasse
Der Nachfolger für den Funktionsbaustein ist die Klasse CL_SYSTEM_UUID, mit ihr kannst du ebenfalls alle IDs generieren. SAP stellt an dieser Stelle für jeden Datentyp eine eigene Methode zur Verfügung. Der Vorteil bei der Verwendung ist natürlich auch die Inline-Deklaration im Programm, was den Code wieder übersichtlicher macht.
DATA(ld_new_16) = cl_system_uuid=>create_uuid_x16_static( ).
DATA(ld_new_22) = cl_system_uuid=>create_uuid_c22_static( ).
DATA(ld_new_32) = cl_system_uuid=>create_uuid_c32_static( ).
WRITE: / ld_new_16, ', ', ld_new_22, ', ', ld_new_32.
Neben der Verwendung von den statischen Methoden, werden auch noch Instanzmethoden bereitgestellt, die nach der Erzeugung des Objekts aufgerufen werden können. Für diese Methoden werden in der Klasse keine Interface Aliase bereitgestellt, was die Schreibweise leicht verlängert.
DATA(ld_new_16x) = NEW cl_system_uuid( )->if_system_uuid~create_uuid_x16( ).
DATA(ld_new_22x) = NEW cl_system_uuid( )->if_system_uuid~create_uuid_c22( ).
DATA(ld_new_32x) = NEW cl_system_uuid( )->if_system_uuid~create_uuid_c32( ).
WRITE: / ld_new_16x, ', ', ld_new_22x, ', ', ld_new_32x.
Fazit
Die Erzeugung von eindeutigen IDs hat sich damit etwas geändert, sollte für dich aber kein Problem darstellen. Mit den Methoden bist du auf jeden Fall etwas flexibler unterwegs, vor allem wenn es um die Verkettung von Funktionen geht. Falls dies für dich nichts Neues sein sollte, dann nur noch einmal zur Auffrischung des Wissens.
Quelle:
SAP Answers