abap2xlsx/ZA2X/PROG/ZDEMO_EXCEL11.slnk
Ivan c2419f3896 Code Inspector improvements
Change coding issues raised by code inspector.
Still some remain to fix.
2014-03-18 10:34:13 -05:00

434 lines
20 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<PROG NAME="ZDEMO_EXCEL11" VARCL="X" SUBC="1" RSTAT="K" RMAND="000" RLOAD="E" FIXPT="X" UCCHECK="X">
<textPool>
<language SPRAS="E">
<textElement ID="I" KEY="00A" ENTRY="Select by master data" LENGTH="132 "/>
<textElement ID="I" KEY="00B" ENTRY="Select by relationship" LENGTH="132 "/>
<textElement ID="R" ENTRY="abap2xlsx Demo: Export Organisation and Contact Persons" LENGTH="55 "/>
<textElement ID="S" KEY="COUNTRY" ENTRY="D ." LENGTH="19 "/>
<textElement ID="S" KEY="MAXSEL" ENTRY="D ." LENGTH="27 "/>
<textElement ID="S" KEY="MD" ENTRY=" Select by master data" LENGTH="29 "/>
<textElement ID="S" KEY="PARTNER" ENTRY="D ." LENGTH="24 "/>
<textElement ID="S" KEY="PARTNERC" ENTRY="D ." LENGTH="19 "/>
<textElement ID="S" KEY="POSTLCOD" ENTRY="D ." LENGTH="19 "/>
<textElement ID="S" KEY="P_PATH" ENTRY="D ." LENGTH="21 "/>
<textElement ID="S" KEY="REL" ENTRY=" Select by relationship" LENGTH="30 "/>
<textElement ID="S" KEY="RELTYP" ENTRY="D ." LENGTH="25 "/>
</language>
</textPool>
<source>*&amp;---------------------------------------------------------------------*
*&amp; Report ZDEMO_EXCEL11
*&amp; Export Organisation and Contact Persons using ABAP2XLSX
*&amp;---------------------------------------------------------------------*
*&amp;
*&amp;
*&amp;---------------------------------------------------------------------*
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: &lt;searchresult_line&gt; 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: &lt;relationship&gt; LIKE LINE OF relationships.
DATA: relationship_centraldata TYPE bapibus1006002_central.
DATA: relationship_addresses TYPE TABLE OF bapibus1006002_addresses.
FIELD-SYMBOLS: &lt;relationship_address&gt; LIKE LINE OF relationship_addresses.
DATA: lt_download TYPE TABLE OF zexcel_s_org_rel.
FIELD-SYMBOLS: &lt;download&gt; LIKE LINE OF lt_download.
CONSTANTS: gc_save_file_name TYPE string VALUE &apos;11_Export_Org_and_Contact.xlsx&apos;.
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, &quot; Organizations
postlcod TYPE ad_pstcd1 DEFAULT &apos;8334*&apos;,
country TYPE land1 DEFAULT &apos;DE&apos;,
maxsel TYPE bu_maxsel DEFAULT 100.
SELECTION-SCREEN END OF BLOCK a.
PARAMETERS: rel TYPE flag RADIOBUTTON GROUP act DEFAULT &apos;X&apos;.
SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-00b.
PARAMETERS: reltyp TYPE bu_reltyp DEFAULT &apos;BUR011&apos;,
partner TYPE bu_partner DEFAULT &apos;191&apos;.
SELECTION-SCREEN END OF BLOCK b.
START-OF-SELECTION.
IF md = abap_true.
&quot; 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 = &apos;X&apos;.
CALL FUNCTION &apos;BAPI_BUPA_SEARCH_2&apos;
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.
&quot; Read by Relationship
SELECT but050~partner1 AS partner FROM but050
INNER JOIN but000 ON but000~partner = but050~partner1 AND but000~type = &apos;2&apos;
INTO CORRESPONDING FIELDS OF TABLE searchresult
WHERE but050~partner2 = partner
AND but050~reltyp = reltyp.
ENDIF.
DESCRIBE TABLE searchresult LINES lines.
WRITE: / &apos;Number of search results: &apos;, lines.
LOOP AT searchresult ASSIGNING &lt;searchresult_line&gt;.
&quot; Read Details of Organization
CALL FUNCTION &apos;BAPI_BUPA_CENTRAL_GETDETAIL&apos;
EXPORTING
businesspartner = &lt;searchresult_line&gt;-partner
IMPORTING
centraldataorganization = centraldataorganization.
&quot; Read Standard Address of Organization
CALL FUNCTION &apos;BAPI_BUPA_ADDRESS_GETDETAIL&apos;
EXPORTING
businesspartner = &lt;searchresult_line&gt;-partner
IMPORTING
addressdata = addressdata.
&quot; Add Organization to Download
APPEND INITIAL LINE TO lt_download ASSIGNING &lt;download&gt;.
&quot; Fill Organization Partner Numbers
CALL FUNCTION &apos;BAPI_BUPA_GET_NUMBERS&apos;
EXPORTING
businesspartner = &lt;searchresult_line&gt;-partner
IMPORTING
businesspartnerout = &lt;download&gt;-org_number
businesspartnerguidout = &lt;download&gt;-org_guid.
MOVE-CORRESPONDING centraldataorganization TO &lt;download&gt;.
MOVE-CORRESPONDING addressdata TO &lt;download&gt;.
CLEAR: addressdata.
&quot; Read all Relationships
CLEAR: relationships.
CALL FUNCTION &apos;BAPI_BUPA_RELATIONSHIPS_GET&apos;
EXPORTING
businesspartner = &lt;searchresult_line&gt;-partner
TABLES
relationships = relationships.
DELETE relationships WHERE relationshipcategory &lt;&gt; &apos;BUR001&apos;.
LOOP AT relationships ASSIGNING &lt;relationship&gt;.
&quot; Read details of Contact person
CALL FUNCTION &apos;BAPI_BUPA_CENTRAL_GETDETAIL&apos;
EXPORTING
businesspartner = &lt;relationship&gt;-partner2
IMPORTING
centraldata = centraldata
centraldataperson = centraldataperson.
&quot; Read details of the Relationship
CALL FUNCTION &apos;BAPI_BUPR_CONTP_GETDETAIL&apos;
EXPORTING
businesspartner = &lt;relationship&gt;-partner1
contactperson = &lt;relationship&gt;-partner2
IMPORTING
centraldata = relationship_centraldata.
&quot; Read relationship address
CLEAR: relationship_addresses.
CALL FUNCTION &apos;BAPI_BUPR_CONTP_ADDRESSES_GET&apos;
EXPORTING
businesspartner = &lt;relationship&gt;-partner1
contactperson = &lt;relationship&gt;-partner2
TABLES
addresses = relationship_addresses.
READ TABLE relationship_addresses
ASSIGNING &lt;relationship_address&gt;
WITH KEY standardaddress = &apos;X&apos;.
IF &lt;relationship_address&gt; IS ASSIGNED.
&quot; Read Relationship Address
CLEAR addressdata.
CALL FUNCTION &apos;BAPI_BUPA_ADDRESS_GETDETAIL&apos;
EXPORTING
businesspartner = &lt;searchresult_line&gt;-partner
addressguid = &lt;relationship_address&gt;-addressguid
IMPORTING
addressdata = addressdata.
APPEND INITIAL LINE TO lt_download ASSIGNING &lt;download&gt;.
CALL FUNCTION &apos;BAPI_BUPA_GET_NUMBERS&apos;
EXPORTING
businesspartner = &lt;relationship&gt;-partner1
IMPORTING
businesspartnerout = &lt;download&gt;-org_number
businesspartnerguidout = &lt;download&gt;-org_guid.
CALL FUNCTION &apos;BAPI_BUPA_GET_NUMBERS&apos;
EXPORTING
businesspartner = &lt;relationship&gt;-partner2
IMPORTING
businesspartnerout = &lt;download&gt;-contpers_number
businesspartnerguidout = &lt;download&gt;-contpers_guid.
MOVE-CORRESPONDING centraldataorganization TO &lt;download&gt;.
MOVE-CORRESPONDING addressdata TO &lt;download&gt;.
MOVE-CORRESPONDING centraldataperson TO &lt;download&gt;.
MOVE-CORRESPONDING relationship_centraldata TO &lt;download&gt;.
WRITE: / &lt;relationship&gt;-partner1, &lt;relationship&gt;-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,
column_dimension TYPE REF TO zcl_excel_worksheet_columndime,
row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi.
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: lv_file TYPE xstring,
lv_bytecount TYPE i,
lt_file_tab TYPE solix_tab.
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: &lt;fs_field_catalog&gt; TYPE zexcel_s_fieldcatalog.
&quot; Creates active sheet
CREATE OBJECT lo_excel.
&quot; Create border object
CREATE OBJECT lo_border_dark.
lo_border_dark-&gt;border_color-rgb = zcl_excel_style_color=&gt;c_black.
lo_border_dark-&gt;border_style = zcl_excel_style_border=&gt;c_border_thin.
&quot;Create style with border even
lo_style_body = lo_excel-&gt;add_new_style( ).
lo_style_body-&gt;fill-&gt;fgcolor-rgb = zcl_excel_style_color=&gt;c_yellow.
lo_style_body-&gt;borders-&gt;allborders = lo_border_dark.
lv_style_body_even_guid = lo_style_body-&gt;get_guid( ).
&quot;Create style with border and green fill
lo_style_body = lo_excel-&gt;add_new_style( ).
lo_style_body-&gt;fill-&gt;fgcolor-rgb = zcl_excel_style_color=&gt;c_green.
lo_style_body-&gt;borders-&gt;allborders = lo_border_dark.
lv_style_body_green = lo_style_body-&gt;get_guid( ).
&quot; Get active sheet
lo_worksheet = lo_excel-&gt;get_active_worksheet( ).
lo_worksheet-&gt;set_title( &apos;Internal table&apos; ).
lt_field_catalog = zcl_excel_common=&gt;get_fieldcatalog( ip_table = lt_download ).
LOOP AT lt_field_catalog ASSIGNING &lt;fs_field_catalog&gt;.
CASE &lt;fs_field_catalog&gt;-fieldname.
WHEN &apos;ORG_NUMBER&apos;.
&lt;fs_field_catalog&gt;-position = 1.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;CONTPERS_NUMBER&apos;.
&lt;fs_field_catalog&gt;-position = 2.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;NAME1&apos;.
&lt;fs_field_catalog&gt;-position = 3.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;NAME2&apos;.
&lt;fs_field_catalog&gt;-position = 4.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;STREET&apos;.
&lt;fs_field_catalog&gt;-position = 5.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;HOUSE_NO&apos;.
&lt;fs_field_catalog&gt;-position = 6.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;POSTL_COD1&apos;.
&lt;fs_field_catalog&gt;-position = 7.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;CITY&apos;.
&lt;fs_field_catalog&gt;-position = 8.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;COUNTRYISO&apos;.
&lt;fs_field_catalog&gt;-position = 9.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;FIRSTNAME&apos;.
&lt;fs_field_catalog&gt;-position = 10.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;LASTNAME&apos;.
&lt;fs_field_catalog&gt;-position = 11.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;FUNCTIONNAME&apos;.
&lt;fs_field_catalog&gt;-position = 12.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;DEPARTMENTNAME&apos;.
&lt;fs_field_catalog&gt;-position = 13.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;TEL1_NUMBR&apos;.
&lt;fs_field_catalog&gt;-position = 14.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;TEL1_EXT&apos;.
&lt;fs_field_catalog&gt;-position = 15.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;FAX_NUMBER&apos;.
&lt;fs_field_catalog&gt;-position = 16.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;FAX_EXTENS&apos;.
&lt;fs_field_catalog&gt;-position = 17.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN &apos;E_MAIL&apos;.
&lt;fs_field_catalog&gt;-position = 18.
&lt;fs_field_catalog&gt;-dynpfld = abap_true.
WHEN OTHERS.
&lt;fs_field_catalog&gt;-dynpfld = abap_false.
ENDCASE.
ENDLOOP.
ls_table_settings-top_left_column = &apos;A&apos;.
ls_table_settings-top_left_row = &apos;2&apos;.
ls_table_settings-table_style = zcl_excel_table=&gt;builtinstyle_medium5.
lo_worksheet-&gt;bind_table( ip_table = lt_download
is_table_settings = ls_table_settings
it_field_catalog = lt_field_catalog ).
LOOP AT lt_download ASSIGNING &lt;download&gt;.
row = sy-tabix + 2.
IF NOT &lt;download&gt;-org_number IS INITIAL
AND &lt;download&gt;-contpers_number IS INITIAL.
&quot; Mark fields of Organization which can be changed green
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;C&apos;
ip_row = row
ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;D&apos;
ip_row = row
ip_style = lv_style_body_green
).
* CATCH zcx_excel. &quot; Exceptions for ABAP2XLSX
ELSEIF NOT &lt;download&gt;-org_number IS INITIAL
AND NOT &lt;download&gt;-contpers_number IS INITIAL.
&quot; Mark fields of Relationship which can be changed green
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;L&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;M&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;N&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;O&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;P&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;Q&apos; ip_row = row ip_style = lv_style_body_green
).
lo_worksheet-&gt;set_cell_style(
ip_column = &apos;R&apos; ip_row = row ip_style = lv_style_body_green
).
ENDIF.
ENDLOOP.
&quot; Add Fieldnames in first row and hide the row
LOOP AT lt_field_catalog ASSIGNING &lt;fs_field_catalog&gt;
WHERE position &lt;&gt; &apos;&apos; AND dynpfld = abap_true.
column = &lt;fs_field_catalog&gt;-position.
column_alpha = zcl_excel_common=&gt;convert_column2alpha( column ).
value = &lt;fs_field_catalog&gt;-fieldname.
lo_worksheet-&gt;set_cell( ip_column = column_alpha
ip_row = 1
ip_value = value
ip_style = lv_style_body_even_guid ).
ENDLOOP.
&quot; Hide first row
row_dimension = lo_worksheet-&gt;get_row_dimension( 1 ).
row_dimension-&gt;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-&gt;get_highest_column( ).
count = 1.
WHILE count &lt;= highest_column.
col_alpha = zcl_excel_common=&gt;convert_column2alpha( ip_column = count ).
column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = col_alpha ).
column_dimension-&gt;set_auto_size( ip_auto_size = abap_true ).
count = count + 1.
ENDWHILE.
* &quot; Set Column width manuall
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;A&apos; ).
* column_dimension-&gt;set_width( ip_width = 11 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;B&apos; ).
* column_dimension-&gt;set_width( ip_width = 11 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;C&apos; ).
* column_dimension-&gt;set_width( ip_width = 35 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;E&apos; ).
* column_dimension-&gt;set_width( ip_width = 18 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;F&apos; ).
* column_dimension-&gt;set_width( ip_width = 5 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;G&apos; ).
* column_dimension-&gt;set_width( ip_width = 6 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;H&apos; ).
* column_dimension-&gt;set_width( ip_width = 12 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;I&apos; ).
* column_dimension-&gt;set_width( ip_width = 3 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;J&apos; ).
* column_dimension-&gt;set_width( ip_width = 13 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;K&apos; ).
* column_dimension-&gt;set_width( ip_width = 13 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;L&apos; ).
* column_dimension-&gt;set_width( ip_width = 13 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;M&apos; ).
* column_dimension-&gt;set_width( ip_width = 13 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;N&apos; ).
* column_dimension-&gt;set_width( ip_width = 12 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;O&apos; ).
* column_dimension-&gt;set_width( ip_width = 9 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;P&apos; ).
* column_dimension-&gt;set_width( ip_width = 12 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;Q&apos; ).
* column_dimension-&gt;set_width( ip_width = 9 ).
* column_dimension = lo_worksheet-&gt;get_column_dimension( ip_column = &apos;R&apos; ).
* column_dimension-&gt;set_width( ip_width = 40 ).
*** Create output
lcl_output=&gt;output( lo_excel ).</source>
</PROG>