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

ABAP Cloud - Datentypen

77

Wie sieht es eigentlich bei der Verwendung von Datenelementen unter ABAP Cloud aus? In diesem Artikel schauen wir uns Alternativen in der Definition an.

Werbung


In diesem Artikel werden wir auf die Verwendung von Datentypen eingehen, wie du sie für die Tabellendefinition nutzen kannst und wie du weitere Elemente 

 

Einleitung

Bisher haben wir auf Datenelemente der SAP standardmäßig zugegriffen und diese für Schnittstellen und Tabellendefinitionen verwendet. Mit ABAP Cloud sind zwar einige Datenelemente freigegeben, schauen wir allerdings einmal durch die einzelnen Elemente durch, wird schnell auffallen, dass die meisten davon technischer Natur sind.

 

Wie also mit fehlenden Datenelementen in ABAP Cloud umgehen? In den folgenden Abschnitten zeigen wir dir verschiedene Möglichkeiten, um an deine Typisierung zu kommen.

 

Grund

Wieso sind nicht mehr alle Datenelemente freigegeben? Grundsätzlich gibt SAP erst einmal nur Elemente frei, die der Kunde in der ABAP Cloud Entwicklung einsetzen soll. Datenelemente gehören zur Definition der Tabelle, worauf wir keinen direkten Zugriff mehr haben, da wir hier vor allem Core Data Services verwenden sollen. Zum anderen beinhalten einige Datenelemente "komische" Konvertierungsexits, die wir in Fiori nicht mehr sehen wollen. Konvertierungsexits werden im Umfeld SAP GUI verwendet und werden in ABAP Cloud nicht mehr benötigt, da wir auf Fiori als Frontend setzen. Wobei wir auch dazu sagen wollen, das kleinere Konvertierungsexits bestehen bleiben werden.

Schauen wir in die Zukunft von ABAP Cloud, verwenden wir dann CDS Types und Enums, um unsere Table Entities anzulegen und zu typisieren. Datenelemente haben damit noch eine gewisse Haltbarkeit für die Übergangszeit, werden aber in Zukunft dann langsam aussterben.

 

Verwendung - Freigabe

Schauen wir uns die Tabelle T001 einmal an, der entsprechende Core Data Service ist hier I_CompanyCode. Das Element BUKRS ist als Datenelement für die Nutzung freigegeben. Damit können wir es weiterhin wie normal verwenden.

 

Hier sind meist die Datenelemente von Stamm- und Bewegungsdaten freigegeben, da wir als Nutzer diese meistens als Sekundärschlüssel in den Tabellen und beim Zugriff benötigen. Die Elemente kannst du frei in deiner Entwicklung verwenden.

 

Verwendung - Klassen und Logik

Wollen wir nun zum Beispiel ein Feld vom Typ BUTXT definieren, dann können wir das nicht bei uns im Code machen, da das Element nicht freigegeben ist. Allerdings können wir auf die Elemente des Core Data Service zurückgreifen, wenn wir Strukturen und Typen in der Klasse anlegen. Dazu definieren wir einen Typen, den wir wiederverwenden können und eine Struktur, in der wir verschiedene Typen kombinieren.

TYPES td_company_text TYPE I_CompanyCode-CompanyCodeName.

TYPES: BEGIN OF ts_data,
         companycode TYPE I_CompanyCode-CompanyCode,
         text_direct TYPE I_CompanyCode-CompanyCodeName,
         text_type   TYPE td_company_text,
       END OF ts_data.
TYPES tt_data TYPE STANDARD TABLE OF ts_data WITH EMPTY KEY.

 

Im nächsten Schritt lesen wir die Daten aus der Tabelle und befüllen unsere Struktur.

DATA lt_withtype TYPE tt_data.

SELECT FROM I_CompanyCode
  FIELDS CompanyCode,
         CompanyCodeName AS text_direct,
         CompanyCodeName AS text_type
  INTO TABLE @lt_withtype
  UP TO 10 ROWS.

 

Zum Abschluss prüfen wir einmal eine Zeile aus der Tabelle und schauen uns die Typen im Debugger an. Die direkte Verwendung des CDS Feldes, sowie die Erstellung eines Typen, funktionieren problemlos. Damit ist innerhalb der Verarbeitungslogik sichergestellt, dass die richtigen Datentypen zur Verfügung stehen.

 

Verwendung - Datenbank

