Zum Inhalt springen

ALV als CSV im Hintergrund exportieren

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.
Facebooktwitterpinterestlinkedinmail
Published inABAPSAP Entwicklung

Sei der Erste der einen Kommentar abgibt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert