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

ABAP - XCO UUID

69

Wie generierst du mit den XCO Klassen eindeutige IDs in ABAP? In diesem Artikel erfährst du, wie schnell und einfach das möglich ist.

Werbung


Die XCO Klassen sind Hilfsklassen die verschiedene Funktionen des Alltags gebündelt unter einer öffentlichen API zur Verfügung stellen. Weitere Informationen und eine Übersicht über die XCO Bibliotheken findest du auf der Übersichtsseite.

 

Einleitung

Die Generierung von eindeutigen IDs wird in der Fiori und RAP Welt immer weniger über Nummernkreisobjekte gemacht. Die Datensätze benötigen weiterhin einen Schlüssel, dieser muss aber nicht sprechend sein, da er in vielen Fällen in der UI ausgeblendet wird. Der User soll wissen, wie zum Beispiel der Kunde "xyz" heißt, es ist aber nicht mehr so wichtig, dass er die Kundennummern "0815" hat. In solchen Fällen generiert das RAP Framework bereits Schlüssel automatisch. Doch wie sieht es aus, wenn wir selbst die Schlüssel erzeugen müssen?

 

Erzeugung

In diesem Abschnitt schauen wir uns die Erzeugung der verschiedenen UUIDs über die Klasse XCO_CP=>UUID an und wie es für alle Typen funktioniert.

 

Typ X16

Der Standardtyp für UUIDs im ABAP RESTful Programming Model ist mittlerweile SYSUUID_X16. Hierbei handelt es sich um einen 16 stelligen Binary. 

" Classic
CALL FUNCTION 'GUID_CREATE'
  IMPORTING
    ev_guid_16 = uuid.

" Modern
TRY.
    uuid = cl_system_uuid=>create_uuid_x16_static( ).
  CATCH cx_uuid_error.
ENDTRY.

" XCO
uuid = xco_cp=>uuid( )->value.

 

In der klassischen Entwicklung wird die GUID oder UUID über einen Funktionsbaustein generiert. Möchtest du das Ganze mit einer Klasse machen, verwendest du die Klasse CL_SYSTEM_UUID, dabei musst du allerdings das Exception Handling durchführen oder mit der Warnung in den ABAP Development Tools leben, wobei das der unsaubere Teil wäre. In der XCO Bibliothek findest du in der Klasse XCO_CP das Objekt für die UUID und kannst direkt auf VALUE zugreifen, um eine aktuelle ID zu erhalten.

 

Typ C22

Schaust du dir die oben genannte Klasse an, dann wird dir auffallen, dass nur X16 UUIDs unterstützt werden und die Charakterbasierten UUIDs fehlen. Hierfür implementiert der Standard einen Formatter, um die anderen Formate zu erzeugen.

" Classic
CALL FUNCTION 'GUID_CREATE'
  IMPORTING
    ev_guid_22 = char_uuid.

" Modern
TRY.
    char_uuid = cl_system_uuid=>create_uuid_c22_static( ).
  CATCH cx_uuid_error.
ENDTRY.

" XCO
char_uuid = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c22 )->value.

 

In dem Beispiel oben rufen wir die Methode AS auf und übergeben den entsprechenden Formatter für das gewünschte Format. Als Ergebnis erhalten wir ein String Objekt, bei dem wir über VALUE auf den entsprechenden Inhalt zugreifen können.

 

Formatter

Aktuell werden die folgenden Formatter für die UUID angeboten. Dabei gibt es dir klassischen Char 22 und 32 IDs, aber auch schon eine lesbarere Form als Char 36.

DATA(uuid_c22) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c22 )->value.
DATA(uuid_c32) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c32 )->value.
DATA(uuid_c36) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c36 )->value.

 

Führen wir den Code von oben aus, erhalten wir die folge Ausgabe und das entsprechende Format.

 

Einlesen

Wenn wir das externe Format kennen, können wir auch die ID wieder einlesen, um ein UUID Objekt im System zu erzeugen. Allerdings muss uns dazu das Format bekannt sein. In diesem Beispiel erzeugen wir aus der Char 36 ID ein UUID Objekt über die Methode TO_UUID.

DATA(uuid) = xco_cp_uuid=>format->c36->to_uuid( `BAF0A1E7-5FB0-1EDF-B5E8-89F53894CA3A` ).

 

Im Debugger können wir uns nun den aktuellen Wert im Objekt anschauen. Damit ist es möglich, die externe ID auch wieder in ein internes Objekt umzuwandeln, um so die ID zu verarbeiten oder in ein neues Format zu bringen.

 

