Ansicht
Dokumentation

RS_TABL_PUT - DD: Schnittstelle zum Schreiben einer Tabelle ins ABAP/4 Dictionary

RS_TABL_PUT - DD: Schnittstelle zum Schreiben einer Tabelle ins ABAP/4 Dictionary

TXBHW - Original Tax Base Amount in Local Currency   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Mit diesem Funktionsbaustein können die Sourcen einer Tabelle in das ABAP Dictionary geschrieben werden. Die Tabelle wird dabei in neuer bzw. überarbeiteter Version weggeschrieben. Eine eventuell vorhandene aktive Version der Tabelle bleibt dagegen unberührt.

Vor dem Schreiben der Tabelle wird zunächst geprüft, ob die Aktion für das genannte Objekt zulässig ist. Ist dies nicht der Fall, etwa weil der gewählte Name gegen die Namenskonventionen verstößt, oder weil das Objekt mit dem Namen eines anderen ABAP/4 Dictionary Objekts kollidiert, so wird die Ausnahme PUT_REFUSED ausgelöst. In diesem Fall findet sich in den Systemvariablen eine Nachricht, die den Grund für die Zurückweisung genauer beschreibt.

Sollen nur einzelne Teile (z.B. die Felder) der Tabelle verändert werden, so sollten auch nur die entsprechenden Parameter des Funktionsbausteins versorgt werden. Dabei bedeutet "versorgt" im Fall der IMPORT-Parameter (DD02V_WA, DD09L_WA), daß im Feld TABNAME ein von SPACE abweichender Wert übergeben wird. Bei den TABLES-Parametern (DD03P_TAB, DD05M_TAB, DD08V_TAB, DD35V_TAB, DD36M_TAB) dagegen bedeutet "versorgt", daß sie beim Aufruf überhaupt genannt werden.
Achtung: Ein TABLES-Parameter gilt also auch als versorgt, wenn ihm eine Tabelle ohne Zeilen übergeben wird. Die Wirkung ist also in diesem Fall völlig anders als das Nichtaufführen dieses Parameters beim Aufruf.

