Zugriff auf Variableninhalte übergeordneter Programme (Dirty Assign)

Aus SAP-Wiki
Zur Navigation springenZur Suche springen

Siehe Dynamische/Generische Programmierung.

Siehe Kategorie: Dynamische/Generische Programmierung.

Manchmal gibt den Fall, dass in einer Programmierungseinheit kein Zugriff mehr besteht auf ein anderes Programm/Methode/Funktionsbaustein besteht, was vorher während der Laufzeit durchlaufen wurde. Die Variablen stehen allerdings normal in der nachfolgenden 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. 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.

Kein Zugriff auf lokale Variablen

  • Es ist zu beachten, dass nur globale Variablen ausgelesen werden können. Wenn z. B. das vorgelagerte Programm eine Methode ist und in dieser Methode eine lokale Variable gefüllt wurde, ist diese nach dem Verlassen der Methode nicht mehr gefüllt und kann auch durch ein Dirty-Assign nicht mehr mit ihrem in der Methode gefüllten Inhalt abgefragt werden.

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.

Web-Links

Literatur