zip - unzip

CLASS APPLICATION DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      UNZIP,
      SET_PATH_LOCAL CHANGING VALUE(C_FILETYPE STRING,
      SET_PATH_SERVER CHANGING VALUE(C_FILETYPE STRING.

  PRIVATE SECTION.
    CLASS-DATAFILE_CONTENT  TYPE STRING_TABLE,
                LOCATION_TYPE TYPE STRING,
                FILE_PATH     TYPE STRING.
    CLASS-DATAO_ZIP TYPE REF TO CL_ABAP_ZIP.

    CLASS-METHODS:
      SHOW_ALV,
      READ_FILE IMPORTING CONTENT TYPE XSTRING,
      LOAD_ZIP_FILE.
ENDCLASS.

PARAMETERSP_FILE TYPE STRING OBLIGATORY.

CLASS APPLICATION IMPLEMENTATION.

  METHOD UNZIP.
    LOAD_ZIP_FILE).
    LOOP AT O_ZIP->FILES INTO DATA(FILE).
      O_ZIP->GET(
      EXPORTING
        NAME FILE-NAME
      IMPORTING
        CONTENT DATA(CONTENT).

      READ_FILECONTENT ).
    ENDLOOP.
    SHOW_ALV).
  ENDMETHOD.

  METHOD READ_FILE.
    DATA FILE_STR TYPE STRING.
*    CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
*      EXPORTING
*        BUFFER        = CONT
*      IMPORTING
*        OUTPUT_LENGTH = OLEN
*      TABLES
*        BINARY_TAB    = XTAB.
*    CALL FUNCTION 'SCMS_BINARY_TO_STRING'
*      EXPORTING
*        INPUT_LENGTH = OLEN
*      IMPORTING
*        TEXT_BUFFER  = LS
*      TABLES
*        BINARY_TAB   = XTAB
*      EXCEPTIONS
*        FAILED       = 1
*        OTHERS       = 2.
*    IF SY-SUBRC <> 0.
*      EXIT.
*    ENDIF.
    CL_ABAP_CONV_IN_CE=>CREATEENCODING '8000' )->CONVERTEXPORTING INPUT CONTENT IMPORTING DATA FILE_STR ).

    SPLIT FILE_STR AT CL_ABAP_CHAR_UTILITIES=>CR_LF INTO TABLE FILE_CONTENT.
  ENDMETHOD.

  METHOD LOAD_ZIP_FILE.
    DATA:FLEN  TYPE I,
         XHEAD TYPE XSTRING,
         XLINE TYPE X255,
         XTAB  TYPE TABLE OF X255.

    CASE LOCATION_TYPE.
      WHEN 'LOCAL'.
        CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD(
        EXPORTING
          FILENAME FILE_PATH
          FILETYPE 'BIN'
        IMPORTING
          FILELENGTH FLEN
        CHANGING
          DATA_TAB XTAB ).

        CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
          EXPORTING
            INPUT_LENGTH FLEN
          IMPORTING
            BUFFER       XHEAD
          TABLES
            BINARY_TAB   XTAB
          EXCEPTIONS
            FAILED       1
            OTHERS       2.
      WHEN 'SERVER'.
        OPEN DATASET FILE_PATH FOR INPUT IN BINARY MODE.

        READ DATASET FILE_PATH INTO XHEAD.

        CLOSE DATASET FILE_PATH.
      WHEN OTHERS.
    ENDCASE.

    IF SY-SUBRC <> OR XHEAD IS INITIAL.
      IF O_ZIP IS NOT INITIAL.
        FREE O_ZIP.
      ENDIF.
      RETURN.
    ENDIF.

    CREATE OBJECT O_ZIP.
    O_ZIP->LOADXHEAD ).
  ENDMETHOD.

  METHOD SHOW_ALV.
*    DATA: SALV      TYPE REF TO CL_SALV_TABLE,
*          FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.
*    CL_SALV_TABLE=>FACTORY( IMPORTING R_SALV_TABLE = SALV
*    CHANGING T_TABLE = FILE_CONTENT  ).
*    FUNCTIONS = SALV->GET_FUNCTIONS( ).
*    FUNCTIONS->SET_ALL( ABAP_TRUE ).
*    SALV->DISPLAY( ).
  ENDMETHOD.

  METHOD SET_PATH_LOCAL.
    DATAFILES TYPE FILETABLE,
          RC    TYPE I.

    CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG(
    CHANGING
      FILE_TABLE FILES
      RC         RC ).
    IF FILES[] IS NOT INITIAL.
      C_FILE FILES[ ].
      FILE_PATH FILES[ ].
      LOCATION_TYPE 'LOCAL'.
    ENDIF.
  ENDMETHOD.

  METHOD SET_PATH_SERVER.
    DATA FILE TYPE DXFIELDS-LONGPATH.

    CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
      EXPORTING
*       I_LOCATION_FLAG       = ' ' => A: Application server, P: Presentation server
        I_SERVER       ''
        I_PATH         '/nas/shareif/BWH/500/bw_upload/BPC_Other/temp'
*       FILEMASK       = '*.*'
*       FILEOPERATION  = 'R'
      IMPORTING
*       O_LOCATION_FLAG       =
*       O_SERVER       =
        O_PATH         FILE
*       ABEND_FLAG     =
      EXCEPTIONS
        RFC_ERROR      1
        ERROR_WITH_GUI 2
        OTHERS         3.
    IF SY-SUBRC 0.
      FILE_PATH FILE.
      C_FILE FILE_PATH.
      LOCATION_TYPE 'SERVER'.
    ENDIF.

*    CALL FUNCTION '/SAPDMC/LSM_F4_SERVER_FILE'
**      EXPORTING
**       DIRECTORY        = 'X'
**        FILEMASK         = 'DIRECTORY'
*      IMPORTING
*        SERVERFILE       = FILE_PATH
*      EXCEPTIONS
*        CANCELED_BY_USER = 1
*        OTHERS           = 2.
*
*    IF SY-SUBRC = 0.
*      C_FILE = FILE_PATH.
*      LOCATION_TYPE = 'SERVER'.
*    ENDIF.

  ENDMETHOD.
ENDCLASS.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*  APPLICATION=>SET_PATH_LOCAL( CHANGING C_FILE = P_FILE ).
  APPLICATION=>SET_PATH_SERVERCHANGING C_FILE P_FILE ).

START-OF-SELECTION.
  APPLICATION=>UNZIP).

Comments