Aufruf von anderen Programmen & Übergabe von Parametern ................................................ 1 Parameterübergabe an ein aufgerufenes Programm ............................................................... 2 Über Parameter in Selektionsbildern.................................................................................. 2 Programmaufruf mit Angabe von Parametern ............................................................... 2 Programmaufruf mit Selektionsbild ............................................................................... 3 Get- /Set-Parameter ............................................................................................................ 3 Übergabe über den ABAP-Memory ................................................................................... 3 SAP-Memory vs. ABAP-Memory ......................................................................................... 5 Weitere Übergabemechanismen ......................................................................................... 6 Aufruf von anderen Programmen & Übergabe von Parametern Vorbereitung: Programm anlegen, das aufgerufen werden kann REPORT Z80304_AUFRUFPROGRAMM. WRITE 'Ich bin das Programm'. Programm speichern & aktivieren!!! (Es kann nur die aktive Fassung eines Programms aufgerufen werden) Aufruf eines Programms SUBMIT programmname. Abarbeitung des aktuellen Programms wird exakt an dieser Stelle beendet und es wird mit der Abarbeitung des aufgerufenen Programms begonnen. (Nach der Abarbeitung des aufgerufenen Programms erfolgt KEIN Rücksprung zur Aufrufstelle, sondern die komplette Abarbeitung wird beendet) SUBMIT programmname AND RETURN. wie oben, aber nach der Abarbeitung des aufgerufenen Programms wird zur Aufrufstelle zurückgekehrt und die Abarbeitung dort fortgesetzt Beispiel 1: REPORT Z80304_PROGRAMMAUFRUF. 1 WRITE 'vor dem submit'. 2 SUBMIT Z80304_AUFRUFPROGRAMM. 3 WRITE 'nach dem submit'. Ausgabe: Grund: 1 „vor dem submit“ wird in dem Listenpuffer geschrieben und für die Ausgabe vorgemerkt. (Liste wird nach der letzten Programmanweisung, d.h. nach 3 angezeigt) Jedes Programm hat seinen eigenen Listenpuffer! 2 „Z80304_AUFRUFPROGRAMM“ wird aufgerufen, alle Ausgaben werden in den Listenpuffer von Z80304_AUFRUFPROGRAMM geschrieben und nach Beendigung von Z80304_AUFRUFPROGRAMM wird die Liste angezeigt (Ausgabe: nur writeAnweisung aus Z80304_AUFRUFPROGRAMM) 3 Wird NIE erreicht, da KEIN Rücksprung zur Aufrufstelle realisiert wird. rufendes Programm wird NICHT korrekt beendet KEINE Ausgabe (Anzeige) der Liste Beispiel 2: REPORT Z80304_PROGRAMMAUFRUF. 1 WRITE 'vor dem submit'. 2 SUBMIT Z80304_AUFRUFPROGRAMM AND RETURN. 3 WRITE 'nach dem submit'. Ausgabe: „vor dem submit“ wird in Listenpuffer des rufenden Programms geschrieben Z80304_AUFRUFPROGRAMM wird aufgerufen und ein neuer Listenpuffer erzeugt (alle Ausgaben aus Z80304_AUFRUFPROGRAMM werden in diesem Puffer realisiert) Nach Beendigung von Z80304_AUFRUFPROGRAMM wird der Listenpuffer ausgegeben und zurück zum rufenden Programm gesprungen „nach dem submit“ wird in den Listenpuffer des rufenden Programms geschrieben und danach wird der Listenpuffer angezeigt (Ausgabe aus 1 und 2) 1 2 3 Parameterübergabe an ein aufgerufenes Programm Über Parameter in Selektionsbildern REPORT Z80304_AUFRUFPROGRAMM. PARAMETER a TYPE i. WRITE 'Ich bin das aufgerufene Programm'. WRITE: /'a= ',a. bei direkter Ausführung: Selektionsbild zur Eingabe von a erscheint nach dem Erfassen eines Wertes für a erscheint die Listenausgabe bei Aufruf über SUBMIT wenn ein Programm mit SUBMIT aufgerufen wird, erscheint nach dem Programmaufruf KEIN Selektionsbild, sondern alle Variablen werden mit ihren Standardwerten belegt Es besteht KEINE Möglichkeit einen Wert für a zu erfassen und es wird „a = 0“ ausgegeben Programmaufruf mit Angabe von Parametern SUBMIT programmname [AND RETURN] WITH parameter1 = wert1 … Falls der Parameter im aufgerufenen Programm definiert ist, dann wird ihm der angegebene Wert zugewiesen, falls der angegebene Parameter nicht definiert ist, wird die Angabe ignoriert. z.B. REPORT Z80304_PROGRAMMAUFRUF. WRITE 'vor dem submit'. SUBMIT Z80304_AUFRUFPROGRAMM WITH a = 5. WRITE 'nach dem submit'. Ausgabe: Variable a wird im aufgerufenen Programm auf 5 gesetzt Programmaufruf mit Selektionsbild SUBMIT programmname [AND RETURN] VIA SELECTION-SCREEN. Problem: Selektionsbild wird beim Aufruf UND beim Rücksprung erneut angezeigt Get- /Set-Parameter SET PARAMETER ID ‘Meine ID’ FIELD variable. Der Wert der angegebenen Variablen wird im SAP-Memory unter der angegeben ID abgelegt ID ist frei wählbar, maximale Länge von 20 Zeichen, darf nicht nur aus Leerzeichen bestehen Variable: nur einfache Datentypen erlaubt, die beim speichern in zeichenartige Daten (c) konvertiert werden Falls unter der ID bereits ein Wert hinterlegt ist, wird dieser überschrieben Lesen eines Parameters GET PARAMETER ID ’Meine ID’ FIELD variable. Der Wert im SAP-Memory unter der angegbenen ID hinterlegte Wert wird in die angegebene Variable geschrieben Vaiable muss ein zeichenartiger Datentyp sein (sonst Fehler beim Syntaxcheck) Falls unter der angegebenen ID kein Wert hinterlegt war, dann behällt die Variable ihren alten Wert. Es sollte in jedem Fall nach dem Lesen mit GET der returncode ausgewertet werden. (0 = erfolgreich, 4 = kein Wert gelesen) Übergabe über den ABAP-Memory Programm 1 REPORT Z80304_PROGRAMMAUFRUF. PARAMETER a TYPE i VALUE 5. EXPORT a TO MEMORY ID 'meine_ID'. SUBMIT Z80304_AUFRUFPROGRAMM. Variable deren Inhalt gespeichert werden soll (beliebige Datentypen, d.h. auch Strukturen/Objekte erlaubt) Frei wählbare ID, mit max. 60 Zeichen (darf nicht nur aus Leerzeichen bestehen) Inhalt der Variablen wird unter der angegebenen ID im ABAP-Memory abgelegt REPORT Z80304_AUFRUFPROGRAMM. DATA a TYPE i. IMPORT a FROM MEMORY ID 'meine_ID'. Name & Datentyp muss mit der Variable übereinstimmen, die mit EXPORT gespeichert wurde ID unter der die Variable gespeichert wurde Falls der Inhalt der Variablen unter der angegebenen ID hinterlegt wurde, wird der Wert zurück in die Variable geschrieben Returncode: 0 = Wert erfolgreich übertragen 4 = Kein Wert hinterlegt, d.h. nichts gelesen SAP-Memory vs. ABAP-Memory Nutzersession, d.h. ein über eine SAP-GUI angemeldeter Nutzer Externer Modus 1 Externer Modus 2 Interner Modus 1 Interner Modus 1 z.B. SE80 lokale Variablen Listenpuffer z.B. SE80 lokale Variablen Listenpuffer A B A P Daten M E M O R IMPORT/EXPORT Y Interner Modus 2 z.B. Programm wird aufgerufen lokale Variablen Listenpuffer Interner Modus 3 z.B. Aufruf mit SUBMIT... Interner Modus 2 z.B. Programm wird aufgerufen lokale Variablen Listenpuffer Interner Modus 3 z.B. Aufruf mit SUBMIT... lokale Variablen lokale Variablen Listenpuffer Listenpuffer Daten GET/SET SAP–MEMORY REPORT Z80304_PROGRAMMAUFRUF. DATA: zeile TYPE scarr, id TYPE c LENGTH 10, name TYPE c LENGTH 10. SELECT SINGLE * INTO zeile FROM scarr WHERE carrid = 'LH'. id = zeile-carrid. name = zeile-carrname. EXPORT zeile TO MEMORY ID 'ID_zeile'. ABAP-Memory SET PARAMETER ID 'ID_id' FIELD id. SET PARAMETER ID 'ID_name' FIELD name. SAP-Memory SUBMIT Z80304_AUFRUFPROGRAMM. REPORT Z80304_AUFRUFPROGRAMM. DATA: zeile TYPE scarr, id TYPE c LENGTH 10, name TYPE c LENGTH 10. IMPORT zeile FROM MEMORY ID 'ID_zeile'. IF sy-subrc <> 0. write 'Fehler bei Import'. ENDIF. GET PARAMETER ID 'ID_id' FIELD id. IF sy-subrc <> 0. write 'Fehler bei GET id'. ENDIF. GET PARAMETER ID 'ID_name' FIELD name. IF sy-subrc <> 0. write 'Fehler bei GET name'. ENDIF. write: /'ABAP ', zeile-carrid, zeile-carrname. write: /'SAP ', id, name. A B A P Daten M E M O R Y ..... Aktion Z80304_ PROGRAMMAUFRUF starten Über SUBMIT wird Z80304_AUFRUFPROGRAMM aufgerufen Zugriff auf ABAP-Memory (Export/Import) Zugriff möglich X Zugriff auf SAP-Memory (Get/Set) Zugriff möglich XXX Z80304_ PROGRAMMAUFRUF Zugriff möglich X starten ABAP-Memory ist für eine Danach: komplette Nutzersession Z80304_AUFRUFPROGRAMM im aktiv gleichen Modus starten Im gleichen Modus kann jederzeit darauf zugegriffen werden Zugriff möglich XXX Z80304_ PROGRAMMAUFRUF KEIN Zugriff möglich XX starten ABAP-Memory ist an den Danach: Modus gebunden, d.h. in Z80304_AUFRUFPROGRAMM einem anderen Modus In einemeigenem externen (Fenster) sind die Daten Modus (in dem vorher nicht verfügbar, da der noch NICHT Z80304_ zweite Modus einem eigenen PROGRAMMAUFRUF ABAP-Memory besitzt ausgeführt wurde) Zugriff möglich XXX SAP-Memory gilt für alle Modi innerhalb einer Nuzersession, d.h. jedes Programm, kann aus jedem Modus heraus darauf zugreifen Z80304_ PROGRAMMAUFRUF starten Komplett abmelden (alle Modi schliessen) & neu anmelden Z80304_AUFRUFPROGRAMM ausführen KEIN Zugriff möglich XXX SAP-Memory ist Sessionbezogen, d.h. er wird bei der Abmeldung des Nutzers vom System gelöscht KEIN Zugriff möglich XX ABAP-Memory ist Sessionbezogen, d.h. wird in jeden Fall bei der Abmeldung des Nutzers gelöscht Weitere Übergabemechanismen Datenbanktabellen, d.h. ein Programm speichert Daten in einer DB-Tabelle ab und ein anderes Programm kann diese zu einem späteren Zeitpunkt auslesen und verarbeiten. o Sessionübergreifend o Mandantenübergreifend Dateisystem, d.h. ein Programm speichert Daten in einer lokalen Datei ab und ein anderes Programm kann die Daten lesen und weiterverarbeiten o Sessionübergreifend o Mandantenübergreifend o Systemübergreifend