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