CLASS APPLICATION DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
UNZIP,
SET_PATH_LOCAL CHANGING VALUE(C_FILE) TYPE STRING,
SET_PATH_SERVER CHANGING VALUE(C_FILE) TYPE STRING.
PRIVATE SECTION.
CLASS-DATA: FILE_CONTENT TYPE STRING_TABLE,
LOCATION_TYPE TYPE STRING,
FILE_PATH TYPE STRING.
CLASS-DATA: O_ZIP TYPE REF TO CL_ABAP_ZIP.
CLASS-METHODS:
SHOW_ALV,
READ_FILE IMPORTING CONTENT TYPE XSTRING,
LOAD_ZIP_FILE.
ENDCLASS.
PARAMETERS: P_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_FILE( CONTENT ).
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=>CREATE( ENCODING = '8000' )->CONVERT( EXPORTING 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 <> 0 OR XHEAD IS INITIAL.
IF O_ZIP IS NOT INITIAL.
FREE O_ZIP.
ENDIF.
RETURN.
ENDIF.
CREATE OBJECT O_ZIP.
O_ZIP->LOAD( XHEAD ).
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.
DATA: FILES 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[ 1 ].
FILE_PATH = FILES[ 1 ].
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_SERVER( CHANGING C_FILE = P_FILE ).
START-OF-SELECTION.
APPLICATION=>UNZIP( ).
PUBLIC SECTION.
CLASS-METHODS:
UNZIP,
SET_PATH_LOCAL CHANGING VALUE(C_FILE) TYPE STRING,
SET_PATH_SERVER CHANGING VALUE(C_FILE) TYPE STRING.
PRIVATE SECTION.
CLASS-DATA: FILE_CONTENT TYPE STRING_TABLE,
LOCATION_TYPE TYPE STRING,
FILE_PATH TYPE STRING.
CLASS-DATA: O_ZIP TYPE REF TO CL_ABAP_ZIP.
CLASS-METHODS:
SHOW_ALV,
READ_FILE IMPORTING CONTENT TYPE XSTRING,
LOAD_ZIP_FILE.
ENDCLASS.
PARAMETERS: P_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_FILE( CONTENT ).
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=>CREATE( ENCODING = '8000' )->CONVERT( EXPORTING 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 <> 0 OR XHEAD IS INITIAL.
IF O_ZIP IS NOT INITIAL.
FREE O_ZIP.
ENDIF.
RETURN.
ENDIF.
CREATE OBJECT O_ZIP.
O_ZIP->LOAD( XHEAD ).
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.
DATA: FILES 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[ 1 ].
FILE_PATH = FILES[ 1 ].
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_SERVER( CHANGING C_FILE = P_FILE ).
START-OF-SELECTION.
APPLICATION=>UNZIP( ).
Comments
Post a Comment