본문 바로가기

카테고리 없음

[ABAP] ZIP 파일로 압축하기

728x90
  DATA : lv_len TYPE i.
  DATA : lv_xstring TYPE xstring.

  DATA:g_zipper     TYPE REF TO cl_abap_zip.


  CONCATENATE sy-datum 'Locate a pharmacy' INTO gv_name.

  IF gt_disp[] IS NOT INITIAL.

    "이진이라서 길이 2배 해야됨.

    gv_len = gv_len * 2.

    CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
      EXPORTING
        input_length = gv_len
      IMPORTING
        buffer       = lv_xstring
      TABLES
        binary_tab   = binary_content[]
      EXCEPTIONS
        failed       = 1
        OTHERS       = 2.

    IF sy-subrc <> 0.

      RAISE ex_bin_conv_error.

    ENDIF.

    "create our zipper object
    CREATE OBJECT g_zipper.

    "add 1st file to zip
    CALL METHOD g_zipper->add
      EXPORTING
        name    = gv_name
        content = lv_xstring.
    "save zip
    CALL METHOD g_zipper->save
      RECEIVING
        zip = zip.


    PERFORM download_zip_file TABLES binary_content

                       USING zip lv_len.


  ELSE.
    MESSAGE '데이터가 없습니다' TYPE 'S'.
  ENDIF.


download_zip_file 

  DATA:lv_filename      TYPE string,
       lv_path          TYPE string,
       pv_dest_filepath TYPE string.

**   Get the binary stream for ZIP file


**   Convert the XSTRING to Binary table
      CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
        EXPORTING
          buffer        = zip
        IMPORTING
          output_length = lv_out
        TABLES
          binary_tab    = lt_contents[].

    lv_filename = p_dname.
      cl_gui_frontend_services=>gui_download(
     EXPORTING
           bin_filesize              = lv_out
           filename                  = lv_filename
           filetype                  = 'BIN'
     CHANGING
           data_tab                  = lt_contents[]
     EXCEPTIONS
           file_write_error          = 1
           no_batch                  = 2
           gui_refuse_filetransfer   = 3
           invalid_type              = 4
           no_authority              = 5
           unknown_error             = 6
           header_not_allowed        = 7
           separator_not_allowed     = 8
           filesize_not_allowed      = 9
           header_too_long           = 10
           dp_error_create           = 11
           dp_error_send             = 12
           dp_error_write            = 13
           unknown_dp_error          = 14
           access_denied             = 15
           dp_out_of_memory          = 16
           disk_full                 = 17
           dp_timeout                = 18
           file_not_found            = 19
           dataprovider_exception    = 20
           control_flush_error       = 21
           not_supported_by_gui      = 22
           error_no_gui              = 23
        OTHERS                    = 24
    ).
        IF sy-subrc <> 0.
        ENDIF.
728x90