BDC Example

You might also like

Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 4

SCREEN BEGIN OF BLOCK blck WITH FRAME TITLE text-011.

PARAMETERS:
p_file TYPE rlgrap-filename, " File Path
e_file TYPE rlgrap-filename OBLIGATORY, " Error File Path
p_mode TYPE c OBLIGATORY DEFAULT 'N'. " Mode
SELECTION-SCREEN END OF BLOCK blck.

* Structure Decleration
DATA :
BEGIN OF fs_field,
bsart TYPE eban-bsart, " Document Type.
matnr TYPE eban-matnr, " Material Number.
menge TYPE eban-menge, " Quantity Requested.
werks TYPE eban-werks, " Plant.
END OF fs_field.

*Internal table decleration


DATA:
t_field LIKE TABLE OF fs_field,
t_bdcdata LIKE TABLE OF bdcdata.

DATA:
fs_bdcdata LIKE LINE OF t_bdcdata, " Structure type of bdcdata
w_str TYPE string.

* Data decleration
DATA:
wa_path TYPE string ,
wa_error TYPE string,
wa_cnt TYPE i,
w_mode TYPE c,
wa_cnt1(2) TYPE n,
it_output type table of ty_s_error,
wa_output like line of it_output.

AT SELECTION-SCREEN.
* Mode 'A' = Foreground mode
* Mode 'N' = Background mode
IF p_mode = 'A' OR p_mode = 'N' .

w_mode = p_mode.

ELSE.
*Error Message
MESSAGE 'PLEASE ENTER THE MODE A or N' TYPE 'E'.
ENDIF.

* Opening window for path selection


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = p_file.

TYPES:
fs_struct(4096) TYPE c OCCURS 0 .
DATA:
w_struct TYPE fs_struct.

* Uploading excel file.


CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_field_seperator = 'X'
* I_LINE_HEADER =
i_tab_raw_data = w_struct
i_filename = p_file
TABLES
i_tab_converted_data = t_field
EXCEPTIONS
conversion_failed = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

*Opening window for Error file download


AT SELECTION-SCREEN ON VALUE-REQUEST FOR e_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = syst-cprog
dynpro_number = syst-dynnr
field_name = ' '
IMPORTING
file_name = e_file.

* start of selection event.


START-OF-SELECTION.

LOOP AT t_field INTO fs_field .


REFRESH: t_bdcdata.
CLEAR fs_bdcdata.
PERFORM populate_bdcdata.
PERFORM insert_data.
ENDLOOP. " LOOP AT it_c.

*********************(populate_bdcdata)***********************
* part 1
FORM populate_bdcdata.
PERFORM :
fill_bdc_data USING 'SAPMM06B' '0100' 'X' ' ' ' ',
fill_bdc_data USING '' '' '' 'EBAN-BSART' fs_field-bsart, " Document Type.
fill_bdc_data USING '' '' '' 'BDC_OKCODE' '/00', " Enter.

fill_bdc_data USING 'SAPMM06B' '0106' 'X' ' ' ' ',


fill_bdc_data USING '' '' '' 'EBAN-MATNR(01)' fs_field-matnr, " Material
Number.
fill_bdc_data USING '' '' '' 'EBAN-MENGE(01)' fs_field-menge, " Quantity
Requested.
fill_bdc_data USING '' '' '' 'EBAN-WERKS(01)' fs_field-werks, " Plant.
fill_bdc_data USING '' '' '' 'BDC_OKCODE' '/00', " Enter.

fill_bdc_data USING 'SAPMM06B' '0102' 'X' '' '' ,


fill_bdc_data USING '' '' '' 'BDC_OKCODE' '=BU'. " Save.

ENDFORM. " Form populate_bdc.

* part 2
FORM fill_bdc_data USING value(p_program)
value(p_dynpro)
value(p_dynbegin)
value(p_fnam)
value(p_fval).
CLEAR fs_bdcdata .
IF p_dynbegin = 'X' .
fs_bdcdata-program = p_program .
fs_bdcdata-dynpro = p_dynpro .
fs_bdcdata-dynbegin = p_dynbegin .
APPEND fs_bdcdata TO t_bdcdata.
ELSE.
fs_bdcdata-fnam = p_fnam.
fs_bdcdata-fval = p_fval.
CONDENSE fs_bdcdata-fval.
APPEND fs_bdcdata TO t_bdcdata.
ENDIF. " IF p_dynbeg..

ENDFORM . " Fill_entry

*********************(insert_data)****************************
FORM insert_data.

*Data decleration for Error Message


DATA:
t_msg TYPE TABLE OF bdcmsgcoll, " Collecting Error messages
w_msg TYPE bdcmsgcoll,
w_msg1(51).

* Call transaction 'ME51'


CALL TRANSACTION 'ME51' USING t_bdcdata
MODE w_mode
UPDATE 'S'
MESSAGES INTO t_msg.

IF sy-subrc EQ 0.
* Uploaded into the database
WRITE :/ 'DATA UPLOADED IN TABLE EBAN...' .
ELSE.
* Error Found
LOOP AT t_msg INTO w_msg WHERE msgtyp EQ 'E'.
* Format Message
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
msgid = w_msg-msgid
msgnr = w_msg-msgnr
msgv1 = w_msg-msgv1
msgv2 = w_msg-msgv2
msgv3 = w_msg-msgv3
msgv4 = w_msg-msgv4
IMPORTING
message_text_output = w_msg1.
wa_output-msg_err = w_msg1.

*Error message in downloaded file


data:
wa_string(10) type c.

wa_string = fs_field-matnr.

concatenate wa_string wa_output-msg_err into wa_output-msg_err separated by


space.

APPEND wa_output-msg_err TO it_output.

wa_error = e_file.

CALL FUNCTION 'GUI_DOWNLOAD'


EXPORTING
* BIN_FILESIZE =
filename = wa_error
* FILETYPE = 'ASC'
* APPEND = ' '
write_field_separator = 'X'
TABLES
data_tab = it_output
*
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF. " IF sy-subrc <> 0.

ENDLOOP.

ENDIF.

ENDFORM. "insert_data

You might also like