Form-Routine aus SAPscript-Formular aufrufen

Aus SAP-Wiki
Wechseln zu: Navigation, Suche

Aus einem SAPscript-Formular kann eine Form-Routine aufgerufen werden, in dem Werte zum Formular hinzugelesen oder auch verändert wrden. Das Programm mit der Form-Routine kann ganz gewöhnlich in ABAP mit den Transaktion SE38 oder SE80 programmiert werden.

Die Übergabe der Variablen aus dem SAPscript-Formular an die Form-Routine und aus der Form-Routine an das SAPscript-Formular ist jedoch anders als man es sonst von Form-Routinen gewohnt ist.

Zentrales Programm

  • Es bietet sich an, ein Programm zu erstellen, wo für das gesamte SAP-System alle Form-Routinen gesammelt werden, die aus SAPscript-Formularen oder Standardtexten aufgerufen werden. So kann man sich jeweils an den bereits vorhandenen Beispielen orientieren. Man sollte in die Form-Routinen auch einen Kommentar schreiben, von welchem SAPscript-Formular oder Standardtext eine Form-Routine verwendet wird. Einen (automatisch generierten) Verwendungsnachweis für die Form-Routinen gibt es nicht.

Aufruf Form im SAPscript-Formular

  • Die einzelnen Zeilen werden in der Formatspalte als Kommandozeilen eingefügt.
  • Lediglich die letzte Zeile mit dem "Endperform" endet mit einem Punkt.
  • Alle Variablen vom Formular, die aus dem Formular benötigt werden, werden per "Using" übergeben. Die Variablen, die aus der Form-Routine ans SAPscript-Formular übergeben werden, werden per "Changing" übergeben. Im Unterschied zum Perform in ABAP-Programmen wird der Befehl „Using“, bzw. „Changing“ vor jeden Übergabeparameter geschrieben.

ScriptPerform1.jpg

  • Die Changing-Parameter müssen nicht zwingen als globale Variablen vorhanden sein. Sie können auch im Formular lokal angelegt werden mit dem Befehl Define oder können auch nicht deklariert werden und implizit vom Changing-Parameter angelegt während der Laufzeit der Formularausgabe.

Generierter Aufruf

Bei einem Formular der Saldenbestätigung wird für die Form-Routine im SAPscript-Formular folgender Code generiert für den Aufruf der Form-Routine

 perform (co_perform-form) in program (co_perform-program)
   tables co_sym_using
          co_set_symbols
          if found.

Form-Routine

Schnittstelle

Die übergebenen Variablen stehen in einer Tabelle IN_TAB.

Die Output-/Changing-Variablen in einer Tabelle OUT_TAB.

Die Tabellen typisieren auf die Struktur ITSYS. Der übergebene Feldname steht im Feld „NAME“ und der Feldwert im Feld „VALUE“.

FORM mat_gewicht
  TABLES in_tab  STRUCTURE itcsy
         out_tab STRUCTURE itcsy.
 ...
ENDFORM.

ScriptPerform3.jpg

Auslesen Using-Parameter

Hier wird man oft auch nicht nur den „sy-subrc“ abfragen, sondern auch nach dem gefüllten Wert in „IN_TAB-VALUE“. Wenn man lediglich abfragt, ob der Using-Parameter übergeben wurde, ist der erfolgreiche sy-subrc fast selbstverständlich. Der gefüllte Wert in „IN_TAB-VALUE“ nicht.

ScriptPerform4.jpg

Füllen Changing-Parameter

Die Changing-Parameter der Output-Tabelle werden aktualisiert per "modify".

ScriptPerform5.jpg

oder (im anderen Kontext) zuerst leeren der Ausgabetabelle und dann füllen mit "append". Dies bietet sich an, wenn die Changing-Parameter in der Form-Routine initial gefüllt werden.

ScriptPerform7.jpg

Sammlung Form-Routinen (Sch)

Beispielprogramm = ZWM_FORMS_SUBROUTINES

ScriptPerform8.jpg

Beispielcoding

FORM z_f130confirm_info
  TABLES in_tab  STRUCTURE itcsy
         out_tab STRUCTURE itcsy.

  DATA: lv_belnr TYPE bseg-belnr,
        lv_bukrs TYPE bseg-bukrs,
        lv_gjahr TYPE bseg-gjahr,
        lv_buzei TYPE bseg-buzei.

  READ TABLE out_tab ASSIGNING FIELD-SYMBOL(<fs_out_tab>) WITH KEY name = 'HBSIDH-SGTXT'.
  IF sy-subrc = 0.
    lv_belnr = <fs_out_tab>-value.
  ENDIF.

* Wenn bereits ein Wert gefüllt ist, braucht nichts weiter gemacht zu werden
  if <fs_out_tab>-value is not initial.
    return.
  endif.

* Nun aber Nachlesen des Verbuchungstextes
  READ TABLE in_tab into data(ls_in_tab) WITH KEY name = 'HBSIDH-BELNR'.
  IF sy-subrc = 0.
    lv_belnr = ls_in_tab-value.
  ENDIF.

  READ TABLE in_tab into ls_in_tab WITH KEY name = 'HBSIDH-BUKRS'.
  IF sy-subrc = 0.
    lv_bukrs = ls_in_tab-value.
  ENDIF.

  READ TABLE in_tab into ls_in_tab WITH KEY name = 'HBSIDH-GJAHR'.
  IF sy-subrc = 0.
    lv_gjahr = ls_in_tab-value.
  ENDIF.

  READ TABLE in_tab into ls_in_tab WITH KEY name = 'HBSIDH-BUZEI'.
  IF sy-subrc = 0.
    lv_buzei = ls_in_tab-value.
  ENDIF.

* Lese aus der Buchungszeile den Vorgangstext
* und schreibe ihn zurück
  Select single *
    from bseg
    into @data(ls_bseg)
    where bukrs = @lv_bukrs
      and belnr = @lv_belnr
      and gjahr = @lv_gjahr
      and buzei = @lv_buzei.

  <fs_out_tab>-value = ls_bseg-sgtxt.

ENDFORM.

Beispiele (Sch)

  • Programm = ZWM_FORMS_SUBROUTINES, Form = READ_NAME1_FROM_LIFNR
  • SAPscript = ZMM_WESCHEINVERS
  • SAPscript = ZQM_PRUEFANW

Web-Links