Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
ichse18577
Code: Alles auswählen.
DATA: lt_bdc TYPE TABLE OF bdcdata,
ls_bdc LIKE LINE OF lt_bdc,
ls_options TYPE ctu_params.
ls_options-dismode = 'N'.
**********************************************************************
*STMS via Batch Input starten
**********************************************************************
"Start
ls_bdc-program = 'SAPLTMSU'.
ls_bdc-dynpro = 0100.
ls_bdc-dynbegin = 'X'.
ls_bdc-fnam = ''.
ls_bdc-fval = ''.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
ls_bdc-program = ''.
ls_bdc-dynpro = '' .
ls_bdc-dynbegin = ''.
ls_bdc-fnam = 'BDC_CURSOR'.
ls_bdc-fval = 'WTMSU-SYSNAM'.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
ls_bdc-program = ''.
ls_bdc-dynpro = ''.
ls_bdc-dynbegin = ''.
ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=IMPO'.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
ls_bdc-program = 'SAPMSSY0'.
ls_bdc-dynpro = 0120.
ls_bdc-dynbegin = 'X'.
ls_bdc-fnam = ''.
ls_bdc-fval = ''.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
ls_bdc-program = ''.
ls_bdc-dynpro = ''.
ls_bdc-dynbegin = ''.
ls_bdc-fnam = 'BDC_CURSOR'.
ls_bdc-fval = '02/03'.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
ls_bdc-program = ''.
ls_bdc-dynpro = ''.
ls_bdc-dynbegin = ''.
ls_bdc-fnam = 'BDC_OKCODE'.
ls_bdc-fval = '=REFR'.
APPEND ls_bdc TO lt_bdc.
CLEAR ls_bdc.
CALL TRANSACTION 'STMS' USING lt_bdc OPTIONS FROM ls_options.
Folgende Benutzer bedankten sich beim Autor ichse18577 für den Beitrag:
hga
Code: Alles auswählen.
DATA(bdc) = VALUE bdcdata_tab(
( program = 'SAPLTMSU' dynpro = '0100' dynbegin = 'X' )
( fnam = 'BDC_CURSOR' fval = 'WTMSU-SYSNAM' )
( fnam = 'BDC_OKCODE' fval = '=IMPO' )
( program = 'SAPMSSY0' dynpro = '0120' dynbegin = 'X' )
( fnam = 'BDC_CURSOR' fval = '02/03' )
( fnam = 'BDC_OKCODE' fval = '=REFR' )
).
Klar. Sofern Logik dahinter ist, ist eine Verwendung von Modulen (FORM oder METHOD) sinnvoller.DeathAndPain hat geschrieben: ↑18.11.2019 17:07Sofern der auszuführende Batch komplett statisch ist und nicht partiell in Unterroutinen berechnet werden muss, mag das gehen. Aber - ohne es ausprobiert zu haben - kann man dann nicht auch gleich den DATA(bdc) weglassen und den ganzen VALUE-Block direkt an den CALL TRANSACTION übergeben? Oder ist das wie bei PERFORM, dass VALUE an der Stelle nicht unterstützt wird? Wobei es bei PERFORM ja einen gewissen Sinn macht, da es syntaktisch erlaubt ist, USING-Parameter in der Unterroutine zu ändern, was bei einem CALL TRANSACTION aber kein Problem sein sollte.
BDC_CURSOR ist dann wichtig, wenn du einen "Doppelklick" (F2) in einem TableControl aufnimmst. Durch den BDC_CURSOR weiß das Programm in welcher Zeile du dich befindest.DeathAndPain hat geschrieben: ↑18.11.2019 17:07Die BDC_CURSOR-Einträge kann man übrigens so gut wie alle weglassen. Das ist extrem selten, dass die Cursorposition in einem Batch Input eine Rolle spielt. Der SHDB zeichnet sie bei jedem einzelnen Dynpro mit auf, aber das ist eigentlich immer das erste, was ich aus dem aus der Aufzeichnung generierten Code ersatzlos rausschmeiße wegen nutzlos. Dadurch wird das Ganze nochmal deutlich kürzer und übersichtlicher und auch ein bisschen schneller.