ABAP中對上傳檔案和下載檔案的一般檢查
檔案檢查的一般方法。實用。
設計一些通用模組,和使用方法。
[@more@]1, 首先對要上傳的檔案進行存在檢查。
(在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.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8356764/viewspace-972662/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SpringMVC中的檔案上傳和下載SpringMVC
- 檔案上傳和下載功能
- springboot 中檔案的上傳和下載Spring Boot
- 檔案上傳下載
- Java SE 檔案上傳和檔案下載的底層原理Java
- java上傳檔案跟批量下載檔案Java
- spring cloud feign 檔案上傳和檔案下載SpringCloud
- SpringMVC檔案上傳下載(單檔案、多檔案)SpringMVC
- 檔案的上傳與下載
- 檔案上傳與下載
- JAVA檔案上傳下載Java
- Vertx 檔案上傳下載
- centos上傳下載檔案CentOS
- 基於servlet的檔案上傳和下載Servlet
- thinkphp對檔案的上傳,刪除,下載操作PHP
- 使用SecureCRT上傳下載檔案Securecrt
- springcloud中feign檔案上傳、下載SpringGCCloud
- Netty接收HTTP檔案上傳及檔案下載NettyHTTP
- Jsp+Servlet實現檔案上傳下載(一)--檔案上傳JSServlet
- 前端實現檔案下載和拖拽上傳前端
- Java Struts檔案上傳和下載詳解Java
- 單個檔案上傳和批量檔案上傳
- Struts2的檔案上傳下載
- 【liunx命令】上傳下載檔案的方法
- MinIO上傳和下載檔案及檔案完整性校驗.
- minio檔案上傳與下載
- springboot 檔案上傳下載Spring Boot
- 檔案上傳下載小工具
- java 上傳 下載檔案工具類Java
- 檔案下載上傳小工具
- spring webflux檔案上傳下載SpringWebUX
- iterm2上傳下載檔案
- 從ftp上傳下載檔案(二)FTP
- 從ftp上傳下載檔案(一)FTP
- ASP.NET中檔案上傳下載方法集合ASP.NET
- 在Oracle中存取BLOB物件實現檔案的上傳和下載Oracle物件
- 檢查 http url 下載檔案的大小(qbit)HTTP
- java實現sftp檔案的上傳下載JavaFTP