Dirty Assign

Mit einem “Dirty Assign” kann man auf Daten zugreifen, auf die man eigentlich keinen Zugriff hat…

Mit dem “Dirty Assign” haben Sie die Möglichkeit, auf Variablen und Strukturen von rufenden Programmen zuzugreifen, die nicht zur Verfügung stehen.

Dies macht eventuell dann Sinn, wenn Sie einen Funktionsbaustein aufrufen und innerhalb dieses Funktionsbausteins eine Variable verwendet wird, die aber nicht als Exporting-Parameter zurückgegeben wird.

Sie können so auch in einem per externem PERFORM aufgerufenen Routine auf Variablen des gerufenen Programms zugreifen.

Soll auf eine Tabelle zugegriffen werden, so beachten Sie bitte das Beispiel unten im Artikel.

Das folgende Beispiel soll dies verdeutlichen.

  1. Als erstes wird ein Funktionsbaustein ausgeführt, der lediglich eine nur in der Funktionsgruppe bekannte Variable setzt. Diese wird durch den Dirty Assign ermittelt.
  2. Danach wird eine externe Routine aufgerufen, die auch nur eine — nur in diesem Programm bekannte — Variable setzt.

Funktionsbaustein ZTEST

FUNCTION ZTEST.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"----------------------------------------------------------------------
* Der Funktionsbaustein befindet sich in der Gruppe ZTESTFG
* Das Rahmenprogramm heisst deswegen: SAPLZTESTFG
*-----------------------------------------------------------------------

  fb_testvar = 'Trick17'.

ENDFUNCTION.

Programm ZZENNO13

*&---------------------------------------------------------------------*
*& Report  ZZENNO13                                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
REPORT  zzenno13.

DATA testvar(12).

START-OF-SELECTION.

  PERFORM test.
  WRITE: / testvar.

*---------------------------------------------------------------------*
*       FORM test                                                     *
*---------------------------------------------------------------------*
FORM test.
  testvar = 'Tricktresor'.
ENDFORM.

Der Dirty Assign

REPORT zzenno12 NO STANDARD PAGE HEADING.

*-- Das Feldsymbol, dem der Wert zugewiesen wird
FIELD-SYMBOLS: <ptr>.

START-OF-SELECTION.

*-- Aufruf des Funktionsbausteins
*-- Hier wird die Variable FB_VARIABLE_GLOBAL gesetzt
  CALL FUNCTION 'ZTEST'.
*-- Den Wert zuweisen (Funktionsgruppe ZTESTFG)
  ASSIGN ('(SAPLZTESTFG)FB_TESTVAR') TO <ptr>.
*-- und ausgeben
  WRITE: / 'Wert der Funktionsbaustein-Variablen FB_TESTVAR:',
         AT 50 <ptr>.

*-- Aufruf eines externen Programms:
*-- Hier wird die Variable TESTVAR verwendet.
  PERFORM test(zzenno13).
*-- Nun die Feldwerte ermitteln:
  ASSIGN ('(ZZENNO13)TESTVAR') TO <ptr>.
*-- und ausgeben
  WRITE: / 'Wert der Submit-Variablen TESTVAR:', AT 50 <ptr>.

Ausgabe

Wert der Funktionsbaustein-Variablen FB_TESTVAR: Trick17
Wert der Submit-Variablen TESTVAR:               Tricktresor 

Dirty Assign mit Tabelle

Um auf einen Tabellenkörper mittels der ASSIGN-Technik zuzugreifen, sind die folgenden Schritte notwendig:

1. Definition des Arbeitsbereiches

DATA ls_xvbap TYPE vbapvb.

2. Definition des Feldsymbols

FIELD-SYMBOLS <XVBAP> TYPE ANY TABLE.

3. Der Dirty Assign

ASSIGN ('(SAPMV45A)XVBAP[]') TO <xvbap>.

4. Zuweisung der Tabelle

LOOP AT <xvbap> INTO ls_xvbap.
...
ENDLOOP.
Enno Wulff

Leave a Comment