(在AT SELECTION-SCREEN事件下完成)
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LW_FILE
RECEIVING
RESULT = LW_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_UPFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*----- チェック結果判定
IF LW_RESULT <> CNS_TRUE. "ファイル存在しない
SET CURSOR FIELD 'P_UPFILE'. "カーソルをセット
*----- MSG: アップロードファイル &1 は存在しません
MESSAGE E116(ZNKCC1) WITH P_UPFILE.
ENDIF.
2, 对于指定下载到本地的文件,首先,将屏幕上输入的路径和文件名分隔开来,(在AT SELECTION-SCREEN事件下完成)
*----- CALL 汎用モジュール
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
FULL_NAME = P_ERFILE
IMPORTING
STRIPPED_NAME = W_FILE
FILE_PATH = P_O_PATH
EXCEPTIONS
X_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_ERFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
其次,检查分隔得到的文件路径(路径是否存在)。(在AT SELECTION-SCREEN事件下完成)
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_EXIST
EXPORTING
DIRECTORY = LW_PATH
RECEIVING
RESULT = LW_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_ERFILE'. "カーソルをセット
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
3, 实现对上传文件的检索帮助。
(在AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_UPFILE.事件下完成)
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = LW_TITLE "ファイル選択
CHANGING
FILE_TABLE = LTD_FILE
RC = LW_RETURN "リターン値
USER_ACTION = LW_ACTION "動作結果
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
*----- リターンコード判定
IF SY-SUBRC <> 0. "メソッド失敗時
SET CURSOR FIELD 'P_UPFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RETURN.
ENDIF.
*----- 結果情報判定
IF LW_RETURN < 0.
RETURN. "選択画面へ戻る
ENDIF.
*----- 結果情報判定
IF LW_ACTION = 0.
*----- [選択ファイルテーブル]の1件目を[アップロードファイル名]設定
READ TABLE LTD_FILE INTO LTH_FILE INDEX 1.
*----- リターンコード判定
IF SY-SUBRC = 0.
P_UPFILE = LTH_FILE-FILENAME.
ENDIF.
ENDIF.
4, 对下载的文件的检索帮助的实现同3。
5, 对下载的文件是保存帮助处理。
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
EXPORTING
WINDOW_TITLE = LW_TITLE "エラー出力ファイル選択
CHANGING
FILENAME = LW_FILENAME "ファイル名
PATH = LW_PATH "パース名
FULLPATH = LW_FULLPATH "ファイルパース名
USER_ACTION = LW_ACTION "動作結果
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
NOT_SUPPORTED_BY_GUI = 3
OTHERS = 4.
*----- リターンコード判定
IF SY-SUBRC <> 0. "CALL メソッド失敗時
SET CURSOR FIELD 'P_ERFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
RETURN. "選択画面へ戻る
ENDIF.
*----- 結果情報判定
IF LW_ACTION = 0.
*----- [ファイルパース名]を[選択画面-エラーファイル名]に設定する
P_ERFILE = LW_FULLPATH.
ENDIF.
6.另外的情况,屏幕上输入下载文件指定路径和文件名后,先检查该文件是否存在,如果存在,则需要弹出对话框,提醒用户是否覆盖原文件。
(在AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_DOFILE.事件下完成)
*----- エラーファイルの存在チェック
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LW_FILE "ファイル
RECEIVING
RESULT = LW_RESULT "チェック結果
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
*----- リターンコード判定
IF SY-SUBRC <> 0. "CALL メソッド失敗時
SET CURSOR FIELD 'P_ERFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
提示是否覆盖原文件:
*----- CALL 汎用モジュール
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
TITLEBAR = TEXT-006 "確認
TEXT_QUESTION = TEXT-007 "質問テキスト
TEXT_BUTTON_1 = TEXT-008 "はい
TEXT_BUTTON_2 = TEXT-009 "いいえ
DEFAULT_BUTTON = '1' "カーソル位置
DISPLAY_CANCEL_BUTTON = 'X' "取消押ボタン
START_COLUMN = 25 "POPUP の開始列
START_ROW = 6 "POPUP の開始行
IMPORTING
ANSWER = LW_ANSWER "リターンコード
EXCEPTIONS
TEXT_NOT_FOUND = 1
OTHERS = 2.
*----- リターンコード判定
IF SY-SUBRC <> 0. "CALLモジュール失敗時
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'S' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
LEAVE LIST-PROCESSING.
ENDIF.
*----- 結果情報判定
IF LW_ANSWER = '2' "いいえOR中止ボタン押下
OR LW_ANSWER = 'A'.
LEAVE LIST-PROCESSING. "選択画面へ戻る
ENDIF.
示例:
REPORT ZLEI_FILE_CHECK.
*----------------------------------------------------------------------*
* WORKS
*----------------------------------------------------------------------*
DATA:
W_FILE TYPE STRING. "ファイル名
*----------------------------------------------------------------------*
* CONSTANTS
*----------------------------------------------------------------------*
CONSTANTS:
CNS_TRUE(1) TYPE C VALUE 'X'. "TRUE
*----------------------------------------------------------------------*
* PARAMETERS
*----------------------------------------------------------------------*
PARAMETERS:
P_UPFILE LIKE RLGRAP-FILENAME, "Upload file
P_ERFILE LIKE RLGRAP-FILENAME. "Download file
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN
*----------------------------------------------------------------------*
AT SELECTION-SCREEN.
*----- アップロードファイルの存在チェック
PERFORM FRM_CHECK_UPFILE_EXIST.
*----- エラーファイルのチェック
PERFORM FRM_CHECK_ERFILE.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*----------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_UPFILE.
*----- アップロードファイルの検索ヘルプ
PERFORM FRM_SEARCH_UPFILE.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_ERFILE.
*----- エラー出力ファイルの検索ヘルプ
PERFORM FRM_SAVE_ERFILE.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_UPFILE_NAME
*&---------------------------------------------------------------------*
* アップロードファイルの存在チェック
*----------------------------------------------------------------------*
FORM FRM_CHECK_UPFILE_EXIST.
DATA:
LW_FILE TYPE STRING, "ファイル
LW_RESULT TYPE C. "チェック結果
LW_FILE = P_UPFILE.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_EXIST
EXPORTING
FILE = LW_FILE
RECEIVING
RESULT = LW_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_UPFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*----- チェック結果判定
IF LW_RESULT <> CNS_TRUE. "ファイル存在しない
SET CURSOR FIELD 'P_UPFILE'. "カーソルをセット
*----- MSG: アップロードファイル &1 は存在しません
MESSAGE E116(ZNKCC1) WITH P_UPFILE.
ENDIF.
ENDFORM. " FRM_CHECK_UPFILE_EXIST
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ERFILE
*&---------------------------------------------------------------------*
* エラーファイルのチェック
*----------------------------------------------------------------------*
FORM FRM_CHECK_ERFILE.
DATA:
LW_PATH TYPE RLGRAP-FILENAME. "パス
*----- エラーファイルの切りのチェック
PERFORM FRM_SPLIT_ERFILE_PATH CHANGING LW_PATH.
*----- エラーファイルのパスのチェック
PERFORM FRM_CHECK_DIRECTORY_EXIST USING LW_PATH.
*----- エラーファイルの存在のチェック
PERFORM FRM_CHECK_ERFILE_EXIST.
ENDFORM. " FRM_CHECK_ERFILE
*&---------------------------------------------------------------------*
*& Form FRM_SPLIT_ERFILE_PATH
*&---------------------------------------------------------------------*
* エラーファイルの切りのチェック
*----------------------------------------------------------------------*
* <-- P_O_PATH パス(CHANGINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_SPLIT_ERFILE_PATH CHANGING P_O_PATH TYPE RLGRAP-FILENAME.
*----- CALL 汎用モジュール
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
FULL_NAME = P_ERFILE
IMPORTING
STRIPPED_NAME = W_FILE
FILE_PATH = P_O_PATH
EXCEPTIONS
X_ERROR = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'P_ERFILE'. "カーソルをセット
*----- システムメッセージ出力
MESSAGE ID SY-MSGID TYPE 'E' NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " FRM_SPLIT_ERFILE_PATH
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DIRECTORY_EXIST
*&---------------------------------------------------------------------*
* エラーファイルのパスのチェック
*----------------------------------------------------------------------*
* --> P_I_PATH パス(USINGパラメータ)
*----------------------------------------------------------------------*
FORM FRM_CHECK_DIRECTORY_EXIST USING P_I_PATH TYPE RLGRAP-FILENAME.
DATA:
LW_RESULT TYPE C, "チェック結果
LW_PATH TYPE STRING. "ファイル
LW_PATH = P_I_PATH.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>DIRECTORY_EXIST
EXPORTING
DIRECTORY = LW_PATH
RECEIVING
RESULT = LW_RESULT
EXCEPTIONS
CNTL_ERROR = 1
ERROR_NO_GUI = 2
WRONG_PARAMETER = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC <> 0.</ < div>