*&---------------------------------------------------------------------* *& Report ZBDC_JOSHUA *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT z_bdc_zlt MESSAGE-ID zmessage. TYPES: BEGIN OF t_zpeople, id TYPE zpeople-id, name TYPE zpeople-name, gender TYPE zpeople-gender, country TYPE zpeople-country, city TYPE zpeople-city, company TYPE zpeople-company, phone TYPE zpeople-phone, birthday TYPE zpeople-birthday, university TYPE zpeople-university, END OF t_zpeople. *&---------------------------------------------------------------------* *& Data defination *&---------------------------------------------------------------------* DATA: * BDC data table it_bdc_data TYPE STANDARD TABLE OF bdcdata, * BDC message table it_bdcmsg TYPE STANDARD TABLE OF bdcmsgcoll, * BDC message work area wa_bdcmsg TYPE bdcmsgcoll, wa_bdc_data TYPE bdcdata, * Define global variable for error message gc_err_msg(60) TYPE c. PARAMETERS: p_path(200) TYPE c. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: mode_n TYPE char1 RADIOBUTTON GROUP rg1, mode_e TYPE char1 RADIOBUTTON GROUP rg1, mode_a TYPE char1 RADIOBUTTON GROUP rg1. SELECTION-SCREEN END OF BLOCK b1. DATA: gc_rc TYPE i, gt_filename TYPE filetable, gc_filename LIKE LINE OF gt_filename, gc_mode TYPE char1, it_zpeople TYPE TABLE OF t_zpeople, wa_zpeople TYPE t_zpeople. *&---------------------------------------------------------------------* *& AT SELECTION-SCREEN ON VALUE-REQUEST *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. PERFORM open_file. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. IF mode_n = 'X'. gc_mode = 'N'. ELSEIF mode_e = 'X'. gc_mode = 'E'. ELSEIF mode_a = 'X'. gc_mode = 'A'. ENDIF. PERFORM read_file. PERFORM frm_bdc . *&---------------------------------------------------------------------* *& Form frm_insert_bdcdata *&---------------------------------------------------------------------* * Insert data to bdc table *----------------------------------------------------------------------* * -->PA_DYNBEGIN Dynpro start flag * * -->PA_NAME Program name or screen field name * * -->PA_VALUE Screen no or field value * *----------------------------------------------------------------------* FORM frm_update_bdcdata USING pa_dynbegin TYPE any pa_name TYPE any pa_value TYPE any. DATA: lwa_bdcdata TYPE bdcdata. "BDC TABLE WORK AREA * Sign for bdc dynpro IF pa_dynbegin = 'X'. lwa_bdcdata-program = pa_name. "BDC PROGRAME NAME lwa_bdcdata-dynpro = pa_value. "BDC DYNPRO SCREEN NO lwa_bdcdata-dynbegin = pa_dynbegin. "BDC DYNPRO START ID ELSE. lwa_bdcdata-dynbegin = pa_dynbegin. "BDC DYNPRO START ID lwa_bdcdata-fnam = pa_name. "BDC SCREEN FIELD NAME lwa_bdcdata-fval = pa_value. "BDC VALUE FOR SCREEN FILED ENDIF. CONDENSE lwa_bdcdata-fval NO-GAPS. * Put value into the bdc table waiting for executing APPEND lwa_bdcdata TO it_bdc_data. CLEAR: lwa_bdcdata. ENDFORM. " frm_insert_bdcdata *&---------------------------------------------------------------------* *& Form frm_bdc * *&---------------------------------------------------------------------* * Confirm output type * *----------------------------------------------------------------------* FORM frm_bdc. LOOP AT it_zpeople INTO wa_zpeople. * Make the bdc data table empty every time REFRESH it_bdc_data. * Begin stuff BDC table PERFORM frm_update_bdcdata: * Screen 0100 USING 'X' 'ZPEOPLE' '0100', USING space 'BDC_OKCODE' '=NEXT', USING space 'WA_ZPEOPLE-ID' wa_zpeople-id, USING space 'WA_ZPEOPLE-NAME' wa_zpeople-name, USING space 'WA_ZPEOPLE-GENDER' wa_zpeople-gender, * Screen 0200 USING 'X' 'ZPEOPLE' '0200', USING space 'BDC_OKCODE' '=SAVE', USING space 'WA_ZPEOPLE-COUNTRY' wa_zpeople-country, USING space 'WA_ZPEOPLE-CITY' wa_zpeople-city, USING space 'WA_ZPEOPLE-COMPANY' wa_zpeople-company, USING space 'WA_ZPEOPLE-PHONE' wa_zpeople-phone, USING space 'WA_ZPEOPLE-BIRTHDAY' wa_zpeople-birthday, USING space 'WA_ZPEOPLE-UNIVERSITY' wa_zpeople-university. * Execute BDC with T-Code of VL02N REFRESH it_bdcmsg. CALL TRANSACTION 'ZPEOPLE' USING it_bdc_data MODE gc_mode UPDATE 'A' MESSAGES INTO it_bdcmsg. * Send error message CLEAR gc_err_msg. LOOP AT it_bdcmsg INTO wa_bdcmsg WHERE msgtyp = 'A' OR msgtyp = 'E' OR msgtyp = 'S'. MESSAGE ID wa_bdcmsg-msgid TYPE wa_bdcmsg-msgtyp NUMBER wa_bdcmsg-msgnr WITH wa_bdcmsg-msgv1 wa_bdcmsg-msgv2 wa_bdcmsg-msgv3 wa_bdcmsg-msgv4 INTO gc_err_msg. WRITE: / gc_err_msg. ENDLOOP. ENDLOOP. ENDFORM. " frm_bdc *&---------------------------------------------------------------------* *& Form READ_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM read_file . DATA: lc_file TYPE string, "rlgrap-filename, lt_data TYPE TABLE OF alsmex_tabline, lc_data LIKE LINE OF lt_data, lc_last LIKE LINE OF lt_data. lc_file = p_path. lc_last-row = 1. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 90 text = '读取数据中...'. CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = lc_file * FILETYPE = 'ASC' has_field_separator = cl_abap_char_utilities=>horizontal_tab * HEADER_LENGTH = 0 * READ_BY_LINE = 'X' * DAT_MODE = ' ' * CODEPAGE = ' ' * IGNORE_CERR = ABAP_TRUE * REPLACEMENT = '#' * CHECK_BOM = ' ' * IMPORTING * FILELENGTH = * HEADER = TABLES data_tab = it_zpeople EXCEPTIONS file_open_error = 1 file_read_error = 2 no_batch = 3 gui_refuse_filetransfer = 4 invalid_type = 5 no_authority = 6 unknown_error = 7 bad_data_format = 8 header_not_allowed = 9 separator_not_allowed = 10 header_too_long = 11 unknown_dp_error = 12 access_denied = 13 dp_out_of_memory = 14 disk_full = 15 dp_timeout = 16 OTHERS = 17. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDFORM. " READ_FILE *&---------------------------------------------------------------------* *& Form OPEN_FILE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM open_file . CALL METHOD cl_gui_frontend_services=>file_open_dialog EXPORTING file_filter = cl_gui_frontend_services=>filetype_text CHANGING file_table = gt_filename rc = gc_rc. IF gc_rc = 1. READ TABLE gt_filename INTO gc_filename INDEX 1. p_path = gc_filename. ENDIF. ENDFORM. " OPEN_FILE