Структуры данных:
* Структура для CALL TRANSACTION.
DATA: BEGIN OF gt_bdcdata OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF gt_bdcdata.
DATA BEGIN OF gt_itab OCCURS 10.
INCLUDE STRUCTURE bdcmsgcoll.
DATA END OF gt_itab.
DATA: p_mode TYPE CTU_MODE VALUE 'N'.
Пример вызова внутри программы:
DATA: lt_error TYPE bapiret2_tab.
* Сформувати сеанс пакетного вводу
CLEAR: gt_itab[], gt_bdcdata[], lt_error[].
PERFORM dynpro USING:
'X' 'SAPMF02K' '0101',
' ' 'RF02K-LIFNR' ps_lifnr-lifnr,
' ' 'RF02K-BUKRS' space,
' ' 'RF02K-EKORG' space,
' ' 'RF02K-D0110' abap_true,
' ' 'RF02K-D0120' abap_false,
' ' 'RF02K-D0130' abap_false,
' ' 'WRF02K-D0380' abap_false,
' ' 'RF02K-D0210' abap_false,
' ' 'RF02K-D0215' abap_false,
' ' 'RF02K-D0220' abap_false,
' ' 'RF02K-D0610' abap_false,
' ' 'RF02K-D0310' abap_false,
' ' 'WRF02K-D0320' abap_false,
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF02K' '0111',
' ' 'ADDR1_DATA-SORT2' ps_lifnr-sort2,
' ' 'BDC_OKCODE' '=UPDA'.
PERFORM call_transaction TABLES gt_bdcdata gt_itab
USING 'XK02' p_tabix
CHANGING lt_error[].
APPEND LINES OF lt_error TO pt_bapiret2.
Вспомогательные подпрограммы:
*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
* Генерация полей для BATCH-INPUT
*----------------------------------------------------------------------*
FORM dynpro USING p_dynbegin
p_name
p_value.
DATA: l_type(1) TYPE c,
l_dcpfm(1) TYPE c.
CLEAR gt_bdcdata.
IF p_dynbegin = abap_true.
* Экран транзакции
MOVE: p_name TO gt_bdcdata-program,
p_value TO gt_bdcdata-dynpro,
abap_true TO gt_bdcdata-dynbegin.
ELSE.
* Поле на экране транзакции
MOVE: p_name TO gt_bdcdata-fnam.
IF NOT p_value IS INITIAL.
DESCRIBE FIELD p_value TYPE l_type.
CASE l_type.
WHEN 'I' OR 'N' OR 'P'.
WRITE p_value TO gt_bdcdata-fval LEFT-JUSTIFIED.
SELECT SINGLE dcpfm INTO (l_dcpfm) FROM usr01 WHERE bname = sy-uname.
CASE l_dcpfm.
WHEN abap_false. TRANSLATE gt_bdcdata-fval USING '. '.
WHEN abap_true. TRANSLATE gt_bdcdata-fval USING ', '.
ENDCASE.
CONDENSE gt_bdcdata-fval NO-GAPS.
WHEN 'D'.
WRITE p_value TO gt_bdcdata-fval DD/MM/YYYY.
WHEN OTHERS.
MOVE p_value TO gt_bdcdata-fval.
ENDCASE.
ENDIF.
ENDIF.
APPEND gt_bdcdata.
ENDFORM. "dynpro
*&---------------------------------------------------------------------*
*& Form CALL_TRANSACTION
*&---------------------------------------------------------------------*
* Виклик тарзакції пакетного вводу
*----------------------------------------------------------------------*
* -->P_CODE - Код транзакції
* -->P_TABIX - Номер позиції до якої виконується обробка
* -->PT_BDCDATA - Пакетний інтерфейс
* <--PT_ITAB - Перелік помилок/повідомлень роботи пакетного вводу
* <--PT_ERROR - Помилки обробки формат BAPIRET2
*----------------------------------------------------------------------*
FORM call_transaction TABLES pt_bdcdata STRUCTURE gt_bdcdata
pt_itab STRUCTURE gt_itab
USING p_code
p_tabix
CHANGING pt_error TYPE bapiret2_tab.
DATA ls_opt TYPE ctu_params.
ls_opt-dismode = p_mode. "Режим обробки для CALL TRANSACTION USING...
ls_opt-updmode = 'S'. "Режим оновлення для CALL TRANSACTION USING...
ls_opt-cattmode = space. "Режим CATT для CALL TRANSACTION USING...
ls_opt-defsize = abap_false. "Усталений розмір екрана для CALL TRANSACTION USING...
ls_opt-racommit = abap_false. "не завершується COMMIT
ls_opt-nobinpt = abap_true. "SY-BINPT=SPACE для CALL TRANSACTION USING...
ls_opt-nobiend = abap_true. "SY-BINPT=SPACE після зав.даних для CALL TRANSACTION USING...
CALL TRANSACTION p_code WITHOUT AUTHORITY-CHECK
USING pt_bdcdata
OPTIONS FROM ls_opt
MESSAGES INTO pt_itab.
* Сформувати перелік тільки критичних помилок
CLEAR: pt_error[].
IF NOT pt_itab[] IS INITIAL.
CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
TABLES
imt_bdcmsgcoll = pt_itab
ext_return = pt_error.
DELETE pt_error WHERE type = 'S' OR type = 'I' OR type = 'W'.
LOOP AT pt_error INTO DATA(ls_error) WHERE type = 'E' OR type = 'A'.
ls_error-row = p_tabix.
MODIFY pt_error FROM ls_error.
ENDLOOP.
ENDIF.
ENDFORM. " CALL_TRANSACTION