V0.1cl_abap_zipcl_abap_conv_out_cezip压缩文件

    通过 read report读取程序代码,并压缩下载到本地

    :::success 🚧 测试版 :::

    说明

    • 通过读取 reposrc读取特定的程序名称
    • 通过 read report读取程序源码
    • 通过 cl_abap_conv_out_cestring转化为 xstring
    • 通过 cl_abap_zip将数据打包
    • 通过 GUI_DOWNLOAD下载 ```abap “ 读取 报表 SELECT progname, r3state FROM reposrc WHERE progname LIKE ‘Z%’ AND subc = ‘1’ INTO TABLE @DATA(lt_list).

    “ 读取源码 + zip

    DATA: lo_zip TYPE REF TO cl_abap_zip, lv_filename TYPE string. DATA: lt_source TYPE TABLE OF text1000 WITH EMPTY KEY, lv_source TYPE string, lv_length TYPE i, lv_xstring TYPE xstring, lv_zip_xstr TYPE xstring.

    TYPES: BEGIN OF ty_folder, folder TYPE char2, END OF ty_folder. DATA: lt_folder TYPE TABLE OF ty_folder, lv_folder TYPE char2, lv_max TYPE i. DATA: lo_cover_out TYPE REF TO cl_abap_conv_out_ce .

    lt_folder = VALUE #( ( folder = ‘MM’ ) ( folder = ‘PP’ ) ( folder = ‘SD’ ) ( folder = ‘FI’ ) ). SORT lt_folder BY folder.

    CREATE OBJECT lo_zip.

    lo_cover_out = cl_abap_conv_out_ce=>create( encoding = ‘UTF-8’ ).

    LOOP AT lt_list INTO DATA(ls_list).

    lv_folder = ls_list-progname+1(2). READ TABLE lt_folder TRANSPORTING NO FIELDS WITH KEY folder = lv_folder BINARY SEARCH. IF sy-subrc = 0. lv_filename = |{ lv_folder }\{ ls_list-progname }.abap|. ELSE. CONCATENATE ls_list-progname ‘.abap’ INTO lv_filename. ENDIF.

    READ REPORT ls_list-progname INTO lt_source STATE ‘A’ MAXIMUM WIDTH INTO lv_max. IF sy-subrc = 0.

    1. CONCATENATE LINES OF lt_source INTO lv_source SEPARATED BY cl_abap_char_utilities=>newline.
    2. "lv_source = lv_source && cl_abap_char_utilities=>newline.
    3. lo_cover_out->convert(
    4. EXPORTING data = lv_source
    5. IMPORTING buffer = lv_xstring ).

    ENDIF.

    lo_zip->add( name = lv_filename content = lv_xstring ).

    REFRESH lt_source. CLEAR: lv_filename, lv_xstring.

    ENDLOOP.

    lv_zip_xstr = lo_zip->save( ).

    TYPES: ty_hex TYPE x LENGTH 200.

    DATA: lt_xdata TYPE STANDARD TABLE OF ty_hex WITH DEFAULT KEY, lv_xlen TYPE i.

    lv_xlen = xstrlen( lv_zip_xstr ).

    CALL FUNCTION ‘SCMS_XSTRING_TO_BINARY’ EXPORTING buffer = lv_zip_xstr IMPORTING output_length = lv_xlen TABLES binary_tab = lt_xdata.

    DATA: lv_path TYPE string, lv_fullpath TYPE string.

    CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = ‘download zip’ default_extension = ‘zip’ default_file_name = ‘code’ file_filter = ‘(.zip)|.zip|’ CHANGING filename = lv_filename path = lv_path fullpath = lv_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 OTHERS = 4.

    CALL FUNCTION ‘GUI_DOWNLOAD’ EXPORTING bin_filesize = lv_xlen filename = lv_fullpath filetype = ‘BIN’ TABLES data_tab = lt_xdata. ```