Wollen wir allerdings den Datentyp zur Definition einer Datenbank verwenden, funktioniert die erste Methode nicht mehr. Hier müssen wir ein Datenelement angeben und können nicht auf die Feldreferenz des Core Data Service zugreifen. In so einem Fall stehen uns zwei Methoden zur Verfügung, schauen wir uns dazu einmal die Gesellschaft (RCOMP) an.

 

Standard

Im Standardszenario sind alle Elemente auf TIER-3 und können von uns nicht auf TIER-1 verwendet werden. Die Datenelemente können auch nicht zur Definition einer Tabelle verwendet werden.

 

Wrapper

Im ersten Szenario erstellen wir ein Wrapper Objekt, dass wir dann für TIER-1 zur Verfügung stellen. Dazu können wir per "Duplicate" das Datenelement aus dem Standard in unser TIER-2 Paket kopieren.

 

Ist die Kopie abgeschlossen, wurden alle Eigenschaften und die Domäne aus dem Originalelement übernommen, ebenso wie die Texte.

 

Damit wir nun das Element in TIER-1 verwenden können, müssen wir noch einen C1- Contract anlegen und das Element freigeben. Über den View "Properties" findest du den entsprechenden Dialog, um die Freigabe zu erzeugen.

 

Kopie

Im zweiten Szenario kopieren wir alle Elemente auf TIER-1 und nutzen sie direkt ohne Freigabe. Hier haben wir auch die Möglichkeit die Domäne zu verwenden. Dazu Kopieren wir wieder den Standard, Zielpaket ist in diesem Fall unsere TIER-1 Komponente.

 

Nach dem Kopieren erhalten wir allerdings eine Fehlermeldung bei der neuen Domäne. Die Nutzung der Tabelle T880 ist nicht erlaubt. Da die Tabelle nicht freigegeben ist, müssen wir die Tabelle entfernen und können im Anschluss die Domäne auch aktivieren.

 

Im nächsten Schritt können wir dann das Datenelement kopieren. Ziel ist wieder das gleiche Paket, wie auch unsere Domäne.

 

In diesem Fall erhalten wir eine etwas kryptische Fehlermeldung. Dazu müssen wir erst die zusätzlichen Attribute aufklappen und finden dort den Parameter. Dieses Attribut wird in der GUI Entwicklung eingesetzt, um Felder auf einem Bild vorzubelegen, wenn entsprechende Usereinstellungen vorhanden sind.

 

Nach dem Löschen des Parameters, können wir nun die Domäne gegen unsere Eigene austauschen und das Datenelement aktivieren.

 

Nutzung

Die Datenelemente können dann wie gewohnt genutzt werden. Du solltest allerdings beachten, dass mit der zweiten Variante das Datenelement nur in der SWC nutzbar ist. In der ersten Variante erzeugen wir einen C1-Contract und können das Element in jeder Software Komponente nutzen. Da das Objekt allerdings TIER-2 ist, empfehlen wir dann eher die zweite Variante mit Contract, damit ist das Element dann auch nutzbar und wir haben keine technischen Schulden im System.

TYPES: BEGIN OF ts_data_element,
         companycode   TYPE I_CompanyCode-CompanyCode,
         rcomp_release TYPE zfi_rcomp_released,
         rcomp_dtel    TYPE zfi_rcomp_dtel,
       END OF ts_data_element.
TYPES tt_data_element TYPE STANDARD TABLE OF ts_data_element WITH EMPTY KEY.

 

Mehr Datenelemente

SAP arbeitet im Moment an mehreren größeren Hinweisen, um ca. 24000+ Datenelemente für die Entwicklung in ABAP Cloud freizugeben. Das Feedback der Kunden und Entwickler war entsprechend groß, dass mehr Standardelemente benötigt werden, um einfach mit ABAP Cloud arbeiten zu können.

Der Sammelhinweis 3470426 wurde am 05.09. 2024 für alle Kunden freigegeben. Grundsätzlich werden die Freigaben in den Releases SAP S/4HANA Cloud Private Edition 2025 und 2023 FPS2 verfügbar. Über das Cloudification Repository könnt ihr die freigegebenen Datenelemente ebenfalls finden.

 

Hinweis: Du solltest allerdings auch berücksichtigen, dass jedes Standard-Datenelement eine Abhängigkeit zum SAP Standard darstellt. Viele Partner haben im Moment Probleme bei der Umstellung ihrer Lösungen, da viele davon auf Standardelementen basieren, die nun nicht mehr freigegeben sind oder teilweise auch von SAP gelöscht werden.

 

Vollständiges Beispiel

Die vollständige ausführbare Klasse findest du hier, die Daten stammen von einem Cloud Appliance Library System. Die Datenelemente stellen wir in diesem Fall nicht zur Verfügung, du kannst dir diese aber anhand der oberen Beispiele ableiten.

