Spannend war doch eine relativ kleine Anforderung. Ein Report besitzt eine ALV-Ausgabe und soll jetzt zusätzlich die Möglichkeit bieten diese Daten im Hintergrund als CSV-Datei abzulegen. Das geht relativ einfach wenn man weiß wie z.B. über die Klasse cl_salv_bs_lex.
Gerade in Fällen wo man den Feldkatalog in das CSV-File mitnehmen will ist das natürlich sehr komfortabel.
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_table)
CHANGING
t_table = lt_export
).
DATA(lt_fieldcatalog) = cl_salv_controller_metadata=>get_lvc_fieldcatalog(
r_columns = lo_table->get_columns( )
r_aggregations = lo_table->get_aggregations( ) ).
DATA(lo_table_res) = cl_salv_ex_util=>factory_result_data_table( r_data = REF #( lt_export )
t_fieldcatalog = lt_fieldcatalog ).
"Umwandlung CSV
cl_salv_bs_lex=>export_from_result_data_table(
EXPORTING
is_format = if_salv_bs_lex_format=>mc_format_csv
ir_result_data_table = lo_table_res
IMPORTING er_result_file = DATA(l_csv_xstring) ).
"Daten vorhanden
IF xstrlen( l_csv_xstring ) > 0.
l_pfad = p_pfad.
CALL FUNCTION 'AUTHORITY_CHECK_DATASET'
EXPORTING
activity = 'WRITE'
filename = l_pfad
EXCEPTIONS
no_authority = 1
activity_unknown = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
OPEN DATASET l_pfad FOR OUTPUT IN BINARY MODE MESSAGE l_msg.
IF sy-subrc = 0.
TRANSFER l_csv_xstring TO l_pfad.
CLOSE DATASET l_pfad.
WRITE: 'Export erfolgt'.
ELSE.
WRITE: 'Pfad konnte nicht geöffnet werden'.
ENDIF.
ELSE.
WRITE: 'Keine Daten ermittelt = Kein Export'.
ENDIF.
Sei der Erste der einen Kommentar abgibt