Zbp Contact Load

Embed Size (px)

DESCRIPTION

Contact load

Citation preview

REPORT zbp_contact_load.* Contact upload program.* Uploads data from a tab delimeted file.TYPE-POOLS : slis.TABLES : but000.SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.PARAMETERS : p_hdr AS CHECKBOX DEFAULT 'X'.PARAMETERS : rb_ps RADIOBUTTON GROUP rb USER-COMMAND sel DEFAULT 'X', p_file TYPE string MODIF ID 002 LOWER CASE, rb_as RADIOBUTTON GROUP rb, p_up_fol LIKE epsf-epsdirnam MODIF ID 001 LOWER CASE.SELECTION-SCREEN END OF BLOCK b1.CONSTANTS : c_delmt TYPE c VALUE cl_abap_char_utilities=>horizontal_tab.TYPES: BEGIN OF ty_datatab, line(1000), END OF ty_datatab, BEGIN OF ty_accdata, crm_contact_nr(10), search_term1(20), prospect_num(20), grouping(4), role(6), language(2), default_contact(1), function(4), functionname(40), department(4), departmentname(40), comments(40), firstname(40), lastname(40), middlename(40), title(4), academic_title(4), nickname(40), sex(1), employer(35), search_term2(20), building(20), flr(10), room(10), street(60), street2(40), street3(40), street4(40), house_no(10), location(40), home_building(20), floor(10), home_room(10), home_location(40), district(40), city(40), region(3), post_code(10), post_code_3(10), country(2), telephone(30), email(241), fax(30), END OF ty_accdata, BEGIN OF ty_msgout, slno(6) TYPE c, bpartner(20) TYPE c, message(225) TYPE c, END OF ty_msgout.DATA: gt_accdata TYPE TABLE OF ty_accdata, wa_accdata TYPE ty_accdata, gt_msgout TYPE TABLE OF ty_msgout, wa_msgout TYPE ty_msgout.DATA: ls_layout TYPE slis_layout_alv, lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.DATA: ls_cntrl_data LIKE bapibus1006_central, ls_pers_data LIKE bapibus1006_central_person, ls_addr_data LIKE bapibus1006_address, ls_rel_central LIKE bapibus1006002_central, ls_rel_address LIKE bapibus1006002_address, gt_telf_data TYPE TABLE OF bapiadtel, wa_telf_data TYPE bapiadtel, gt_fax_data TYPE TABLE OF bapiadfax, wa_fax_data TYPE bapiadfax, gt_email_data TYPE TABLE OF bapiadsmtp, wa_email_data TYPE bapiadsmtp, gt_return TYPE TABLE OF bapiret2, gt_role_ret TYPE TABLE OF bapiret2, gt_rel_ret TYPE TABLE OF bapiret2, wa_return TYPE bapiret2.DATA: lv_pexternal TYPE but000-bpext, gv_bpartner TYPE bapibus1006_head-bpartner, gv_role TYPE bapibus1006_head-partnerrole.DATA: ld_file LIKE rlgrap-filename, wa_string(1000) TYPE c, oref TYPE REF TO cx_root, text TYPE string.DATA: gt_but000 TYPE TABLE OF but000, wa_but000 TYPE but000, gt_but100 TYPE TABLE OF but100, wa_but100 TYPE but100, g_post(5) TYPE n, g_tot_rec TYPE i, g_err_rec TYPE i, g_succ_rec TYPE i, g_war_rec TYPE i.DATA: lv_tabix TYPE sy-tabix.AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. DATA: lv_file LIKE rlgrap-filename. CALL FUNCTION 'KD_GET_FILENAME_ON_F4' EXPORTING program_name = syst-repid dynpro_number = syst-dynnr field_name = 'P_FILE' static = 'X' mask = '.text, *.txt' CHANGING file_name = lv_file EXCEPTIONS mask_too_long = 1 OTHERS = 2. IF sy-subrc = 0. p_file = lv_file. ENDIF.AT SELECTION-SCREEN OUTPUT. LOOP AT SCREEN. IF rb_as = 'X'. IF screen-group1 = '002'. screen-input = 0. MODIFY SCREEN. CLEAR screen. ENDIF. ENDIF. IF rb_ps = 'X'. IF screen-group1 = '001'. screen-input = 0. MODIFY SCREEN. CLEAR screen. ENDIF. ENDIF. ENDLOOP. LOOP AT SCREEN. IF screen-group1 = '030'. screen-intensified = '1'. MODIFY SCREEN. ENDIF. ENDLOOP.AT SELECTION-SCREEN ON BLOCK b1. IF sy-ucomm = 'ONLI'. PERFORM validate_selection. ENDIF.START-OF-SELECTION. IF rb_as = 'X'. PERFORM read_from_as. ELSEIF rb_ps = 'X'. PERFORM read_from_ps. ENDIF. IF gt_accdata[] IS NOT INITIAL. IF p_hdr = 'X'. DELETE gt_accdata INDEX 1. ENDIF. CLEAR wa_msgout . REFRESH gt_msgout. lv_tabix = 0. SORT gt_accdata BY crm_contact_nr role. LOOP AT gt_accdata INTO wa_accdata. TRANSLATE wa_accdata-search_term1 TO UPPER CASE. TRANSLATE wa_accdata-prospect_num TO UPPER CASE. lv_tabix = sy-tabix. CLEAR: gv_bpartner, ls_cntrl_data, ls_pers_data, ls_addr_data, wa_return, lv_pexternal, wa_msgout, ls_rel_central, ls_rel_address. REFRESH: gt_telf_data, gt_fax_data, gt_email_data, gt_return, gt_role_ret, gt_rel_ret. IF wa_accdata-search_term1 IS NOT INITIAL. ls_cntrl_data-searchterm1 = wa_accdata-search_term1. ENDIF. IF wa_accdata-language IS NOT INITIAL. ls_pers_data-correspondlanguage = wa_accdata-language. ELSE. ls_pers_data-correspondlanguage = 'EN'. ENDIF. IF wa_accdata-firstname IS NOT INITIAL. ls_pers_data-firstname = wa_accdata-firstname. ENDIF. IF wa_accdata-lastname IS NOT INITIAL. ls_pers_data-lastname = wa_accdata-lastname. ENDIF. IF wa_accdata-middlename IS NOT INITIAL. ls_pers_data-middlename = wa_accdata-middlename. ENDIF. IF wa_accdata-title IS NOT INITIAL. ls_cntrl_data-title_key = wa_accdata-title. ENDIF. IF wa_accdata-academic_title IS NOT INITIAL. ls_pers_data-title_aca1 = wa_accdata-academic_title. ENDIF. IF wa_accdata-nickname IS NOT INITIAL. ls_pers_data-nickname = wa_accdata-nickname. ENDIF. IF wa_accdata-sex = 'F'. ls_pers_data-sex = '1'. ELSEIF wa_accdata-sex = 'M'. ls_pers_data-sex = '2'. ENDIF. IF wa_accdata-employer IS NOT INITIAL. ls_pers_data-employer = wa_accdata-employer. ENDIF. IF wa_accdata-search_term2 IS NOT INITIAL. ls_cntrl_data-searchterm2 = wa_accdata-search_term2. ENDIF. IF wa_accdata-street IS NOT INITIAL. ls_addr_data-street = wa_accdata-street. ENDIF. IF wa_accdata-street2 IS NOT INITIAL. ls_addr_data-str_suppl1 = wa_accdata-street2. ENDIF. IF wa_accdata-street3 IS NOT INITIAL. ls_addr_data-str_suppl2 = wa_accdata-street3. ENDIF. IF wa_accdata-street4 IS NOT INITIAL. ls_addr_data-str_suppl3 = wa_accdata-street4. ENDIF. IF wa_accdata-house_no IS NOT INITIAL. ls_addr_data-house_no = wa_accdata-house_no. ENDIF. IF wa_accdata-location IS NOT INITIAL. ls_addr_data-location = wa_accdata-location. ENDIF. IF wa_accdata-building IS NOT INITIAL. ls_addr_data-building = wa_accdata-home_building. ENDIF. IF wa_accdata-floor IS NOT INITIAL. ls_addr_data-floor = wa_accdata-floor. ENDIF. IF wa_accdata-room IS NOT INITIAL. ls_addr_data-room_no = wa_accdata-home_room. ENDIF. IF wa_accdata-district IS NOT INITIAL. ls_addr_data-district = wa_accdata-district. ENDIF. IF wa_accdata-city IS NOT INITIAL. ls_addr_data-city = wa_accdata-city. ENDIF. IF wa_accdata-region IS NOT INITIAL. TRANSLATE wa_accdata-region TO UPPER CASE. CONDENSE wa_accdata-region NO-GAPS. ls_addr_data-region = wa_accdata-region. ENDIF. IF NOT wa_accdata-country IS INITIAL. TRANSLATE wa_accdata-country TO UPPER CASE. ls_addr_data-country = wa_accdata-country. ENDIF. IF wa_accdata-country = 'US' OR wa_accdata-country = 'USA'. CLEAR g_post. IF NOT wa_accdata-post_code IS INITIAL. g_post = wa_accdata-post_code. UNPACK g_post TO g_post. ls_addr_data-postl_cod1 = g_post. ENDIF. ELSE. ls_addr_data-postl_cod1 = wa_accdata-post_code. ENDIF. IF wa_accdata-post_code_3 IS NOT INITIAL. ls_addr_data-postl_cod3 = wa_accdata-post_code_3. ENDIF. IF wa_accdata-language IS NOT INITIAL. ls_addr_data-langu = wa_accdata-language. ELSE. ls_addr_data-langu = 'EN'. ENDIF. CLEAR: wa_telf_data. IF wa_accdata-telephone IS NOT INITIAL. wa_telf_data-telephone = wa_accdata-telephone. APPEND wa_telf_data TO gt_telf_data. ENDIF. CLEAR: wa_fax_data. IF wa_accdata-fax IS NOT INITIAL. wa_fax_data-fax = wa_accdata-fax. APPEND wa_fax_data TO gt_fax_data. ENDIF. CLEAR: wa_email_data. IF wa_accdata-email IS NOT INITIAL. wa_email_data-e_mail = wa_accdata-email. APPEND wa_email_data TO gt_email_data. ENDIF. break sparimi. SELECT SINGLE * FROM but000 WHERE bu_sort1 = wa_accdata-search_term1. IF sy-subrc EQ 0. g_err_rec = g_err_rec + 1. wa_msgout-slno = lv_tabix. wa_msgout-bpartner = but000-bu_sort1. CONCATENATE 'Contact' but000-bu_sort1 'already exists with A/c nr' but000-partner INTO wa_msgout-message SEPARATED BY space. APPEND wa_msgout TO gt_msgout. CONTINUE. ENDIF. CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA' EXPORTING businesspartnerextern = wa_accdata-crm_contact_nr partnercategory = '1' partnergroup = wa_accdata-grouping centraldata = ls_cntrl_data centraldataperson = ls_pers_data addressdata = ls_addr_data duplicate_message_type = 'W' accept_error = 'X' IMPORTING businesspartner = gv_bpartner TABLES telefondata = gt_telf_data faxdata = gt_fax_data e_maildata = gt_email_data return = gt_return. IF NOT gt_return IS INITIAL. READ TABLE gt_return INTO wa_return WITH KEY type = 'E'. IF sy-subrc = 0. g_err_rec = g_err_rec + 1. wa_msgout-slno = lv_tabix. IF NOT lv_pexternal IS INITIAL. wa_msgout-bpartner = lv_pexternal. ELSE. wa_msgout-bpartner = wa_accdata-crm_contact_nr. ENDIF. wa_msgout-message = wa_return-message. APPEND wa_msgout TO gt_msgout. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_succ_rec = g_succ_rec + 1. wa_msgout-slno = lv_tabix. wa_msgout-bpartner = gv_bpartner. wa_msgout-message = 'Account created successfully'. APPEND wa_msgout TO gt_msgout. ENDIF. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. g_succ_rec = g_succ_rec + 1. wa_msgout-slno = lv_tabix. wa_msgout-bpartner = gv_bpartner. wa_msgout-message = 'Account created successfully'. APPEND wa_msgout TO gt_msgout. ENDIF.* Adding Role IF gv_bpartner IS NOT INITIAL AND wa_accdata-role IS NOT INITIAL. gv_role = wa_accdata-role. CALL FUNCTION 'BAPI_BUPA_ROLE_ADD' EXPORTING businesspartner = gv_bpartner businesspartnerrole = gv_role TABLES return = gt_role_ret. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF.* Adding Relation Ship. IF gv_bpartner IS NOT INITIAL AND wa_accdata-prospect_num IS NOT INITIAL. SELECT SINGLE * FROM but000 WHERE bu_sort1 = wa_accdata-prospect_num. IF sy-subrc NE 0. g_err_rec = g_err_rec + 1. wa_msgout-slno = lv_tabix. wa_msgout-bpartner = wa_accdata-prospect_num. CONCATENATE 'Prospect' wa_accdata-prospect_num 'does exists with A/C nr' but000-partner INTO wa_msgout-message SEPARATED BY space. APPEND wa_msgout TO gt_msgout. CONTINUE. ENDIF. IF wa_accdata-function IS NOT INITIAL. ls_rel_central-function = wa_accdata-function. ENDIF. IF wa_accdata-functionname IS NOT INITIAL. ls_rel_central-functionname = wa_accdata-functionname. ENDIF. IF wa_accdata-department IS NOT INITIAL. ls_rel_central-department = wa_accdata-department. ENDIF. IF wa_accdata-departmentname IS NOT INITIAL. ls_rel_central-departmentname = wa_accdata-departmentname. ENDIF. IF wa_accdata-comments IS NOT INITIAL. ls_rel_central-comments = wa_accdata-comments. ENDIF. IF wa_accdata-building IS NOT INITIAL. ls_rel_address-building_p = wa_accdata-building. ENDIF. IF wa_accdata-flr IS NOT INITIAL. ls_rel_address-floor = wa_accdata-flr. ENDIF. IF wa_accdata-room IS NOT INITIAL. ls_rel_address-room_no = wa_accdata-room. ENDIF. CALL FUNCTION 'BAPI_BUPR_CONTP_CREATE' EXPORTING businesspartner = but000-partner contactperson = gv_bpartner defaultrelationship = wa_accdata-default_contact centraldata = ls_rel_central addressdata = ls_rel_address duplicate_message_type = 'W' TABLES return = gt_rel_ret. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ENDIF. CLEAR wa_accdata. ENDLOOP. ENDIF.END-OF-SELECTION. DESCRIBE TABLE gt_accdata[] LINES g_tot_rec. IF NOT gt_msgout IS INITIAL. PERFORM f_proc_display_msgout. ENDIF.*&---------------------------------------------------------------------**& Form f_proc_display_msgout*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM f_proc_display_msgout . CLEAR lt_fieldcat. lt_fieldcat-col_pos = '1'. lt_fieldcat-fieldname = 'SLNO'. lt_fieldcat-seltext_m = 'SlNo.'. lt_fieldcat-outputlen = '06'. lt_fieldcat-key = 'X'. APPEND lt_fieldcat. CLEAR lt_fieldcat. lt_fieldcat-col_pos = '2'. lt_fieldcat-fieldname = 'BPARTNER'. lt_fieldcat-seltext_m = 'Business Partner'. lt_fieldcat-outputlen = '20'. lt_fieldcat-key = 'X'. APPEND lt_fieldcat. CLEAR lt_fieldcat. lt_fieldcat-col_pos = '3'. lt_fieldcat-fieldname = 'MESSAGE'. lt_fieldcat-seltext_m = 'Message Text'. lt_fieldcat-outputlen = '100'. APPEND lt_fieldcat. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_top_of_page = 'TOP-OF-PAGE' is_layout = ls_layout it_fieldcat = lt_fieldcat[] TABLES t_outtab = gt_msgout EXCEPTIONS program_error = 1 OTHERS = 2.ENDFORM. " F_PROC_DISPLAY_MSGOUT*&---------------------------------------------------------------------**& Form top-of-page*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM top-of-page. DATA: t_header TYPE slis_t_listheader, wa_header TYPE slis_listheader. wa_header-key = 'Input File Path:'. wa_header-typ = 'S'. wa_header-info = p_file.. APPEND wa_header TO t_header. CLEAR wa_header. wa_header-key = 'Total Records:'. wa_header-typ = 'S'. wa_header-info = g_tot_rec. APPEND wa_header TO t_header. CLEAR wa_header. wa_header-key = 'Error Records:'. wa_header-typ = 'S'. wa_header-info = g_err_rec. APPEND wa_header TO t_header. CLEAR wa_header. wa_header-key = 'Warning Records:'. wa_header-typ = 'S'. wa_header-info = g_war_rec. APPEND wa_header TO t_header. CLEAR wa_header. wa_header-key = 'Success Records:'. wa_header-typ = 'S'. wa_header-info = g_succ_rec. APPEND wa_header TO t_header. CLEAR wa_header. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = t_header.ENDFORM. "top-of-page*&---------------------------------------------------------------------**& Form read_from_as*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM read_from_as . OPEN DATASET ld_file FOR INPUT IN TEXT MODE ENCODING DEFAULT. IF sy-subrc EQ 0. DO. CLEAR: wa_string, wa_accdata. TRY . READ DATASET ld_file INTO wa_string. IF sy-subrc NE 0. EXIT. ENDIF. CATCH cx_sy_conversion_codepage INTO oref. text = oref->get_text( ). WRITE :/ sy-index, text. CHECK 1 = 2. ENDTRY.** Split fields at Delimiter SPLIT wa_string AT c_delmt INTO wa_accdata-crm_contact_nr wa_accdata-search_term1 wa_accdata-prospect_num wa_accdata-grouping wa_accdata-role wa_accdata-language wa_accdata-default_contact wa_accdata-function wa_accdata-functionname wa_accdata-department wa_accdata-departmentname wa_accdata-comments wa_accdata-firstname wa_accdata-lastname wa_accdata-middlename wa_accdata-title wa_accdata-academic_title wa_accdata-nickname wa_accdata-sex wa_accdata-employer wa_accdata-search_term2 wa_accdata-building wa_accdata-flr wa_accdata-room wa_accdata-street wa_accdata-street2 wa_accdata-street3 wa_accdata-street4 wa_accdata-house_no wa_accdata-location wa_accdata-home_building wa_accdata-floor wa_accdata-home_room wa_accdata-home_location wa_accdata-district wa_accdata-city wa_accdata-region wa_accdata-post_code wa_accdata-post_code_3 wa_accdata-country wa_accdata-telephone wa_accdata-email wa_accdata-fax. IF NOT wa_accdata IS INITIAL. APPEND wa_accdata TO gt_accdata. CLEAR wa_accdata. ENDIF. ENDDO. ENDIF. CLOSE DATASET ld_file.ENDFORM. " READ_FROM_AS*&---------------------------------------------------------------------**& Form read_from_ps*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM read_from_ps . CALL FUNCTION 'GUI_UPLOAD' EXPORTING filename = p_file filetype = 'ASC' has_field_separator = 'X' TABLES data_tab = gt_accdata 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.ENDFORM. " READ_FROM_PS*&---------------------------------------------------------------------**& Form validate_selection*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM validate_selection. IF rb_as = 'X' AND p_up_fol IS INITIAL. MESSAGE e899(sd) WITH 'Please enter File name (with path)'. ELSEIF rb_ps = 'X' AND p_file IS INITIAL. MESSAGE e899(sd) WITH 'Please Select a file'. ENDIF.ENDFORM. "VALIDATE_SELECTION