概要
4.6CからECC6.0へバージョンアップする時にアドオンプログラム内に廃止された汎用モジュールを使用している事がある。
今後使用できなくなるため別のものに置換える必要があります。
今回廃止汎用モジュール「DOWNLOAD」の置換えについて一部解説していきます。
修正前後のサンプルコードがあるのでコーディングだけ確認するだけでも理解が深まると思います。
置換え方法
廃止汎用モジュール「DOWNLOAD」は以下2つの汎用モジュールを用いる事で置換える事が出来ます。
- 汎用モジュール「GUI_FILE_SAVE_DIALOG」
- 汎用モジュール「GUI_DOWNLOAD」
置換えポイント
置換える際のポイントは以下となります。
- 型の変換
- 中止ボタンの返却値
- エラー判定
型の変換
廃止汎用モジュールで使用していた変数をそのまま使用すると型が異なるパラメータがあるため、ショートダンプの原因となります。
そのためパラメータの型を確認し、必要に応じて型変換を行う必要があります。
型が異なるパラメータとして以下例となります。
・廃止汎用モジュール「DOWNLOAD」のパラメータ「FILETYPE」はC型の3桁
・汎用モジュール「GUI_DOWNLOAD」のパラメータTILETYPEの型はC型の10桁(CHAR10)
中止ボタンの返却値
廃止汎用モジュールで取得する値と置換え後の汎用モジュールで取得した値が以下の様に異なる場合があります。
ポップアップ画面でキャンセルボタンを押下した時の返却値になります。
・廃止汎用モジュール「DOWNLOAD」のパラメータ「CANCEL」の返却値は’X’
・汎用モジュール「GUI_FILE_SAVE_DIALOG」のパラメータ「USER_ACTION」の返却値は’9′
エラー判定
1つの汎用モジュールから2つの汎用モジュールを用いるため、エラー判定を行うタイミングが異なる場合がある。
例えばポップアップ画面のキャンセルボタンを押下した時の判定は汎用モジュール「GUI_FILE_SAVE_DIALOG」で行う必要がある。
以下のサンプルソースコードを確認すると分かりやすいです。
置換えソースコードサンプル
修正後については廃止汎用モジュール「DOWNLOAD」が使用されていたものを
置換えて修正しているため、改修を想定したコーディングサンプルとなっています。
修正前コーディング
*エラー判定用 DATA: C_XFLG TYPE C VALUE 'X', L_ERROR TYPE C. *使用するパラメータ値 DATA: L_FILE LIKE RLGRAP-FILENAME, C_DAT(3) TYPE C VALUE 'DAT', L_FILEMASK_MASK(5) TYPE C VALUE '*.TXT', L_FILEMASK_TEXT(4) TYPE C VALUE 'テキスト', L_FILESIZE TYPE I, L_CANCEL TYPE C, IT_DATA_TAB TYPE TABLE OF BKPF. CALL FUNCTION 'DOWNLOAD' EXPORTING FILENAME = L_FILE FILETYPE = C_DAT ITEM = SY-TITLE FILEMASK_MASK = L_FILEMASK_MASK FILEMASK_TEXT = L_FILEMASK_TEXT IMPORTING FILESIZE = L_FILESIZE CANCEL = L_CANCEL TABLES DATA_TAB = IT_DATA_TAB EXCEPTIONS INVALID_FILESIZE = 1 INVALID_TABLE_WIDTH = 2 INVALID_TYPE = 3 NO_BATCH = 4 UNKNOWN_ERROR = 5 GUI_REFUSE_FILETRANSFER = 6 CUSTOMER_ERROR = 7 OTHERS = 8. IF SY-SUBRC = 0. * ダイアログ中止ボタン押下時 IF L_CANCEL = 'X'. * エラーフラグ設定 MOVE C_XFLG TO L_ERROR. MESSAGE S000(Z1) WITH 'ダウンロード処理を中止しました'. ENDIF. ELSE. * エラーフラグを設定 MOVE C_XFLG TO L_ERROR. MESSAGE S001(Z1) WITH 'ダウンロードに失敗しました'. ENDIF.
修正後コーディング
*エラー判定用 DATA: C_XFLG TYPE C VALUE 'X', L_ERROR TYPE C. *使用するパラメータ値 DATA: L_FILE LIKE RLGRAP-FILENAME, C_DAT(3) TYPE C VALUE 'DAT', L_FILEMASK_MASK(5) TYPE C VALUE '*.TXT', L_FILEMASK_TEXT(4) TYPE C VALUE 'テキスト', L_FILESIZE(60) TYPE C, L_CANCEL TYPE C, IT_DATA_TAB TYPE TABLE OF BKPF. ***新規追加変数(START) DATA: L_FILENAME2 TYPE STRING, L_PATH2 TYPE STRING, L_FULLPATH2 TYPE STRING, L_USER_ACTION2 TYPE I, L_P_FILE2 TYPE STRING, L_TITLE2 TYPE STRING, L_FILEMASK_MASK2 TYPE STRING, *L_FILEMASK_TEXTはパラメータが存在しない L_DAT2 TYPE CHAR10, L_FILESIZE2 TYPE I. ***新規追加変数(END) ***型変換を実施(START) L_FILENAME2 = L_FILE. L_TITLE2 = SY-TITLE. L_FILEMASK_MASK2 = L_FILEMASK_MASK. ***型変換を実施(END) *ダイアログの表示 CALL FUNCTION 'GUI_FILE_SAVE_DIALOG' EXPORTING WINDOW_TITLE = L_TITLE2 DEFAULT_FILE_NAME = L_FILENAME2 FILE_FILTER = L_FILEMASK_MASK2 IMPORTING FILENAME = L_FILENAME2 PATH = L_PATH2 FULLPATH = L_FULLPATH2 USER_ACTION = L_USER_ACTION2. IF SY-SUBRC = 0. * ダイアログ中止ボタン押下時 IF L_USER_ACTION2 = '9'. * エラーフラグ設定 MOVE C_XFLG TO L_ERROR. MESSAGE S000(Z1) WITH 'ダウンロード処理を中止しました'. ELSE. ***型変換を実施 L_DAT2 = C_DAT. ***型変換を実施 * 指定先パスにファイルをダウンロード CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING FILENAME = L_FILENAME2 FILETYPE = L_DAT2 IGNORE_CERR = ABAP_FALSE IMPORTING FILELENGTH = L_FILESIZE2 TABLES DATA_TAB = IT_DATA_TAB EXCEPTIONS FILE_WRITE_ERROR = 1 NO_BATCH = 2 GUI_REFUSE_FILETRANSFER = 3 INVALID_TYPE = 4 NO_AUTHORITY = 5 UNKNOWN_ERROR = 6 HEADER_NOT_ALLOWED = 7 SEPARATOR_NOT_ALLOWED = 8 FILESIZE_NOT_ALLOWED = 9 HEADER_TOO_LONG = 10 DP_ERROR_CREATE = 11 DP_ERROR_SEND = 12 DP_ERROR_WRITE = 13 UNKNOWN_DP_ERROR = 14 ACCESS_DENIED = 15 DP_OUT_OF_MEMORY = 16 DISK_FULL = 17 DP_TIMEOUT = 18 FILE_NOT_FOUND = 19 DATAPROVIDER_EXCEPTION = 20 CONTROL_FLUSH_ERROR = 21 OTHERS = 22. IF SY-SUBRC <> 0. * エラーフラグを設定 MOVE C_XFLG TO L_ERROR. MESSAGE S001(Z1) WITH 'ダウンロードに失敗しました'. ENDIF. ENDIF. ENDIF.