Transaktionsrecorder zur Aufzeichnung der Bedienschritte: SHDB
Variante 1 (Sofortige Ausführung über CALL TRANSACTION)
DATA: it_batchdata TYPE STANDARD TABLE OF bdcdata.
DATA: it_params TYPE STANDARD TABLE OF rfc_spagpa.
DATA: it_msg TYPE STANDARD TABLE OF bdcmsgcoll.
DATA: lv_mode TYPE sy-ftype.
DATA: lv_update TYPE sy-ftype.
* A = Ausführen im Vordergrund (Hell abspielen, mit Bestätigungen)
* E = Ausführen im Hintergrund, aber Stoppen bei Fehler (dunkel abspielen, bei Fehler hell)
* N = Ausführen im Hintergrund, sammeln Fehler in Fehlertabelle (dunkel abspielen), bei Break-Point Abbruch
* P = Ausführen im Hintergrund, sammeln Fehler in Fehlertabelle (dunkel abspielen), bei Break-Point Sprung in Debugger
lv_mode = 'A'.
* A = Asynchrone Verbuchung. Verbuchungen des aufgerufenen Programms werden so durchgeführt, als sei bei der Anweisung COMMIT WORK der Zusatz AND WAIT nicht angegeben.
* S = Synchrone Verbuchung. Verbuchungen des aufgerufenen Programms werden so durchgeführt, als sei bei der Anweisung COMMIT WORK der Zusatz AND WAIT angegeben.
* L = Lokale Verbuchung. Verbuchungen des aufgerufenen Programms werden durchgeführt, als sei in ihm die Anweisung SET UPDATE TASK LOCAL ausgeführt worden.
lv_update = 'A'.
it_batchdata = VALUE #( ( program = 'SAPMV45A' dynpro = '0102' dynbegin = 'X' fnam = '' fval = '' ) " Einstiegsbildschirm aufrufen
( program = '' dynpro = '' dynbegin = '' fnam = 'BDC_CURSOR' fval = 'VBAK-VBELN' ) " Einstiegsbildschirm aufrufen
( program = '' dynpro = '' dynbegin = '' fnam = 'VBAK-VBELN' fval = '122' ) " OK-Code übergeben
( program = '' dynpro = '' dynbegin = '' fnam = 'BDC_OKCODE' fval = '=SUCH' )
( program = 'SAPMV45A' dynpro = '4001' dynbegin = 'X' fnam = '' fval = '' )
( program = '' dynpro = '' dynbegin = '' fnam = 'BDC_OKCODE' fval = '/EBABA' ) ). " Bildschirm füllen
* ohne neuen Task und ohne Berechtigungsprüfungen starten
*CALL TRANSACTION 'VA03'
* USING it_batchdata
* MODE lv_mode
* UPDATE lv_update
* MESSAGES INTO it_msg.
* in neuem Task (Fenster) mit Berechtigungsprüfung starten
CALL FUNCTION 'ABAP4_CALL_TRANSACTION' STARTING NEW TASK 'PROGRAM_1'
EXPORTING
tcode = 'VA03'
skip_screen = abap_false
mode_val = lv_mode
update_val = lv_update
TABLES
using_tab = it_batchdata
spagpa_tab = it_params
mess_tab = it_msg
EXCEPTIONS
call_transaction_denied = 1
tcode_invalid = 2
OTHERS = 3.
CASE sy-subrc.
WHEN 0.
WRITE: / 'Ok.'.
WHEN 1.
WRITE: / 'call_transaction_denied'.
WHEN 2.
WRITE: / 'tcode_invalid.'.
WHEN OTHERS.
WRITE: / 'Other error.'.
ENDCASE.
LOOP AT it_msg ASSIGNING FIELD-SYMBOL(<fl_msg>).
WRITE: / <fl_msg>-dyname.
ENDLOOP.
Variante 2 (neue Mappe, die in der Transaktion SM35 (Batch-Input: Mappenübersicht) eingesehen werden kann, erstellen)
DATA: t_bdcdata LIKE TABLE OF bdcdata.
DATA: fs_bdcdata LIKE LINE OF t_bdcdata.
* Mappe öffnen
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = 'MAPPENNAME' " hier Namen der Mappe eintragen
keep = 'X'
user = sy-uname
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Batchdaten zur Mappe hinzufügen (Beispiel)
* z.B. Programmaufruf
CLEAR fs_bdcdata.
fs_bdcdata-program = 'SAPMM06B'. " Programmname
fs_bdcdata-dynpro = '0100'. " Dynpro
fs_bdcdata-dynbegin = 'X'. " Screen start
APPEND fs_bdcdata TO t_bdcdata.
* z.B. Feldwerte eintragen
CLEAR fs_bdcdata.
fs_bdcdata-fnam = 'EBAN-BSART'. " Feldname
fs_bdcdata-fval = fs_field-bsart. " Feldwert
CONDENSE fs_bdcdata-fval.
APPEND fs_bdcdata TO t_bdcdata.
* z.B. Aktion auslösen
CLEAR fs_bdcdata.
fs_bdcdata-fnam = 'BDC_OKCODE'. " OK-Code
fs_bdcdata-fval = '/00'. " Enter (z.B. '=BU' -> Save, '=SAV' -> Save, '=BACK' -> Zurück)
CONDENSE fs_bdcdata-fval.
APPEND fs_bdcdata TO t_bdcdata.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'ME51'
TABLES
dynprotab = t_bdcdata
EXCEPTIONS
internal_error = 1
not_open = 2
queue_error = 3
tcode_invalid = 4
printing_invalid = 5
posting_invalid = 6
OTHERS = 7.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
* Mappe schließen
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Weiterführende Infos: Link