[ABAP] Infos zu Batchmappen holen

* Transaktion: SM35
* Tabelle APQI (Queue INFO DEFINITION)
* Tabelle APQD (Queue DATA DEFINITION)
* Tabelle APQL (Batch Input Protokoll Verzeichnis)

* Group Name
DATA(lv_groupid) = VALUE apqi-groupid( ).
* Programm
DATA(lv_progid) = VALUE apqi-progid( ).
* Userid
DATA(lv_userid) = VALUE apqi-userid( ).
* Ersteller
DATA(lv_creator) = VALUE apqi-creator( ).
* Erstellung
DATA(lv_credate) = VALUE apqi-credate( ).

SELECT-OPTIONS: so_grpid FOR lv_groupid.
SELECT-OPTIONS: so_prgid FOR lv_progid.
SELECT-OPTIONS: so_user FOR lv_userid.
SELECT-OPTIONS: so_creat FOR lv_creator.
SELECT-OPTIONS: so_cdate FOR lv_credate.

START-OF-SELECTION.
  SELECT
        a~groupid,
        a~progid,
        a~qid,
        a~qstate,  " ' ' - neu, C - in Erstellung, E - fehlerhaft, R - in Bearbeitung, F = verarbeitet, S - im Hintergrund
        a~qerase,
        a~userid,
        a~creator,
        a~credate,
        a~cretime,
        a~startmode,
        d~trans,
        d~block,
        d~segmt,
        d~msgcount,
        d~varlen,
        d~vardata,
        l~temseid,
        l~credate AS cdate,
        l~cretime AS ctime,
        l~creator AS cuser,
        l~destsys,
        l~status
    INTO TABLE @DATA(it_bdc)
    FROM apqi AS a
    INNER JOIN apqd AS d ON a~qid = d~qid
    RIGHT OUTER JOIN apql AS l ON a~qid = l~qid AND a~groupid = l~groupid
    WHERE a~groupid IN @so_grpid
      AND a~progid IN @so_prgid
      AND a~userid IN @so_user
      AND a~creator IN @so_creat
      AND a~credate IN @so_cdate.

* Hier Objekte für die Ausgabe hinzufügen
  cl_demo_output=>write_data( it_bdc ).

* HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING
                                title        = 'Daten'
                                html_string  = lv_html
                                container    = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.

[ABAP] BDC (Batch Data Communication / Batch-Input)

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