*&---------------------------------------------------------------------* *& Report ZDEMO_EXCEL11 *& Export Organisation and Contact Persons using ABAP2XLSX *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zdemo_excel11. TYPE-POOLS: abap. DATA: central_search TYPE bapibus1006_central_search, addressdata_search TYPE bapibus1006_addr_search, others_search TYPE bapibus1006_other_data. DATA: searchresult TYPE TABLE OF bapibus1006_bp_addr, return TYPE TABLE OF bapiret2. DATA: lines TYPE i. FIELD-SYMBOLS: LIKE LINE OF searchresult. DATA: centraldata TYPE bapibus1006_central, centraldataperson TYPE bapibus1006_central_person, centraldataorganization TYPE bapibus1006_central_organ. DATA: addressdata TYPE bapibus1006_address. DATA: relationships TYPE TABLE OF bapibus1006_relations. FIELD-SYMBOLS: LIKE LINE OF relationships. DATA: relationship_centraldata TYPE bapibus1006002_central. DATA: relationship_addresses TYPE TABLE OF bapibus1006002_addresses. FIELD-SYMBOLS: LIKE LINE OF relationship_addresses. DATA: lt_download TYPE TABLE OF zexcel_s_org_rel. FIELD-SYMBOLS: LIKE LINE OF lt_download. CONSTANTS: gc_save_file_name TYPE string VALUE '11_Export_Org_and_Contact.xlsx'. INCLUDE zdemo_excel_outputopt_incl. PARAMETERS: md TYPE flag RADIOBUTTON GROUP act. SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-00a. PARAMETERS: partnerc TYPE bu_type DEFAULT 2, " Organizations postlcod TYPE ad_pstcd1 DEFAULT '8334*', country TYPE land1 DEFAULT 'DE', maxsel TYPE bu_maxsel DEFAULT 100. SELECTION-SCREEN END OF BLOCK a. PARAMETERS: rel TYPE flag RADIOBUTTON GROUP act DEFAULT 'X'. SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-00b. PARAMETERS: reltyp TYPE bu_reltyp DEFAULT 'BUR011', partner TYPE bu_partner DEFAULT '191'. SELECTION-SCREEN END OF BLOCK b. START-OF-SELECTION. IF md = abap_true. " Read all Companies by Master Data central_search-partnercategory = partnerc. addressdata_search-postl_cod1 = postlcod. addressdata_search-country = country. others_search-maxsel = maxsel. others_search-no_search_for_contactperson = 'X'. CALL FUNCTION 'BAPI_BUPA_SEARCH_2' EXPORTING centraldata = central_search addressdata = addressdata_search OTHERS = others_search TABLES searchresult = searchresult return = return. SORT searchresult BY partner. DELETE ADJACENT DUPLICATES FROM searchresult COMPARING partner. ELSEIF rel = abap_true. " Read by Relationship SELECT but050~partner1 AS partner FROM but050 INNER JOIN but000 ON but000~partner = but050~partner1 AND but000~type = '2' INTO CORRESPONDING FIELDS OF TABLE searchresult WHERE but050~partner2 = partner AND but050~reltyp = reltyp. ENDIF. DESCRIBE TABLE searchresult LINES lines. WRITE: / 'Number of search results: ', lines. LOOP AT searchresult ASSIGNING . " Read Details of Organization CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' EXPORTING businesspartner = -partner IMPORTING centraldataorganization = centraldataorganization. " Read Standard Address of Organization CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' EXPORTING businesspartner = -partner IMPORTING addressdata = addressdata. " Add Organization to Download APPEND INITIAL LINE TO lt_download ASSIGNING . " Fill Organization Partner Numbers CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' EXPORTING businesspartner = -partner IMPORTING businesspartnerout = -org_number businesspartnerguidout = -org_guid. MOVE-CORRESPONDING centraldataorganization TO . MOVE-CORRESPONDING addressdata TO . CLEAR: addressdata. " Read all Relationships CLEAR: relationships. CALL FUNCTION 'BAPI_BUPA_RELATIONSHIPS_GET' EXPORTING businesspartner = -partner TABLES relationships = relationships. DELETE relationships WHERE relationshipcategory <> 'BUR001'. LOOP AT relationships ASSIGNING . " Read details of Contact person CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' EXPORTING businesspartner = -partner2 IMPORTING centraldata = centraldata centraldataperson = centraldataperson. " Read details of the Relationship CALL FUNCTION 'BAPI_BUPR_CONTP_GETDETAIL' EXPORTING businesspartner = -partner1 contactperson = -partner2 IMPORTING centraldata = relationship_centraldata. " Read relationship address CLEAR: relationship_addresses. CALL FUNCTION 'BAPI_BUPR_CONTP_ADDRESSES_GET' EXPORTING businesspartner = -partner1 contactperson = -partner2 TABLES addresses = relationship_addresses. READ TABLE relationship_addresses ASSIGNING WITH KEY standardaddress = 'X'. IF IS ASSIGNED. " Read Relationship Address CLEAR addressdata. CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' EXPORTING businesspartner = -partner addressguid = -addressguid IMPORTING addressdata = addressdata. APPEND INITIAL LINE TO lt_download ASSIGNING . CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' EXPORTING businesspartner = -partner1 IMPORTING businesspartnerout = -org_number businesspartnerguidout = -org_guid. CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' EXPORTING businesspartner = -partner2 IMPORTING businesspartnerout = -contpers_number businesspartnerguidout = -contpers_guid. MOVE-CORRESPONDING centraldataorganization TO . MOVE-CORRESPONDING addressdata TO . MOVE-CORRESPONDING centraldataperson TO . MOVE-CORRESPONDING relationship_centraldata TO . WRITE: / -partner1, -partner2. WRITE: centraldataorganization-name1(20), centraldataorganization-name2(10). WRITE: centraldataperson-firstname(15), centraldataperson-lastname(15). WRITE: addressdata-street(25), addressdata-house_no, addressdata-postl_cod1, addressdata-city(25). ENDIF. ENDLOOP. ENDLOOP. DATA: lo_excel TYPE REF TO zcl_excel, lo_worksheet TYPE REF TO zcl_excel_worksheet, lo_style_body TYPE REF TO zcl_excel_style, lo_border_dark TYPE REF TO zcl_excel_style_border, lo_column TYPE REF TO zcl_excel_column, lo_row TYPE REF TO zcl_excel_row. DATA: lv_style_body_even_guid TYPE zexcel_cell_style, lv_style_body_green TYPE zexcel_cell_style. DATA: row TYPE zexcel_cell_row. DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, ls_table_settings TYPE zexcel_s_table_settings. DATA: column TYPE zexcel_cell_column, column_alpha TYPE zexcel_cell_column_alpha, value TYPE zexcel_cell_value. FIELD-SYMBOLS: TYPE zexcel_s_fieldcatalog. " Creates active sheet CREATE OBJECT lo_excel. " Create border object CREATE OBJECT lo_border_dark. lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. "Create style with border even lo_style_body = lo_excel->add_new_style( ). lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_yellow. lo_style_body->borders->allborders = lo_border_dark. lv_style_body_even_guid = lo_style_body->get_guid( ). "Create style with border and green fill lo_style_body = lo_excel->add_new_style( ). lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. lo_style_body->borders->allborders = lo_border_dark. lv_style_body_green = lo_style_body->get_guid( ). " Get active sheet lo_worksheet = lo_excel->get_active_worksheet( ). lo_worksheet->set_title( 'Internal table' ). lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_download ). LOOP AT lt_field_catalog ASSIGNING . CASE -fieldname. WHEN 'ORG_NUMBER'. -position = 1. -dynpfld = abap_true. WHEN 'CONTPERS_NUMBER'. -position = 2. -dynpfld = abap_true. WHEN 'NAME1'. -position = 3. -dynpfld = abap_true. WHEN 'NAME2'. -position = 4. -dynpfld = abap_true. WHEN 'STREET'. -position = 5. -dynpfld = abap_true. WHEN 'HOUSE_NO'. -position = 6. -dynpfld = abap_true. WHEN 'POSTL_COD1'. -position = 7. -dynpfld = abap_true. WHEN 'CITY'. -position = 8. -dynpfld = abap_true. WHEN 'COUNTRYISO'. -position = 9. -dynpfld = abap_true. WHEN 'FIRSTNAME'. -position = 10. -dynpfld = abap_true. WHEN 'LASTNAME'. -position = 11. -dynpfld = abap_true. WHEN 'FUNCTIONNAME'. -position = 12. -dynpfld = abap_true. WHEN 'DEPARTMENTNAME'. -position = 13. -dynpfld = abap_true. WHEN 'TEL1_NUMBR'. -position = 14. -dynpfld = abap_true. WHEN 'TEL1_EXT'. -position = 15. -dynpfld = abap_true. WHEN 'FAX_NUMBER'. -position = 16. -dynpfld = abap_true. WHEN 'FAX_EXTENS'. -position = 17. -dynpfld = abap_true. WHEN 'E_MAIL'. -position = 18. -dynpfld = abap_true. WHEN OTHERS. -dynpfld = abap_false. ENDCASE. ENDLOOP. ls_table_settings-top_left_column = 'A'. ls_table_settings-top_left_row = '2'. ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium5. lo_worksheet->bind_table( ip_table = lt_download is_table_settings = ls_table_settings it_field_catalog = lt_field_catalog ). LOOP AT lt_download ASSIGNING . row = sy-tabix + 2. IF NOT -org_number IS INITIAL AND -contpers_number IS INITIAL. " Mark fields of Organization which can be changed green lo_worksheet->set_cell_style( ip_column = 'C' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'D' ip_row = row ip_style = lv_style_body_green ). * CATCH zcx_excel. " Exceptions for ABAP2XLSX ELSEIF NOT -org_number IS INITIAL AND NOT -contpers_number IS INITIAL. " Mark fields of Relationship which can be changed green lo_worksheet->set_cell_style( ip_column = 'L' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'M' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'N' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'O' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'P' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'Q' ip_row = row ip_style = lv_style_body_green ). lo_worksheet->set_cell_style( ip_column = 'R' ip_row = row ip_style = lv_style_body_green ). ENDIF. ENDLOOP. " Add Fieldnames in first row and hide the row LOOP AT lt_field_catalog ASSIGNING WHERE position <> '' AND dynpfld = abap_true. column = -position. column_alpha = zcl_excel_common=>convert_column2alpha( column ). value = -fieldname. lo_worksheet->set_cell( ip_column = column_alpha ip_row = 1 ip_value = value ip_style = lv_style_body_even_guid ). ENDLOOP. " Hide first row lo_row = lo_worksheet->get_row( 1 ). lo_row->set_visible( abap_false ). DATA: highest_column TYPE zexcel_cell_column, count TYPE int4, col_alpha TYPE zexcel_cell_column_alpha. highest_column = lo_worksheet->get_highest_column( ). count = 1. WHILE count <= highest_column. col_alpha = zcl_excel_common=>convert_column2alpha( ip_column = count ). lo_column = lo_worksheet->get_column( ip_column = col_alpha ). lo_column->set_auto_size( ip_auto_size = abap_true ). count = count + 1. ENDWHILE. *** Create output lcl_output=>output( lo_excel ).