Table controls in BDC
when we want to insert multiple line items
Since the BDC programs can be used on different systems with different look and feel so the layout may vary from one system to another.
So while doing the recording there we have an option to select the default option as it will keep the recording according to standards
so it will use default setting if any other one uses the same transaction.
structure CTU_PARAMS
Below is the sample program:-
*&———————————————————————*
*& Report ZTEST_PROGRAM_BDC
*&
*&———————————————————————*
*&
*&
*&———————————————————————*
INCLUDE ztest_program_bdc_top_tcntrl.
*INCLUDE ztest_program_bdc_top_session.
*INCLUDE ZTEST_PROGRAM_BDC_TOP . ” global Data
* INCLUDE ZTEST_PROGRAM_BDC_O01 . ” PBO-Modules
* INCLUDE ZTEST_PROGRAM_BDC_I01 . ” PAI-Modules
INCLUDE ztest_program_bdc_f01_tcntrl.
*INCLUDE ztest_program_bdc_f01_session.
* INCLUDE ZTEST_PROGRAM_BDC_F01 . ” FORM-Routines
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION ‘f4_filename’
EXPORTING
program_name = syst–cprog
dynpro_number = syst–dynnr
field_name = ‘p_file’
IMPORTING
file_name = p_file.
BREAK-POINT.
PERFORM get_data.
IF NOT it_header IS INITIAL.
IF r_1 = ‘x’.
PERFORM f_call_bdc1.
ELSE.
* PERFORM f_session_bdc2.
ENDIF.
ENDIF.
* IF it_final IS NOT INITIAL.
* IF r_1 = ‘X’.
* PERFORM f_call_bdc.
* ELSE.
* PERFORM f_session_bdc.
* ENDIF.
*
* ENDIF.
*&———————————————————————*
*& Include ZTEST_PROGRAM_BDC_TOP Report ZTEST_PROGRAM_BDC
*&
*&———————————————————————*
REPORT ztest_program_bdc.
TYPE-POOLS : truxs.
PARAMETERS : r_1 RADIOBUTTON GROUP rg1 DEFAULT ‘x’,
r_2 RADIOBUTTON GROUP rg1.
PARAMETERS : p_file TYPE rlgrap–filename.
TYPES : BEGIN OF ty_final,
lifnr TYPE lifnr,
bukrs TYPE bukrs,
banks TYPE banks,
bankl TYPE bankl,
bankn TYPE bankn,
END OF ty_final.
*
* BEGIN OF ty_header,
* lifnr TYPE lifnr,
* bukrs TYPE bukrs,
* END OF ty_header,
*
* BEGIN OF ty_item,
* banks TYPE banks,
* bankl TYPE bankl,
* bankn TYPE bankn,
* END OF ty_item.
DATA : it_final TYPE TABLE OF ty_final,
wa_final TYPE ty_final,
it_header TYPE TABLE OF ty_final,
wa_header TYPE ty_final,
it_item TYPE TABLE OF ty_final,
wa_item TYPE ty_final,
it_raw TYPE truxs_t_text_data,
it_bdcdata TYPE TABLE OF bdcdata,
wa_bdcdata TYPE bdcdata,
it_msg TYPE TABLE OF bdcmsgcoll,
wa_msg TYPE bdcmsgcoll,
it_msg1 TYPE TABLE OF bdcmsgcoll,
wa_msg1 TYPE bdcmsgcoll,
wa_option TYPE ctu_params.
*&———————————————————————*
*& Include ZTEST_PROGRAM_BDC_F01
*&———————————————————————*
*&———————————————————————*
*& Form GET_DATA
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
FORM get_data .
CALL FUNCTION ‘text_convert_xls_to_sap’
EXPORTING
* I_FIELD_SEPERATOR =
* I_LINE_HEADER =
i_tab_raw_data = it_raw
i_filename = p_file
TABLES
i_tab_converted_data = it_final
* EXCEPTIONS
* CONVERSION_FAILED = 1
* OTHERS = 2
.
IF sy–subrc <> 0.
* Implement suitable error handling here
ENDIF.
IF NOT it_final IS INITIAL.
SORT it_final BY lifnr bukrs.
it_header[] = it_final[].
it_item[] = it_final[].
DELETE ADJACENT DUPLICATES FROM it_header COMPARING lifnr bukrs.
ENDIF.
ENDFORM. ” get_data
*&———————————————————————*
*& Form F_CALL_BDC
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
*FORM f_call_bdc .
* CALL TRANSACTION ‘XD01’ USING it_bdcdata MODE ‘A’ UPDATE ‘S’
* MESSAGES INTO it_msg.
*
* IF NOT it_msg IS INITIAL.
* LOOP AT it_msg INTO wa_msg.
* wa_msg1 = wa_msg.
* CALL FUNCTION ‘MESSAGE_TEXT_BUILD’
* EXPORTING
* msgid = wa_msg-msgid
* msgnr = wa_msg-msgnr
* msgv1 = wa_msg-msgv1
* msgv2 = wa_msg-msgv1
* msgv3 = wa_msg-msgv1
* msgv4 = wa_msg-msgv1
* IMPORTING
* MESSAGE_TEXT_OUTPUT = wa_msg1-msgv1
* .
*
* APPEND wa_msg1 to it_msg1.
* CLEAR wa_msg1.
* ENDLOOP.
*
* ENDIF.
*
*
* ENDLOOP.
*
* if not it_msg1 is INITIAL.
*
* CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
* EXPORTING
** I_INTERFACE_CHECK = ‘ ‘
** I_BYPASSING_BUFFER = ‘ ‘
** I_BUFFER_ACTIVE = ‘ ‘
* I_CALLBACK_PROGRAM = sy-repid
** I_CALLBACK_PF_STATUS_SET = ‘ ‘
** I_CALLBACK_USER_COMMAND = ‘ ‘
** I_CALLBACK_TOP_OF_PAGE = ‘ ‘
** I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘
** I_CALLBACK_HTML_END_OF_LIST = ‘ ‘
* I_STRUCTURE_NAME = ‘BDCMSGCOLL’
** I_BACKGROUND_ID = ‘ ‘
** I_GRID_TITLE =
** I_GRID_SETTINGS =
** IS_LAYOUT =
** IT_FIELDCAT =
** IT_EXCLUDING =
** IT_SPECIAL_GROUPS =
** IT_SORT =
** IT_FILTER =
** IS_SEL_HIDE =
** I_DEFAULT = ‘X’
** I_SAVE = ‘ ‘
** IS_VARIANT =
** IT_EVENTS =
** IT_EVENT_EXIT =
** IS_PRINT =
** IS_REPREP_ID =
** I_SCREEN_START_COLUMN = 0
** I_SCREEN_START_LINE = 0
** I_SCREEN_END_COLUMN = 0
** I_SCREEN_END_LINE = 0
** I_HTML_HEIGHT_TOP = 0
** I_HTML_HEIGHT_END = 0
** IT_ALV_GRAPHICS =
** IT_HYPERLINK =
** IT_ADD_FIELDCAT =
** IT_EXCEPT_QINFO =
** IR_SALV_FULLSCREEN_ADAPTER =
** IMPORTING
** E_EXIT_CAUSED_BY_CALLER =
** ES_EXIT_CAUSED_BY_USER =
* TABLES
* t_outtab = it_msg1
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
* .
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
*
*
* ENDIF.
*ENDFORM. ” F_CALL_BDC
*
*
**&———————————————————————*
**& Form BDC_DYNPRO
**&———————————————————————*
** text
**———————————————————————-*
** –>PROGRAM text
** –>DYNPRO text
**———————————————————————-*
*FORM bdc_dynpro USING program dynpro.
* CLEAR wa_bdcdata.
* wa_bdcdata-program = program.
* wa_bdcdata-dynpro = dynpro.
* wa_bdcdata-dynbegin = ‘X’.
* APPEND wa_bdcdata TO it_bdcdata.
*ENDFORM. “BDC_DYNPRO
*
**———————————————————————-*
** Insert field *
**———————————————————————-*
*FORM bdc_field USING fnam fval.
* IF fval <> space.
* CLEAR wa_bdcdata.
* wa_bdcdata-fnam = fnam.
* wa_bdcdata-fval = fval.
* APPEND wa_bdcdata TO it_bdcdata.
* ENDIF.
*ENDFORM. “BDC_FIELD
**&———————————————————————*
**& Form F_SESSION_BDC
**&———————————————————————*
** text
**———————————————————————-*
** –> p1 text
** <– p2 text
**———————————————————————-*
*FORM f_session_bdc .
*
*CALL FUNCTION ‘BDC_OPEN_GROUP’
* EXPORTING
** CLIENT = SY-MANDT
** DEST = FILLER8
* GROUP = ‘SHIV65’
** HOLDDATE = FILLER8
* KEEP = ‘X’
* USER = sy-uname
** RECORD = FILLER1
** PROG = SY-CPROG
** DCPFM = ‘%’
** DATFM = ‘%’
** IMPORTING
** QID =
** 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 <> 0.
** Implement suitable error handling here
*ENDIF.
*
*LOOP AT it_final INTO wa_final.
* refresh it_bdcdata.
* PERFORM bdc_dynpro USING ‘SAPMF02D’ ‘0100’.
* PERFORM bdc_field USING ‘BDC_CURSOR’
* ‘RF02D-KTOKD’.
* PERFORM bdc_field USING ‘BDC_OKCODE’
* ‘/00’.
* PERFORM bdc_field USING ‘RF02D-KUNNR’
* wa_final-kunnr.”‘1097’.
* PERFORM bdc_field USING ‘RF02D-BUKRS’
* wa_final-bukrs.”‘1000’.
* PERFORM bdc_field USING ‘RF02D-KTOKD’
* wa_final-ktokd.”‘Y000’.
* PERFORM bdc_dynpro USING ‘SAPMF02D’ ‘0110’.
* PERFORM bdc_field USING ‘BDC_CURSOR’
* wa_final-spras.”‘KNA1-SPRAS’.
* PERFORM bdc_field USING ‘BDC_OKCODE’
* ‘/00’.
* PERFORM bdc_field USING ‘KNA1-ANRED’
* wa_final-anred.”‘Mr.’.
* PERFORM bdc_field USING ‘KNA1-NAME1’
* wa_final-name1.”‘Shivendu’.
* PERFORM bdc_field USING ‘KNA1-STRAS’
* wa_final-stras.”‘Kaikondrahalli’.
* PERFORM bdc_field USING ‘KNA1-ORT01’
* wa_final-ort01.”‘bang’.
* PERFORM bdc_field USING ‘KNA1-PSTLZ’
* wa_final-pstlz. “‘560035’.
* PERFORM bdc_field USING ‘KNA1-LAND1’
* wa_final-land1.”‘IN’.
* PERFORM bdc_field USING ‘KNA1-SPRAS’
* wa_final-spras.”‘EN’.
* PERFORM bdc_dynpro USING ‘SAPMF02D’ ‘0120’.
* PERFORM bdc_field USING ‘BDC_CURSOR’
* ‘KNA1-LIFNR’.
* PERFORM bdc_field USING ‘BDC_OKCODE’
* ‘=UPDA’.
*
* CALL FUNCTION ‘BDC_INSERT’
* EXPORTING
* TCODE = ‘XD01’
** POST_LOCAL = NOVBLOCAL
** PRINTING = NOPRINT
** SIMUBATCH = ‘ ‘
** CTUPARAMS = ‘ ‘
* TABLES
* dynprotab = it_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 <> 0.
** Implement suitable error handling here
* ENDIF.
*
* ENDLOOP.
*
* CALL FUNCTION ‘BDC_CLOSE_GROUP’
* EXCEPTIONS
* NOT_OPEN = 1
* QUEUE_ERROR = 2
* OTHERS = 3
* .
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
*
*
*ENDFORM. ” F_SESSION_BDC
*&———————————————————————*
*& Form F_CALL_BDC1
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
form f_call_bdc1 .
wa_option–updmode = ‘s’.
wa_option–defsize = ‘x’.
wa_option–dismode = ‘a’.
* REFRESH it_bdcdata[].
* CLEAR wa_bdcdata.
LOOP AT it_header INTO wa_header.
REFRESH it_bdcdata[].
PERFORM bdc_dynpro USING ‘sapmf02k’ ‘0101’.
PERFORM bdc_field USING ‘bdc_cursor’
‘rf02k-d0130’.
PERFORM bdc_field USING ‘bdc_okcode’
‘/00’.
PERFORM bdc_field USING ‘rf02k-lifnr’
wa_header–lifnr. “‘201001’.
PERFORM bdc_field USING ‘rf02k-bukrs’
wa_header–bukrs.“‘111a’.
PERFORM bdc_field USING ‘rf02k-d0130’
‘x’.
PERFORM f_item.
CALL TRANSACTION ‘xd02’ USING it_bdcdata “mode ‘n’ “update ‘s’
OPTIONS FROM wa_option
MESSAGES INTO it_msg.
IF NOT it_msg IS INITIAL.
LOOP AT it_msg INTO wa_msg.
wa_msg1 = wa_msg.
CALL FUNCTION ‘message_text_build’
EXPORTING
msgid = wa_msg–msgid
msgnr = wa_msg–msgnr
msgv1 = wa_msg–msgv1
msgv2 = wa_msg–msgv1
msgv3 = wa_msg–msgv1
msgv4 = wa_msg–msgv1
IMPORTING
message_text_output = wa_msg1–msgv1.
APPEND wa_msg1 TO it_msg1.
CLEAR wa_msg1.
ENDLOOP.
ENDIF.
ENDLOOP.
IF NOT it_msg1 IS INITIAL.
CALL FUNCTION ‘reuse_alv_grid_display’
EXPORTING
* I_INTERFACE_CHECK = ‘ ‘
* I_BYPASSING_BUFFER = ‘ ‘
* I_BUFFER_ACTIVE = ‘ ‘
i_callback_program = sy–repid
* I_CALLBACK_PF_STATUS_SET = ‘ ‘
* I_CALLBACK_USER_COMMAND = ‘ ‘
* I_CALLBACK_TOP_OF_PAGE = ‘ ‘
* I_CALLBACK_HTML_TOP_OF_PAGE = ‘ ‘
* I_CALLBACK_HTML_END_OF_LIST = ‘ ‘
i_structure_name = ‘bdcmsgcoll’
TABLES
t_outtab = it_msg1
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy–subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDIF.
*ENDLOOP.
ENDFORM. ” f_call_bdc1
*&———————————————————————*
*& Form F_ITEM
*&———————————————————————*
* text
*———————————————————————-*
* –> p1 text
* <– p2 text
*———————————————————————-*
form f_item .
DATA : v_count(2) TYPE n,
v_fld1 TYPE char30,
v_fld2 TYPE char30,
v_fld3 TYPE char30.
v_count = 1.
LOOP AT it_item INTO wa_item WHERE lifnr = wa_header–lifnr.
CONCATENATE ‘lfbk-banks(‘ v_count ‘)’ INTO v_fld1.
CONCATENATE ‘lfbk-bankl(‘ v_count ‘)’ INTO v_fld2.
CONCATENATE ‘lfbk-bankn(‘ v_count ‘)’ INTO v_fld3.
PERFORM bdc_dynpro USING ‘sapmf02k’ ‘0130’.
PERFORM bdc_field USING ‘bdc_cursor’
‘lfbk-bankn(05)’.
PERFORM bdc_field USING ‘bdc_okcode’
‘=entr’.
PERFORM bdc_field USING v_fld1“‘LFBK-banks(01)’
wa_item–banks.“‘in’.
PERFORM bdc_field USING v_fld2“‘LFBK-bankl(01)’
wa_item–bankl.“‘0001’.
PERFORM bdc_field USING v_fld3“‘LFBK-bankn(01)’
wa_item–bankn. “‘1234561’.
v_count = v_count + 1.
IF v_count > 5.
v_count = 1.
PERFORM bdc_field USING ‘bdc_cursor’
v_fld3.“‘lfbk-bankn(05)’.
PERFORM bdc_field USING ‘bdc_okcode’
‘=entr’.
PERFORM bdc_field USING ‘bdc_okcode’
‘=p+’.
ENDIF.
ENDLOOP.
PERFORM bdc_dynpro USING ‘sapmf02k’ ‘0130’.
PERFORM bdc_field USING ‘bdc_okcode’
‘=upda’.
ENDFORM. ” f_item
*&———————————————————————*
*& Form bdc_dynpro
*&———————————————————————*
* text
*———————————————————————-*
* –>PROGRAM text
* –>DYNPRO text
*———————————————————————-*
form bdc_dynpro using program dynpro.
CLEAR wa_bdcdata.
wa_bdcdata–program = program.
wa_bdcdata–dynpro = dynpro.
wa_bdcdata–dynbegin = ‘x’.
APPEND wa_bdcdata TO it_bdcdata.
ENDFORM. “bdc_dynpro
*———————————————————————-*
* Insert field *
*———————————————————————-*
form bdc_field using fnam fval.
* IF fval <> space.
CLEAR wa_bdcdata.
wa_bdcdata–fnam = fnam.
wa_bdcdata–fval = fval.
APPEND wa_bdcdata TO it_bdcdata.
* ENDIF.
ENDFORM.
“bdc_field