Ansicht
Dokumentation

CL_SYSTEM_UUID - Klasse zur Bearbeitung von 16 Byte langen System-UUIDs

CL_SYSTEM_UUID - Klasse zur Bearbeitung von 16 Byte langen System-UUIDs

RFUMSV00 - Advance Return for Tax on Sales/Purchases   General Material Data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Die Klasse 'cl_system_uuid' stellt Methoden zur Erzeugung und Konvertierung von System-UUIDs (128bits Länge) zur Verfügung.
Diese Methoden werden sowohl als statische wie auch als Instanz-Methoden angeboten.

Die erzeugten System-UUIDs können je nach Plattform und Verfügbarkeit mit unterschiedlichen Algorithmen erzeugt werden. Es wird keine UUID-Version nach RFC4122 zugesichert.

UUID Darstellungsformate

Folgende Darstellungsformate werden unterstützt:

  • X16: Binärformat
  • C22: Textuelles Format der Länge 22 (pseudo base 64 Format); z.B. 051MaJul7jQ3YMMNCF3GXW
  • C26: Textuelles Format der Länge 26 (base 32 Format); z.B. ABIFNEJ6F4PNNA4JM37AEIKQQY
  • C32: Textuelles Format der Länge 32 (Hexadezimal Format) z.B. 005056913E2F1ED6838968C4E2C5D086
  • C36: Textuelles Format der Länge 36 (definiert in RFC4122; Hexadezimal Format mit Trennstrichen); z.B. 00505691-3E2F-1ED6-8389-69DAF0CA1086

Die Formate der System-UUIDs können mit Hilfe von Konvertierungsmethoden in alle anderen Formate konvertiert werden.

Statische Methoden von CL_SYSTEM_UUID

Um die statischen Methoden aufzurufen verwenden Sie die in der Klasse definierten Aliase zur UUID Erzeugung:

cl_system_uuid=>CREATE_UUID_X16_STATIC -> Erzeugt UUIDs im Binärformat (16 bytes)
cl_system_uuid=>CREATE_UUID_C22_STATIC -> Erzeugt UUIDs im 22 Zeichenformat (pseudo base 64)
cl_system_uuid=>CREATE_UUID_C26_STATIC -> Erzeugt UUIDs im 26 Zeichenformat (base 32)
cl_system_uuid=>CREATE_UUID_C32_STATIC -> Erzeugt UUIDs in der 32 Zeichen hexadezimal Darstellung
cl_system_uuid=>CREATE_UUID_C36_STATIC -> Erzeugt UUIDs in der 36 Zeichen Darstellung nach RFC4122

Zur Konvertierung von UUIDs benutzen Sie die in der Klasse definierten Aliase:
cl_system_uuid=>CONVERT_UUID_X16_STATIC -> Konvertiert vom Binärformat in die anderen Formate
cl_system_uuid=>CONVERT_UUID_C22_STATIC -> Konvertiert vom 22 Zeichenformat in die anderen Formate
cl_system_uuid=>CONVERT_UUID_C26_STATIC -> Konvertiert vom 26 Zeichenformat in die anderen Formate
cl_system_uuid=>CONVERT_UUID_C32_STATIC -> Konvertiert von der Hex-Darstellung in die anderen Formate
cl_system_uuid=>CONVERT_UUID_C36_STATIC -> Konvertiert von der RFC4122-Darstellung in die anderen Formate

Instanzmethoden von CL_SYSTEM_UUID

Falls Sie mehrere UUIDs erzeugen wollen bieten sich die Instanz-Methoden an. Gehen Sie hierzu wie folgt vor:

  • Anlegen einer Referenz vom Typ des Interfaces 'if_system_uuid'
  • Erzeugen eines cl_system_uuid-Objektes mit Hilfe der Methode 'create_system_uuid' der Klasse 'cl_uuid_factory'.
  • Verwenden der Methoden des cl_system_uuid-Objektes die über die Referenz angesprochen werden können.

