Generate Subroutine Pool Parameter

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
2 Beiträge • Seite 1 von 1
2 Beiträge Seite 1 von 1

Generate Subroutine Pool Parameter

Beitrag von codierknecht (ForumUser / 84 / 0 / 0 ) »
Hallo zusammen,

ich benötige eine dynamische Select Anweisung im native SQL und bin daher
auf die Subroutine Pools gestossen. Ich habe ein Form geschrieben, welches einen Report erzeugt. Das funktioniert auch fehlerfrei.
Beim Perform erhalte ich die Meldung, dass mehr Parameter erwartet wurden, als ich übergeben habe.
Das ist meiner Meinung nach nicht so.

Hier mal ein paar Codeschnipsel.

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.
Ich habe also acht Parameter übergeben und erwarte in der dynamischen Routine auch acht Parameter.

Der Dump, welcher beim PERFORM aufgerufen wird enthält
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
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.

Hat jemand eine Idee, was hier falsch ist?

Viele Grüße

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
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.
...
Bei FORMs ist die Typisierung ' type standard table of ' nicht direkt erlaubt.
Statt dessen muss ein Tabellentyp (programmlokal) angelegt werden:

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.
...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Seite 1 von 1

Vergleichbare Themen

4
Antw.
3457
Views
GENERATE SUBROUTINE POOL
von Gast » 25.05.2005 13:16 • Verfasst in ABAP® für Anfänger
14
Antw.
5802
Views
Generate Subroutine Pool
von Steffi221185 » 26.10.2007 09:53 • Verfasst in ABAP® Core
0
Antw.
1113
Views
Insert report oder Generate Subroutine Pool?
von naphro » 15.06.2007 11:01 • Verfasst in ABAP® Core
12
Antw.
3886
Views
Generate Subroutine-Pool mit Unterprogrammen u. Insert-State
von Steffi221185 » 08.12.2006 11:20 • Verfasst in ABAP® Core
2
Antw.
3048
Views
GENERATE DYNPRO und rollbare Felder
von msta » 30.03.2017 11:43 • Verfasst in Dialogprogrammierung

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 5 Stunden von Bright4.5 1 / 117
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1758
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8359