Vollständiges Beispiel

Hier findest du das vollständige Beispiel der ausführbaren Klasse von oben mit den entsprechenden Implementierungen und Datentypen. Im GitHub Repository findest du alle Beispiele zu den XCO Klassen und im Commit die Änderungen dieses Artikels.

CLASS zcl_bs_demo_xco_uuid DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

  PRIVATE SECTION.
    METHODS operation_for_uuid_x16
      IMPORTING !out TYPE REF TO if_oo_adt_classrun_out.

    METHODS operation_for_uuid_c22
      IMPORTING !out TYPE REF TO if_oo_adt_classrun_out.

    METHODS operation_for_uuid_formatter
      IMPORTING !out TYPE REF TO if_oo_adt_classrun_out.

    METHODS operation_convert_uuid
      IMPORTING !out TYPE REF TO if_oo_adt_classrun_out.
ENDCLASS.


CLASS zcl_bs_demo_xco_uuid IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    operation_for_uuid_x16( out ).
    operation_for_uuid_c22( out ).
    operation_for_uuid_formatter( out ).
    operation_convert_uuid( out ).
  ENDMETHOD.


  METHOD operation_for_uuid_x16.
    DATA uuid TYPE sysuuid_x16.

    " Classic
    CALL FUNCTION 'GUID_CREATE'
      IMPORTING
        ev_guid_16 = uuid.

    " Modern
    TRY.
        uuid = cl_system_uuid=>create_uuid_x16_static( ).
      CATCH cx_uuid_error.
    ENDTRY.

    " XCO
    uuid = xco_cp=>uuid( )->value.
  ENDMETHOD.


  METHOD operation_for_uuid_c22.
    DATA char_uuid TYPE c LENGTH 22.

    " Classic
    CALL FUNCTION 'GUID_CREATE'
      IMPORTING
        ev_guid_22 = char_uuid.

    " Modern
    TRY.
        char_uuid = cl_system_uuid=>create_uuid_c22_static( ).
      CATCH cx_uuid_error.
    ENDTRY.

    " XCO
    char_uuid = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c22 )->value.
  ENDMETHOD.


  METHOD operation_for_uuid_formatter.
    DATA(uuid_c22) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c22 )->value.
    out->write( uuid_c22 ).

    DATA(uuid_c32) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c32 )->value.
    out->write( uuid_c32 ).

    DATA(uuid_c36) = xco_cp=>uuid( )->as( xco_cp_uuid=>format->c36 )->value.
    out->write( uuid_c36 ).
  ENDMETHOD.


  METHOD operation_convert_uuid.
    DATA(uuid) = xco_cp_uuid=>format->c36->to_uuid( `BAF0A1E7-5FB0-1EDF-B5E8-89F53894CA3A` ).
    out->write( uuid->value ).
  ENDMETHOD.
ENDCLASS.

 

Fazit

Auch im Bereich XCO findest du das Thema UUID und kannst einfach auf neue IDs zugreifen. Dabei bleibt dir aktuell die Ausnahmebehandlung erspart, da keine Ausnahmen nach außen weitergegeben werden und im Notfall zu einem Abbruch der Verarbeitung führen.


Enthaltene Themen:
Modernes ABAPXCOUUID
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.


ABAP - XCO Systemfelder

Kategorie - ABAP

Gibt es für SY bzw. SYST auch eine Alternative in der XCO Bibliothek in ABAP Cloud? Einen Blick ist sie auf jeden Fall wert.

24.01.2025

ABAP - XCO Excel

Kategorie - ABAP

Was kann eigentlich die XCO Bibliothek für Excel in ABAP? Hier schauen wir uns den aktuellen Stand der API an.

29.11.2024

ABAP - XCO Strings

Kategorie - ABAP

In diesem Artikel schauen wir uns die XCO Klasse zur Erzeugung und Verarbeitung von Strings für ABAP Cloud an und vergleichen sie mit den klassischen Statements.

22.11.2024

ABAP - XCO Bibliotheken

Kategorie - ABAP

Was kannst du mit der Bibliothek in ABAP und ABAP Cloud machen und wie nutzt du die Objekte am besten? Hier erfährst du mehr.

12.11.2024

ABAP - Type Casting

Kategorie - ABAP

Wie kommst du eigentlich an den ursprünglichen Typ einer Klasse bzw. Instanz, wenn diese in einer generischen Tabelle übergeben wird? In diesem Artikel prüfen wir die Möglichkeiten.

16.04.2024