Im Einzelnen sind die folgenden Konstellationen (oder Kombinationen davon) möglich:

  1. Die Tabelle soll völlig überarbeitet oder neu definiert werden:
    In diesem Fall sollten alle Parameter versorgt werden. Handelt es sich allerdings um eine Struktur, so sollten die Technischen Einstellungen (DD09L_WA) nicht versorgt werden.
  2. Der Header soll verändert werden:
    In diesem Fall ist DD02V_WA zu versorgen. Ist DD02V_WA nicht versorgt und befindet sich die Tabelle noch nicht im ABAP Dictionary, so wird die Ausnahme TABL_NOT_FOUND ausgelöst.
  3. Die Felder sollen verändert werden:
    In diesem Fall ist DD03P_TAB zu versorgen. Dabei werden die Felder in ihrer durch POSITION gegebenen Reihenfolge abgelegt. Taucht ein POSITION-Eintrag mehrfach auf, so wird die Ausnahme TABL_INCONSISTENT ausgelöst. Dabei sind im Feld POSITION nur positive Einträge erlaubt.
    Zu beachten ist auch, daß durch das Schreiben der Felder Änderungen an den Fremdschlüsseln der Tabelle entstehen können. Dies geschieht dann, wenn bei einem Feld der Eintrag von CHECKTABLE verändert wird. Wenn also nicht gesichert ist, daß im Feld CHECKTABLE keine Änderungen erfolgen, so sollten auch die Fremdschlüssel der Tabelle neu geschrieben werden (siehe 4.). Analog können durch das Schreiben der Felder auch Änderungen an den Suchhilfeanbindungen der Tabelle entstehen, nämlich wenn bei einem Feld der Eintrag von SHLPORIGIN verändert wird (siehe 5.).
    Ist DD03P_TAB versorgt aber leer und können zu der Tabelle auch keine aktiven Append-Strukturen gefunden werden, so wird die Ausnahme TABL_INCONSISTENT ausgelöst.
  4. Es sollen Fremdschlüssel verändert werden:
    In diesem Fall sind DD08V_TAB (Fremdschlüsselheader) und DD05M_TAB (Fremdschlüsselfelder) zu versorgen. Wird nur einer dieser Parameter versorgt, so wird die Ausnahme TABL_INCONSISTENT ausgelöst.
    Hierbei sind aufzuführen:
    1. Alle Fremdschlüssel mit Prüffeldern, die direkt in der Tabelle liegen.
    2. Fremdschlüssel, die nicht automatisch von einer inkludierten Struktur übernommen werden sollen. Diese müssen kenntlich gemacht werden, indem das Feld NOINHERIT den Wert 'Y' hat. Hierbei gibt es wieder zwei Fälle: (i) Ein inkludiertes Feld soll nicht Prüffeld sein, auch wenn das Feld in der inkludierten Struktur Prüffeld ist. In diesem Fall muß in der DD08V_TAB das Feld CHECKTABLE den Wert '*' bekommen. (ii) Ein inkludiertes Feld soll Prüffeld einer bestimmten Fremdschlüsselbeziehung sein, auch wenn die Fremdschlüsseldefinition für dieses Feld in der inkludierten Struktur eine andere ist. In diesem Fall muß CHECKTABLE den korrekten Wert bekommen.
    3. Fremdschlüssel, deren Feldzuordnung automatisch von einer inkludierten Unterstruktur übernommen werden sollen, deren sonstige Eigenschaften (Text, Wirkung auf dem Dynpro, semantische Eigenschaften) aber tabellenspezifisch geregelt werden sollen. Diese müssen kenntlich gemacht werden, indem das Feld NOINHERIT den Wert 'N' hat.
      In den Fällen a)und b)(ii) sind dann noch die Fremdschlüsselfelder zu diesem Fremdschlüssel in DD05M_TAB zu übergeben.
      An inkludierte Felder, die in der inkludierten Struktur Prüffeld einer Fremdschlüsselbeziehung sind, und für die kein Eintrag gemäß b) oder c) mitgegeben wird, wird automatisch eine Fremdschlüsselbeziehung gehängt. Deren Feldzuordnung wird dabei von der Fremdschlüsselbeziehung der inkludierten Struktur übernommen. Die übrigen Eigenschaften werden dagegen von einer eventuell existierenden aktiven Version der Tabelle selbst übernommen (falls das Feld dort ebenfalls Prüffeld ist). Nur wenn das nicht möglich ist, werden diese Eigenschaften ebenfalls von der Fremdschlüsseldefinition bei der inkludierten Tabelle übernommen.
  5. Die Suchhilfeanbindungen der Tabelle sollen verändert werden:
    In diesem Fall sind DD35V_TAB (Suchhilfeanbindungsheader) und DD36M_TAB (Suchhilfeanbindungsparameterzuordnungen) zu versorgen. Wird nur einer dieser Parameter versorgt, so wird die Ausnahme TABL_INCONSISTENT ausgelöst.
  6. Die Technischen Einstellungen der Tabelle sollen verändert werden:
    Der Parameter DD09L_WA sollte versorgt werden.

Beispiel

Die transparente Tabelle TEST befindet sich im aktiven Zustand im ABAP Dictionary. Ihr einziges Feld ist das Schlüsselfeld F1, das auf das Datenelement CHAR1 zeigt. Nun soll zu der Tabelle noch das Datenfeld F2 mit Datenelement CHAR2 hinzugefügt werden. Dazu dient das folgende Coding:

DATA DD03P_TAB LIKE DD03P OCCURS 2 WITH HEADER LINE.
DD03P_TAB-TABNAME = 'TEST'. DD03P_TAB-FIELDNAME = 'F1'.
DD03P_TAB-POSITION = '1'. DD03P_TAB-KEYFLAG = 'X'.
DD03P_TAB-ROLLNAME = 'CHAR1'. APPEND DD03P_TAB.
DD03P_TAB-TABNAME = 'TEST'. DD03P_TAB-FIELDNAME = 'F2'.
DD03P_TAB-POSITION = '2'. DD03P_TAB-KEYFLAG = ' '.
DD03P_TAB-ROLLNAME = 'CHAR2'. APPEND DD03P_TAB.
COMMIT WORK.
CALL FUNCTION 'DDIF_TABL_PUT'
EXPORTING
NAME = 'TEST'
TABLES
DD03P_TAB = DD03P_TAB
EXCEPTIONS
PUT_FAILURE = 01
OTHERS = 02.
IF SY-SUBRC = 1.
ROLLBACK WORK.
ENDIF.
IF SY-SUBRC = 0.
COMMIT WORK.
WRITE / 'Tabelle TEST ist jetzt überarbeitet mit zwei Feldern.'.
WRITE / 'Die aktive Version ist unverändert.'.
ELSE.
WRITE / 'Tabelle TEST ist weiter aktiv im alten Zustand.'.
ENDIF.

