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

Ein Kommentar

  1. Birgit Liebhart-Stojic

    Hallo,
    vielen lieben Dank für den Code und schöne Grüße aus Österreich.

    Ich habe den Code in mein bestehendes Programm implementiert, allerdings mit der Option entweder Listausgabe oder Excel Export.

    Hier arbeite ich allerdings mit Layouts. In der Listausgabe berücksichtigt er mir das vorher im Parameter p_vari angegebene Layout, allerdings im Excel Export ignoriert er mir das Layout und gibt immer das DEFAULT Layout aus.

    Hast du sowas schon mal gehabt und lösen können? Ich habe schon verschiedene Ansätze gehabt, allerdings keine hat funktioniert.

    Würde mich über einen Austausch freuen.

Schreibe einen Kommentar

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