Zugriff auf Variableninhalte übergeordneter Programme (Dirty Assign)

Aus SAP-Wiki
Wechseln zu:Navigation, Suche

Siehe Dynamische/Generische Programmierung.

Manchmal gibt den Fall, dass in einer Programmierungseinheit kein Zugriff mehr besteht auf ein anderes Programm/Methode/Funktionsbaustein besteht, was während der Laufzeit vorher durchlaufen wurde. Die Variablen stehen allerdings normal in der Programmeinheit nicht mehr zur Verfügung.

Diese Konstellation gibt es regelmäßig in User-Exits, wo die Schnittstelle des User-Exits die benötigte Variable nicht bereitstellt, die in dem User-Exit von Interesse ist. Hier kann ein sogenannter "Dirty-Assign" vorgenommen werden.

Ein anderer Anwendungsfall ist im Formular (Adobe Forms, Smart Forms oder SAPscript), wo man auf Variablen vom Standarddruckprogramm zugreifen möchte und diese Variablen dem Formular nicht übergeben kann.

Dirty Assign bei Strukturen

Field-Symbols: <fs_kna1> type kna1.

assign ('(EXTERNER_PROGRAMMNAME)ykna1') to <fs_kna1>. 
  • Im Field-Symbol <fs_kna1> steht nun der Variableninhalt von der Variablen YKNA1, die im Programm EXTERNER_PROGRAMMNAME gefüllt wurde.
  • Der Dirty-Assign-Befehl ist von SAP nicht offiziell freigegeben, aber er funktioniert. Man kann davon ausgehen, dass er auch weiterhin funktionieren wird.

Dirty Assign beim Select-Options

  • Es ist sogar möglich auf Select-Options eines vorgelagerten Programms zuzugreifen. Allerdings muss man hier beachten nur den Tabellenrumpf von der Select-Options-Tabelle anzusprechen ( []-Befehl ). Ansonsten gibt es einen Typkonflikt, wenn man die Select-Options-Tabelle in einen Range-Tabelle ohne Kopfzeile übertragen will.
 types: tyr_vbeln type range of VBELN.

 Field-Symbols: <fs_table> type tyr_vbeln.

"durch [] wird der Tabellenrumpf der Tabelle vom Select-Options angesprochen
 assign ('(/XXX/SD_DRUCKTRANS)S_LFRGN[]') to <fs_table>.

Hauptprogramm und Include

  • Bei der Angabe des Programmnamens ist das Hauptprogramm entscheidend, nicht in welchem Include das Coding gespeichert ist.

Globale und lokale Variablen

  • Man hat bei einem durchlaufenen Programm nur noch Zugriff auf die globalen Variablen dieses Programms (z. B. Druckprogramm). Lokale Variablen werden bei Verlassen des Programms gelöscht und stehen auch mit einem Dirty Assign nicht mehr zur Verfügung.

Web-Links

Literatur