CLASS zcl_bs_demo_data_types DEFINITION
  PUBLIC FINAL
  CREATE PUBLIC.

  PUBLIC SECTION.
    INTERFACES if_oo_adt_classrun.

    TYPES td_company_text TYPE I_CompanyCode-CompanyCodeName.

    TYPES: BEGIN OF ts_data,
             companycode TYPE I_CompanyCode-CompanyCode,
             text_direct TYPE I_CompanyCode-CompanyCodeName,
             text_type   TYPE td_company_text,
           END OF ts_data.
    TYPES tt_data TYPE STANDARD TABLE OF ts_data WITH EMPTY KEY.

    TYPES: BEGIN OF ts_data_element,
             companycode   TYPE I_CompanyCode-CompanyCode,
             rcomp_release TYPE zfi_rcomp_released,
             rcomp_dtel    TYPE zfi_rcomp_dtel,
           END OF ts_data_element.
    TYPES tt_data_element TYPE STANDARD TABLE OF ts_data_element WITH EMPTY KEY.

    METHODS get_company_name
      RETURNING VALUE(rd_result) TYPE td_company_text.
ENDCLASS.


CLASS zcl_bs_demo_data_types IMPLEMENTATION.
  METHOD if_oo_adt_classrun~main.
    DATA lt_withtype TYPE tt_data.
    DATA lt_element  TYPE tt_data_element.

    SELECT FROM I_CompanyCode
      FIELDS CompanyCode,
             CompanyCodeName AS text_direct,
             CompanyCodeName AS text_type
      INTO TABLE @lt_withtype
      UP TO 10 ROWS.

    out->write( `With type:` ).
    out->write( lt_withtype ).

    SELECT FROM I_CompanyCode
      FIELDS CompanyCode,
             CompanyCodeName AS text_direct,
             CompanyCodeName AS text_type
      INTO TABLE @DATA(lt_inline)
      UP TO 10 ROWS.

    out->write( `Inline declaration:` ).
    out->write( lt_inline ).

    SELECT FROM I_CompanyCode
      FIELDS CompanyCode,
             Company     AS rcomp_release,
             Company     AS rcomp_dtel
      INTO TABLE @lt_element
      UP TO 10 ROWS.

    out->write( `Data elements:` ).
    out->write( lt_element ).
  ENDMETHOD.


  METHOD get_company_name.
    SELECT SINGLE FROM I_CompanyCode
      FIELDS CompanyCodeName
      INTO @rd_result.
  ENDMETHOD.
ENDCLASS.

 

Fazit

Die Verwendung von Datentypen aus dem Standard ist nicht mehr so einfach möglich, allerdings gibt es verschiedene Möglichkeiten an die Typisierungen zu kommen. Bei der Entwicklung solltest du schauen, wo du die Elemente überall einsetzen möchtest und findest dann die spezifische Lösung. Wenn du auf saubere Software Komponenten baust, solltest du allerdings auch die Abhängigkeiten zum Standard klein halten.


Enthaltene Themen:
ABAP CloudABAPDatentypenDatenelemente
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 Cloud - Key User Apps

Kategorie - ABAP

Die Key User Extensibility ist ein Teil von ABAP Cloud, wenn es um die Erweiterung des Core geht, doch wie kannst du die Werkzeuge sinnvoll nutzen und wie ergänzen sie sich?

11.10.2024

ABAP Cloud - JSON Konvertierung

Kategorie - ABAP

Gibt es eine neue API zur Konvertierung von JSON und benötigst du diese für ABAP Cloud? Hier beleuchten wir einmal den Aufbau und die Konvertierung von JSON.

27.09.2024

ABAP Cloud - Nummernkreise

Kategorie - ABAP

Wie kannst du Nummernkreise in ABAP Cloud verwenden und macht dies eigentlich noch Sinn? In diesem Artikel schauen wir uns ein paar Hintergründe dazu an.

13.09.2024

ABAP Cloud - Deprecation Flow

Kategorie - ABAP

Welche Hilfemittel stehen dir in ABAP Cloud zur Verfügung, um Objekte freizugeben oder auch auf veraltet zu setzen? Schauen wir uns einmal die Details an.

23.08.2024

ABAP Cloud - Übersetzung

Kategorie - ABAP

Wie werden Anwendungen und Texte in ABAP Cloud übersetzt? Hier eine Zusammenfassung und Übersicht über die Möglichkeiten.

16.08.2024