*&---------------------------------------------------------------------*
*& Report ZAXYZ_C9U2_FILE_OPERATION
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZAXYZ_C9U2_FILE_OPERATION.
SELECTION-SCREEN : BEGIN OF LINE,
COMMENT 01(20) C_RFILE FOR FIELD RAD_FILE.
PARAMETERS: RAD_FILE TYPE C RADIOBUTTON GROUP RAD DEFAULT 'X' USER-COMMAND R1.
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_RBACH FOR FIELD RAD_BACH.
PARAMETERS: RAD_BACH TYPE C RADIOBUTTON GROUP RAD.
SELECTION-SCREEN : END OF LINE.
SELECTION-SCREEN SKIP 1.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_FILE FOR FIELD P_FILE.
PARAMETERS: P_FILE TYPE STRING VISIBLE LENGTH 50. "STRINGの場合,検索ヘルプが設定されていない
SELECTION-SCREEN: END OF LINE.
SELECTION-SCREEN: BEGIN OF LINE,
COMMENT 01(20) C_BATCH FOR FIELD P_BATCH.
PARAMETERS P_BATCH TYPE STRING VISIBLE LENGTH 50.
SELECTION-SCREEN: END OF LINE.
************************************************************************
* MODEL: CLASS
************************************************************************
CLASS LCL_MODEL_DATA DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF TY_RESULT,
VBELN TYPE VBELN,
ERNAM TYPE ERNAM,
END OF TY_RESULT.
CLASS-DATA: IT_RESULT TYPE TABLE OF TY_RESULT.
ENDCLASS.
CLASS LCL_MODEL_DATA IMPLEMENTATION.
ENDCLASS.
*&---------------------------------------------------------------------*
*& VIEW: CLASS
*&---------------------------------------------------------------------*
CLASS LCL_VIEW_RESULT DEFINITION.
PUBLIC SECTION.
METHODS: DISPLAY_DATA.
ENDCLASS.
CLASS LCL_VIEW_RESULT IMPLEMENTATION.
METHOD DISPLAY_DATA.
CL_SALV_TABLE=>FACTORY(
EXPORTING
LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = DATA(O_SALV)
CHANGING
T_TABLE = LCL_MODEL_DATA=>IT_RESULT
).
O_SALV->GET_FUNCTIONS( )->SET_DEFAULT(
* VALUE = IF_SALV_C_BOOL_SAP=>TRUE
).
O_SALV->DISPLAY( ).
ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& CONTROLLER: CLASS
*&---------------------------------------------------------------------*
CLASS LCL_MAIN DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
SETUP_GUI_FILE_SEARCH_HELP,
SETUP_BATCH_FILE_SEARCH_HELP,
UPDATE_SELECTION_SCREEN.
METHODS CONSTRUCTOR IMPORTING IM_TYPE TYPE C
IM_GUI_FILE TYPE STRING
IM_BATCH_FILE TYPE STRING.
METHODS:
EXCUTE_REPORT.
PRIVATE SECTION.
DATA: LOAD_TYPE TYPE C.
DATA: FILENAME TYPE STRING.
DATA: LO_VIEW TYPE REF TO LCL_VIEW_RESULT.
DATA: LO_MODEL TYPE REF TO LCL_MODEL_DATA.
METHODS:
GUI_LOAD,
BATCH_LOAD.
ENDCLASS.
CLASS LCL_MAIN IMPLEMENTATION.
METHOD CONSTRUCTOR.
LOAD_TYPE = SWITCH #( IM_TYPE
WHEN 'X' THEN 'G' "GUI UPLOAD
ELSE 'B' "BATCH LOAD
).
FILENAME = SWITCH #( IM_TYPE
WHEN 'X' THEN IM_GUI_FILE
ELSE IM_BATCH_FILE
).
ENDMETHOD.
METHOD SETUP_BATCH_FILE_SEARCH_HELP.
DATA: L_PATH TYPE DXFIELDS-LONGPATH.
CHECK RAD_BACH IS NOT INITIAL.
CALL FUNCTION 'F4_DXFILENAME_TOPRECURSION'
EXPORTING
I_LOCATION_FLAG = '1'
I_SERVER = 'HDB_SA'
I_PATH = '//tmp/'
FILEMASK = '*.*'
* FILEOPERATION = 'R'
IMPORTING
* O_LOCATION_FLAG =
* O_SERVER =
O_PATH = L_PATH
* ABEND_FLAG =
EXCEPTIONS
RFC_ERROR = 1
ERROR_WITH_GUI = 2
OTHERS = 3.
SHIFT L_PATH BY 1 PLACES.
P_BATCH = L_PATH.
ENDMETHOD.
METHOD SETUP_GUI_FILE_SEARCH_HELP.
DATA: L_FILE_TABLE TYPE STANDARD TABLE OF FILE_TABLE,
WA_SINGLE TYPE FILE_TABLE,
L_RC TYPE I.
CHECK RAD_FILE IS NOT INITIAL.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = 'OPEN DIALOG' " title of the file open dialog
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* WITH_ENCODING =
* INITIAL_DIRECTORY =
* MULTISELECTION =
CHANGING
FILE_TABLE = L_FILE_TABLE "Table Hloding Selected Files
RC = L_RC "Return Code, Number of Files or -1 If Error Occured
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
* 成功した場合
IF SY-SUBRC = 0.
READ TABLE L_FILE_TABLE INTO WA_SINGLE INDEX 1 TRANSPORTING FILENAME.
P_FILE = WA_SINGLE-FILENAME.
ENDIF.
ENDMETHOD.
METHOD UPDATE_SELECTION_SCREEN.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_FILE'.
SCREEN-INPUT = SWITCH #( RAD_FILE
WHEN 'X' THEN 1
ELSE 0
).
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'P_BATCH'.
SCREEN-INPUT = SWITCH #( RAD_FILE
WHEN 'X' THEN 1
ELSE 1
).
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD EXCUTE_REPORT.
LO_VIEW = NEW LCL_VIEW_RESULT( ). "初期化:VIEW
IF LOAD_TYPE = 'G'.
GUI_LOAD( ).
ELSE.
BATCH_LOAD( ).
ENDIF.
LO_VIEW->DISPLAY_DATA( ).
ENDMETHOD.
METHOD BATCH_LOAD.
* structure & string
DATA: WA_FILE TYPE LCL_MODEL_DATA=>TY_RESULT.
DATA: FILE_STRING TYPE STRING.
TRANSLATE FILENAME TO LOWER CASE.
OPEN DATASET FILENAME FOR INPUT IN TEXT MODE ENCODING DEFAULT.
DO.
READ DATASET FILENAME INTO FILE_STRING.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
SPLIT FILE_STRING AT CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
INTO WA_FILE-VBELN WA_FILE-ERNAM.
APPEND WA_FILE TO LCL_MODEL_DATA=>IT_RESULT.
ENDDO.
CLOSE DATASET FILENAME.
ENDMETHOD.
METHOD GUI_LOAD.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
FILENAME = FILENAME
* FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB "TABで分割
* HEADER_LENGTH = 0
* READ_BY_LINE = 'X'
* DAT_MODE = SPACE
* CODEPAGE = SPACE
* IGNORE_CERR = ABAP_TRUE
* REPLACEMENT = '#'
* VIRUS_SCAN_PROFILE =
* IMPORTING
* FILELENGTH =
* HEADER =
CHANGING
DATA_TAB = LCL_MODEL_DATA=>IT_RESULT
* ISSCANPERFORMED = SPACE
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
NOT_SUPPORTED_BY_GUI = 17
ERROR_NO_GUI = 18
OTHERS = 19.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
ENDMETHOD.
ENDCLASS.
************************************************************************
* INITIALIZATION
************************************************************************
INITIALIZATION.
PERFORM F_INIT_SET.
************************************************************************
* SearchHelp - Definition
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
LCL_MAIN=>SETUP_BATCH_FILE_SEARCH_HELP( ).
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_BATCH.
LCL_MAIN=>SETUP_BATCH_FILE_SEARCH_HELP( ).
AT SELECTION-SCREEN OUTPUT.
LCL_MAIN=>UPDATE_SELECTION_SCREEN( ).
************************************************************************
* Main Program
************************************************************************
START-OF-SELECTION.
DATA(O_REPORT) = NEW LCL_MAIN(
IM_TYPE = RAD_FILE
IM_GUI_FILE = P_FILE
IM_BATCH_FILE = P_BATCH
).
O_REPORT->EXCUTE_REPORT( ).
"model view controller
"selection-screen
"process selection-screen, controller,
*&---------------------------------------------------------------------*
*& Form F_INIT_SET
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM F_INIT_SET .
MOVE:
'ONLINE' TO C_RFILE,
'BATCH' TO C_RBACH,
'ONLINE' TO C_FILE,
'BATCH' TO C_BATCH.
ENDFORM.
ABAP 9 FILE_OPERATION文件操作代码块
于 2023-07-24 19:09:08 首次发布