Zur Erzeugung von UUIDs werden folgende Instanz-Methoden angeboten:

  • create_uuid_x16 -> Erzeugt UUIDs im Binärformat (16 bytes)
  • create_uuid_c22 -> Erzeugt UUIDs im 22 Zeichenformat (pseudo base 64)
  • create_uuid_c26 -> Erzeugt UUIDs im 26 Zeichenformat (base 32)
  • create_uuid_c32 -> Erzeugt UUIDs in der 32 Zeichen Hexadezimaldarstellung.

Desweiteren können zum Konvertieren folgende Methoden verwendet werden:

  • convert_uuid_x16 -> Konvertiert vom Binärformat in die anderen Formate
  • convert_uuid_c22 -> Konvertiert vom 22 Zeichenformat in die anderen Formate
  • convert_uuid_c26 -> Konvertiert vom 26 Zeichenformat in die anderen Formate
  • convert_uuid_c32 -> Konvertiert von der Hex-Darstellung in die anderen Formate

Methoden aus dem Interface IF_SYSTEM_UUID_RFC4122_STATIC

Methoden aus dem Interface IF_SYSTEM_UUID_RFC4122_STATIC werden nur benötigt, wenn UUIDs in einer speziellen Version aus RFC4122 erzeugt werden müssen (z.B. für externe Konsumenten):

  • cl_system_uuid=>if_system_uuid_rfc4122_static~create_uuid_x16_by_version
  • cl_system_uuid=>if_system_uuid_rfc4122_static~create_uuid_c36_by_version
  • cl_system_uuid=>if_system_uuid_rfc4122_static~get_uuid_x16_version
  • cl_system_uuid=>if_system_uuid_rfc4122_static~get_uuid_x16_version
  • Aktuell können UUIDs mit den folgenden Versionen erzeugt werden: Version 1 (time based) und Version 4 (random based).

Mit der Methode 'cl_system_uuid=>is_uuid_x16_rfc4122_compliant' kann ebenfalls geprüft werden, ob die UUID den Regeln des RFC4122 entspricht.

Beziehungen

Beispiel

Beispiel um eine UUID über Aliase zu erzeugen und zu konvertieren

DATA: l_uuid_x16 TYPE sysuuid_x16.
DATA: oref       TYPE REF TO cx_uuid_error.

TRY.
    l_uuid_x16 = cl_system_uuid=>create_uuid_x16_static( ). " create uuid_x16

  CATCH cx_uuid_error INTO oref.                          " catch error
    DATA: s1 TYPE string.
    s1 = oref->get_text( ).
ENDTRY.

Hier wird eine 22 Zeichen UUID in die 16 Byte und in die 32 Zeichen Darstellung konvertiert

DATA: l_uuid     TYPE sysuuid_c22 VALUE 'oucIZjgq4Tg62803kedwLG'.
DATA: l_uuid_x16 TYPE sysuuid_x16.
DATA: l_uuid_c32 TYPE sysuuid_c32.
DATA: oref TYPE REF TO cx_uuid_error.

TRY.
    cl_system_uuid=>convert_uuid_c22_static( EXPORTING uuid = l_uuid
                                            IMPORTING uuid_x16 = l_uuid_x16
                                                       uuid_c32 = l_uuid_c32 ).
  CATCH cx_uuid_error INTO oref. " catch error
      DATA: s1 TYPE string.
      s1 = oref->get_text( ).
ENDTRY.

Beispiel um eine UUID über das Interface if_system_uuid zu erzeugen und zu konvertieren

DATA: l_uuid_x16  TYPE sysuuid_x16.
DATA: system_uuid TYPE REF TO if_system_uuid.
DATA: oref        TYPE REF TO cx_uuid_error.

system_uuid = cl_uuid_factory=>create_system_uuid( ).