Hinweise

  1. Dieser Funktionsbaustein führt keine Berechtigungsprüfung durch und schreibt auch keinen TADIR- oder Korrektureintrag.
  2. Falls die Schreibeoperation mißlingt, wird die Ausnahme PUT_FAILURE ausgelöst. In diesem Fall kann ein Teil der Sourcen bereits geschrieben sein. Es sollte daher in diesem Fall zu geeignetem Zeitpunkt ein ROLLBACK durchgeführt werden.
  3. Der Baustein führt keine COMMITs oder ROLLBACKs aus. Nach erfolgreichem Schreiben sollte daher der Aufrufer ein COMMIT ausführen.
  4. Ist ein Parameter versorgt, hat aber in einer Zeile im Feld TABNAME einen von NAME abweichenden Wert, so wird die Ausnahme NAME_INCONSISTENT ausgelöst.
  5. Falls DD05M_TAB und DD08V_TAB versorgt sind, führen folgende Fälle zur Ausnahme TABL_INCONSISTENT:
    1. Fremdschlüsselfelder ohne Fremdschlüsselheader
    2. DD08V_TAB-NOINHERIT NA 'YN' für Prüffelder, die inkludiert sind
    3. Prüftabelle im Fremdschlüsselfeld anders definiert als im zugehörigen Fremdschlüsselheader
  6. Falls Fremdschlüssel geschrieben werden sollen, aber keine Felder, so führt das dazu, daß die neuesten Felder der Tabelle intern gelesen und eventuell mit veränderten CHECKTABLE-Einträgen wieder geschrieben werden müssen. Sind dem Aufrufer die Felder also korrekt bekannt und hat sich tatsächlich für mindestens ein Feld die Prüftabelle geändert, so ist es Performance-günstiger, DD03P_TAB ebenfalls zu versorgen.
  7. Mit diesem Baustein wird das Schreiben von Indizes zur Tabelle nicht unterstützt. Dazu können Sie den Funktionsbaustein DDIF_INDX_PUT verwenden.
  8. Die überarbeitet (bzw. neu) weggeschriebene Version der Tabelle kann durch Aufruf des Funktionsbausteins DDIF_TABL_ACTIVATE aktiviert werden.
  9. Die oben beschriebene Spezifikation bei der Behandlung von Fremdschlüsseln von inkludierten Feldern wird eventuell noch verändert. Rückfragen zu diesem Thema an die ABAP Dictionary Gruppe sind willkommen.
  10. Werden in der Tabelle DD03P_TAB Komponenten, die durch eine Referenz auf einen eingebauten Dictionary-Typ typisiert sind, mitgegeben (DD03P_TAB-COMPTYPE = 'R'), dann muß das Feld DD03P_TAB-REFTYPE mit 'B' (build-in-type) belegt werden. In diesem Fall kann auch ein Text (DD03P_TAB-DDTEXT) für die Komponente angegeben werden.

Weiterführende Informationen





Parameter

DD02T_TAB
DD02V_WA
DD03P_TAB
DD03T_TAB
DD05M_TAB
DD08V_TAB
DD09L_WA
DD35V_TAB
DD36M_TAB
NAME

Ausnahmen

NAME_INCONSISTENT
PUT_FAILURE
PUT_REFUSED
TABL_INCONSISTENT
TABL_NOT_FOUND
UNSPECIFIED

Funktionsgruppe

RSDS_SERVICES

RFUMSV00 - Advance Return for Tax on Sales/Purchases   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 11440 Date: 20240523 Time: 110913     sap01-206 ( 209 ms )