Code: Alles auswählen.
form create_subroutine.
* Daten für den Suboutine Pool
data:
source_tab type table of string,
new_prog type program,
msg(120) TYPE c,
lin(3) TYPE c.
* Interne Tabelle (Quelltext) füllen.
append 'REPORT Z_CALL_IMAGE_TEMP. ' to source_tab.
append 'DATA: wa_itab type zifi_einr1p01. ' to source_tab.
append 'FORM get_table ' to source_tab.
append 'using itab type standard table of zifi_einr1p01' to source_tab.
append ' pa_mandt type zifi_einr1p01-ER1MAND ' to source_tab.
append 'pa_gjahr type zifi_einr1p01-er1vgschj ' to source_tab.
append 'pa_barcode type zifi_einr1p01-er1indef ' to source_tab.
append 'pa_kredi_low type zifi_einr1p01-er1kredi ' to source_tab.
append 'pa_kredi_high type zifi_einr1p01-er1kredi ' to source_tab.
append 'pa_datum_low type zifi_einr1p01-er1belda ' to source_tab.
append 'pa_datum_high type zifi_einr1p01-er1belda. ' to source_tab.
append 'exec sql.' to source_tab.
append ' connect to .......
append 'endexec.'
....
....
....
generate subroutine pool source_tab name new_prog
message msg
line lin.
* Aufruf der neuen Subroutine
perform get_table
in program (new_prog) IF FOUND
using it_einr1p01
pa_mandt
pa_gjahr
pa_barcode
pa_kredi_low
pa_kredi_high
pa_datum_low
pa_datum_high.
Was mich wundert ist, dass der Dump aussagt, ich würde das Unterprogramm 'DREATE_SUBROUTINE' im Programm 'Z_CALL_IMAGE_02' aufrufen, aber das stimmt so doch nicht. Ich rufe von dieser Stelle aus das neue Unterprogramm auf.Fehleranalyse
Es ist eine Ausnahme aufgetreten, die weiter unten näher erlä
Die Ausnahme, der die Klasse 'CX_SY_DYN_CALL_PARAM_MISSING' z
wurde in der Prozedur "CREATE_SUBROUTINE" "(FORM)" weder abge
noch durch eine RAISING-Klausel propagiert.
Da der Aufrufer der Prozedur nicht mit dem Auftreten der Ausn
rechnen konnte, wurde das laufende Programm abgebrochen.
Der Grund für die Ausnahme ist:
Durch PERFORM wurde die Routine "CREATE_SUBROUTINE" des Progr
"Z_CALL_IMAGE_02"
aufgerufen. Der aktuelle Aufruf enthält 8 aktuelle Parameter.
Die Routine "CREATE_SUBROUTINE" erwartet aber 10 Parameter.
..
...
....
Informationen zur Abbruchstelle
Der Abbruch trat im ABAP-Programm "Z_CALL_IMAGE_02" auf, und zwar in
"CREATE_SUBROUTINE". Das Hauptprogramm war "Z_CALL_IMAGE_02 ".
Im Quelltext befindet sich die Abbruchstelle in Zeile 133
des (Include-)Programms "Z_CALL_IMAGE_02".
(bei Anwahl des Editors: 1330) der ABAP-Source "Z_CALL_IMAGE_02".
Der Abbruch ist darauf zurückzuführen, daß die Ausnahme
"CX_SY_DYN_CALL_PARAM_MISSING"
in der Prozedur "CREATE_SUBROUTINE" "(FORM)" aufgetreten ist, aber weder
lokal behandelt wurde, noch in der RAISING-Klausel ihrer Signatur
angegeben wurde.
Die Prozedur befindet sich im Programm "Z_CALL_IMAGE_02 ", ihr Quelltext
beginnt in Zeile 49 des (Include-)Programms "Z_CALL_IMAGE_02 ".
Ausschnitt Source-Code
001030 append ' close c1 ' to source_tab.
001040 append 'endexec. ' to source_tab.
001050 append 'exec sql.' to source_tab.
001060 append ' disconnect ''FABERF35'' ' to source_tab.
001070 append 'endexec.' to source_tab.
001080 append 'exec sql.' to source_tab.
001090 append ' set connection default ' to source_tab.
001100 append 'endexec.' to source_tab.
001110 append 'endform.' to source_tab.
001120
001130
001140 * Subroutine Pool erstellen
001150
001160 generate subroutine pool source_tab name new_prog
001170 message msg
001180 line lin.
001190 break-point.
001200 * Aufruf der neuen Subroutine
001210 perform get_table
001220 in program (new_prog) IF FOUND
001230 using it_einr1p01
001240 pa_mandt
001250 pa_gjahr
001260 pa_barcode
001270 pa_kredi_low
001280 pa_kredi_high
001290 pa_datum_low
001300 pa_datum_high.
001310
001320
> endform. "create_subroutine
Bei FORMs ist die Typisierung ' type standard table of ' nicht direkt erlaubt.codierknecht hat geschrieben:Code: Alles auswählen.
... * Interne Tabelle (Quelltext) füllen. append 'REPORT Z_CALL_IMAGE_TEMP. ' to source_tab. append 'DATA: wa_itab type zifi_einr1p01. ' to source_tab. append 'FORM get_table ' to source_tab. append 'using itab type standard table of zifi_einr1p01' to source_tab. ...
Code: Alles auswählen.
...
append 'DATA: wa_itab type zifi_einr1p01. ' to source_tab.
append 'TYPES: tt_zifi_einr1p01 TYPE STANDARD TABLE OF zifi_einr1p01' to source_tab.
append ' WITH DEFAULT KEY. ' to source_tab. "nicht-generischen Typ anlegen
append 'FORM get_table ' to source_tab.
append ' USING itab TYPE tt_zifi_einr1p01' to source_tab.
...