TRY.
    l_uuid_x16 = system_uuid->create_uuid_x16( ). " create uuid_x16

  CATCH cx_uuid_error INTO oref.                  " catch error
    DATA: s1 TYPE string.
    s1 = oref->get_text( ).
ENDTRY.

Hier wird eine 22 Zeichen UUID in die 16 Byte und in die 32 Zeichen Darstellung konvertiert

DATA: l_uuid      TYPE sysuuid_c22 VALUE 'oucIZjgq4Tg62803kedwLG'.
DATA: l_uuid_x16  TYPE sysuuid_x16.
DATA: l_uuid_c32  TYPE sysuuid_c32.
DATA: system_uuid TYPE REF TO if_system_uuid.
DATA: oref        TYPE REF TO cx_uuid_error.

system_uuid = cl_uuid_factory=>create_system_uuid( ).

TRY.
    system_uuid->convert_uuid_c22( EXPORTING uuid = l_uuid
                                   IMPORTING uuid_x16 = l_uuid_x16
                                             uuid_c32 = l_uuid_c32 ).

  CATCH cx_uuid_error INTO oref. " catch error
    DATA: s1 TYPE string.
    s1 = oref->get_text( ).
ENDTRY.

Hinweise

Die mit dieser Klasse erzeugten UUIDs dürfen nicht in ihre Komponenten zerlegt werden. Insbesondere sollte nicht versucht werden aus einer UUID den Erzeugungszeitpunkt oder -ort zu ermitteln.

Wenn die mit dieser Klasse erzeugten UUIDs als Schlüssel für eine Tabelle verwendet werden, wird dringend empfohlen in diese Tabelle keine Schlüssel von anderen GUID/UUID Generatoren oder eigenen Algorithmen einzutragen, da sonst doppelte Schlüsseleinträge entstehen können.
Das bezieht sich jedoch nicht auf bereits existierende Tabellenschlüssel welche mit dem alten SAP-GUID / RFC-UUID Algorithmus (also u.a. mit dem Funktionsbausteinen GUID_CREATE u. SYSTEM_UUID_CREATE) erstellt wurden.

Sowohl bei dem Binärformat der UUID als auch bei der hexadezimalen Darstellung werden nur Großbuchstaben unterstützt.

Es wird darauf hingewiesen, dass das pseudo-base-64 Format C22 Zeichen enthält, die in bestimmten Szenarien durch Fluchtsymbole ersetzt werden. Diese Ersetzungsregeln sind in der ABAP-Doku zur Funktion ESCAPE beschrieben. Des Weiteren gehören diese Zeichen nicht zum SAP Syntaktischen Zeichensatz. D.h. dass z.B. bei einem RFC in ein non-unicode-System abhängig von der gewählten Sprache diese Zeichen verloren gehen können bzw. falsch interpretiert werden können.

Bei den beiden UUID Formaten C22 (pseudo-base-64) und C26 (base-32) werden nicht alle bits der Zeichen für die Bestimmung der UUID benötigt. Bei C22 sind 4bits überflüssig, bei C26 2bits. Bei der Erzeugung und Konvertierung von C22 und C26 UUIDs werden diese Füll-Bits vom Server auf 0 gesetzt; d.h. der ABAP Applikationsserver erzeugt eine normierte Form von C22 und C26 UUIDs. Werden die Füll-Bits anders gesetzt ergeben sich unterschiedliche UUID-Zeichenketten für eine identische UUID.

Beispiel:

Diese beiden Zeichenketten sind unterschiedlich, beschreiben aber eine identische UUID:

  • iBoMA05zQVmIENmUB37ODh
  • iBoMA05zQVmIENmUB37ODi

Die Umwandlung dieser beiden C22 Zeichenketten in das X16 Binärformat ergibt ein identisches Ergebnis; daher sollten UUID Vergleiche im Datentyp x16 durchgeführt werden.

Weiterführende Informationen






rdisp/max_wprun_time - Maximum work process run time   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 12459 Date: 20240427 Time: 032301     sap01-206 ( 117 ms )