TOP Include :
TYPE-POOLS : slis.
TYPES : BEGIN OF str_tab,
"Our Structure/template for upload goes here."
END OF str_tab.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA : wa_messtab TYPE bdcmsgcoll,
gv_msg TYPE string.
DATA : it_itab TYPE TABLE OF str_tab.
DATA : it_itab1 TYPE TABLE OF str_tab.
TYPES: BEGIN OF ty_msg,
DOC TYPE vblnr,
type TYPE char1,
msg TYPE char255,
END OF ty_msg.
DATA: lt_msg TYPE TABLE OF ty_msg,
ls_msg TYPE ty_msg.
DATA: nodata TYPE c VALUE '/'.
DATA: ctu TYPE c VALUE 'X',
mode TYPE c VALUE 'N',
update TYPE c VALUE 'S'.
DATA: mess TYPE TABLE OF bdcmsgcoll,
msg(255) TYPE c.
DATA: wa_layout TYPE lvc_s_layo.
DATA: lv_flag TYPE char1.
Selection Screen Include :
SELECTION-SCREEN : BEGIN OF BLOCK sel.
PARAMETERS: filename LIKE rlgrap-filename OBLIGATORY.
PARAMETERS: p_srow TYPE i.
PARAMETERS: p_erow TYPE i.
SELECTION-SCREEN END OF BLOCK sel.
Forms Include :
FORM file_f4 CHANGING p_filename.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
*
field_name = ' '
IMPORTING
file_name = filename.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form tab_file_upd
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM tab_file_upd .
DATA : it_data TYPE TABLE OF alsmex_tabline.
DATA : wa_data TYPE alsmex_tabline.
DATA : wa_itab TYPE str_tab.
DATA : value TYPE cawao_s_fields-num_val.
DATA : date1 TYPE d.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = filename
i_begin_col = '1'
i_begin_row = p_srow
i_end_col = '30'
i_end_row = p_erow
TABLES
intern = it_data
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
LOOP AT it_data INTO wa_data.
"Get column wise data from excel.
CASE wa_data-col.
WHEN '001'.
MOVE wa_data-value TO wa_itab-bldat.
WHEN '002'.
MOVE wa_data-value TO wa_itab-blart.
ENDCASE.
AT END OF row.
APPEND wa_itab TO it_itab1.
it_itab = it_itab1.
CLEAR wa_itab.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form bdc_open
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM bdc_open .
DATA: lv_index LIKE sy-tabix,
lv_idx LIKE sy-tabix,
lv_fieldname TYPE string.
DATA: count TYPE i.
LOOP AT it_itab1 INTO DATA(wa_itab1).
lv_idx = sy-tabix.
CLEAR bdcdata.
REFRESH bdcdata.
"Here goes the BDC extract from SHDB
perform bdc_dynpro using 'SAPMF05A' '0110'.
perform bdc_field using 'BDC_CURSOR'
'BSEG-VALUT'.
"End of BDC extract
CALL TRANSACTION 'Tcode_name' USING bdcdata
MODE mode
UPDATE update
MESSAGES INTO mess.
LOOP AT mess ASSIGNING FIELD-SYMBOL(<fs_mess>) WHERE msgtyp = 'E' or msgtyp = 'S'.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
id = <fs_mess>-msgid
lang = 'EN'
no = <fs_mess>-msgnr
v1 = <fs_mess>-msgv1
v2 = <fs_mess>-msgv2
v3 = <fs_mess>-msgv3
v4 = <fs_mess>-msgv4
IMPORTING
msg = gv_msg
EXCEPTIONS
not_found = 1
OTHERS = 2.
ls_msg-doc = lv_idx.
ls_msg-type = <fs_mess>-msgtyp.
ls_msg-msg = gv_msg.
APPEND ls_msg TO lt_msg.
CLEAR: ls_msg.
endloop.
clear mess.
ENDLOOP.
ENDFORM.
FORM bdc_field USING fnam fval.
IF fval <> nodata.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form display_log
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM display_log .
wa_layout-cwidth_opt = 'X'.
wa_layout-zebra = 'X'.
DATA(lt_fldcat) = VALUE lvc_t_fcat(
( fieldname = 'DOC' coltext = 'ID' tabname = 'LT_MSG' )
( fieldname = 'TYPE' coltext = 'Type' tabname = 'LT_MSG' )
( fieldname = 'MSG' coltext = 'Message' tabname = 'LT_MSG' ) ).
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout_lvc = wa_layout
it_fieldcat_lvc = lt_fldcat "it_fieldcat
TABLES
t_outtab = lt_msg
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ENDFORM.
Main Program :
REPORT ZBDC_UPLOAD.
INCLUDE ZFI_VEN_ADV_UPLD_TOP.
INCLUDE ZFI_VEN_ADV_UPLD_SEL.
INCLUDE ZFI_VEN_ADV_UPLD_FORM.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
PERFORM file_f4 CHANGING filename.
START-OF-SELECTION.
PERFORM tab_file_upd.
PERFORM bdc_open.
PERFORM display_log.