Die Anweisung SUBMIT ruft ein
ausführbares Programm auf. Das ausführbare Programm wird wie unter
Ablauf eines ausführbaren Programms beschrieben
ausgeführt. Falls das aufgerufene Programm einen Syntaxfehler enthält, kommt es zu einer unbehandelbaren Ausnahme. Der
Name des aufgerufenen Programms kann wie folgt angegeben werden:
rep
Direkte statische Angabe als rep.
(name)
Angabe als Inhalt eines eingeklammerten flachen zeichenartigen Datenobjekts name.
Das Datenobjekt name muss den Namen des aufzurufenden Programms in Großbuchstaben
enthalten. Es können folgende Angaben für name unterschieden werden:
Literal oder Konstante
Wenn das Datenobjekt name als Textfeldliteral
oder als Konstante angegeben ist, kann es statisch ausgewertet werden und das aufgerufene Programm wird als verwendetes Objekt erkannt.
Variable
Wenn das Datenobjekt name als Variable angegeben ist, ist dies eine rein dynamische Angabe und es findet keine statische Auswertung des Inhalts statt.
Bei Ausführung der Anweisung wird name in beiden Fällen erst
zur Laufzeit ausgewertet. Falls das in name angegebene Programm nicht gefunden wird, kommt es zu einer unbehandelbaren Ausnahme.
Die Zusätze haben folgende Bedeutung:
Mit den Zusätzen selscreen_options kann das
Selektionsbild des aufgerufenen Programms bestimmt und mit Werten versorgt werden.
Mit den Zusätzen list_options
können das Ausgabemedium und die Seitengröße der Grundliste des aufgerufenen Programms beeinflusst werden.
Bei Ausführung der Anweisung SUBMIT erfolgt eine Berechtigungsprüfung für die in den
Programmeigenschaften angegebene
Berechtigungsgruppe über das
Berechtigungsobjekt
S_PROGRAM. Die Programmeigenschaft Start über Variante wird bei SUBMIT nicht berücksichtigt.
Sicherheitshinweis
Wenn beim Aufruf einer Programmeinheit deren Namen dynamisch angegeben und dieser von außen
in ein Programm übernommen wird, stellt dies ein ernsthaftes Sicherheitsrisiko dar. Ein Name,
der von außen in ein Programm übernommen wird, muss vor seiner Verwendung in einem Aufruf
gründlich überprüft werden. Hierfür dient unter anderem die Systemklasse CL_ABAP_DYN_PRG. Siehe
Dynamische Aufrufe.
Beispiel
Aufruf des Programms DEMO_PROGRAM_SUBMIT_REP ohne Rückkehr zum aufrufenden Programm.
SUBMIT demo_program_submit_rep.
Zusatz
... AND RETURN
Wirkung
Der Zusatz AND RETURN bestimmt, wohin die Laufzeitumgebung nach Beendigung des Programmaufrufs verzweigt:
Ohne den Zusatz AND RETURN ersetzt die
interne Sitzung des aufgerufenen Programms die interne Sitzung des aufrufenden Programms an der gleichen Position der
Aufrufkette, wobei die aktuelle
SAP-LUW beendet wird. Nach
Beendigung des Programmaufrufs wird hinter die Stelle zurückgekehrt, von der das aufrufende Programm
gestartet wurde. Der Inhalt des Systemfeldes sy-calld wird bei SUBMIT ohne AND RETURN vom aufrufenden Programm übernommen.
Mit dem Zusatz AND RETURN wird das ausführbare Programm in einer neuen internen Sitzung der aktuellen
Aufrufkette gestartet. Die Sitzung des aufrufenden Programms und die aktuelle
SAP-LUW bleiben erhalten. Das
aufgerufene Programm läuft in einer eigenen SAP-LUW. Nach Beendigung des Programmaufrufs wird
die Programmausführung des aufrufenden Programms hinter der Anweisung SUBMIT fortgesetzt.
Die Anzahl der internen Sitzungen einer Aufrufkette ist auf neun begrenzt. Wird diese durch SUBMIT
... AND RETURN überschritten, wird das Programm abgebrochen und die gesamte Aufrufkette wird gelöscht.
Hinweise
SUBMIT beendet unabhängig vom Zusatz AND RETURN nicht die aktuelle
Datenbank-LUW. Ein
Datenbank-Commit oder
Datenbank-Rollback im aufgerufenen Programm wirkt genauso wie im aktuellen Programm.
Die Anweisung SUBMIT mit dem Zusatz AND RETURN öffnet zwar eine neue
SAP-LUW, aber keine neue
Datenbank-LUW. Dies bedeutet, dass ein
Datenbank-Rollback
in dieser SAP-LUW insbesondere auch alle Registrierungseinträge, die von den Anweisungen CALL FUNCTION IN UPDATE TASK oder CALL FUNCTION IN BACKGROUND TASK in den Tabellen VB... bzw. ARFCSSTATE
und ARFCSDATA vorgenommen wurden, zurückrollen kann. Eine Anweisung ROLLBACK WORK im aufgerufenen Programm wirkt damit unter Umständen auch auf die unterbrochene SAP-LUW. Um dies zu verhindern muss vor dem Programmaufruf ein expliziter
Datenbank-Commit ausgeführt werden. Bei der
lokalen Verbuchung tritt das Problem nicht auf.
Wenn bei SUBMIT ohne den Zusatz AND RETURN in der aktuellen
SAP-LUW noch Prozeduren registriert sind, wird die SAP-LUW beendet, ohne dass die Prozeduren aufgerufen oder zurückgerollt werden. Registrierte
Verbuchungsfunktionsbausteine
können nicht mehr ausgeführt werden. In einem solchen Fall sollte vor dem Programmaufruf
deshalb explizit die Anweisung COMMIT WORK
oder ROLLBACK WORK ausgeführt werden.
Beispiel
Aufruf des Programms DEMO_PROGRAM_SUBMIT_REP mit Rückkehr zum aufrufenden Programm.
Ursache: Das angegebene Programm wurde nicht gefunden. Laufzeitfehler:LOAD_PROGRAM_NOT_FOUND
Ursache: Einer Selektion sollte mit dem Zusatz SIGN ein ungültiger Wert übergeben werden. Laufzeitfehler:SUBMIT_WRONG_SIGN
Ursache: Das angegebene Programm ist kein Report. Laufzeitfehler:SUBMIT_WRONG_TYPE
Ursache: Einem Reportparameter sollte mehr als ein Wert übergeben werden. Laufzeitfehler:SUBMIT_IMPORT_ONLY_PARAMETER
Ursache: Einer Selektion sollte mit WITH sel IN itab eine Tabelle übergeben werden, die nicht den dafür vorgesehenen Aufbau hat. Laufzeitfehler:SUBMIT_IN_ITAB_ILL_STRUCTURE
Ursache: Dem Selektionsbild sollte ein Parameter übergeben werden, der nicht in das Zielfeld konvertierbar ist. Laufzeitfehler:SUBMIT_PARAM_NOT_CONVERTIBLE
Ursache: Das aufgerufene Programm enthält einen Syntaxfehler. Laufzeitfehler:SYNTAX_ERROR