概要
4.6CからECC6.0へバージョンアップする時にアドオンプログラム内に廃止された汎用モジュールを使用している事がある。
今後使用できなくなるため別のものに置換える必要があります。
今回廃止汎用モジュール「UPLOAD」の置換えについて一部解説していきます。
置換え方法
廃止汎用モジュール「UPLOAD」は以下2つの汎用モジュールを用いる事で置換える事が出来ます。
- メソッド「CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG」
- 汎用モジュール「GUI_UPLOAD」
ポイント
置換える際のポイントは以下となります。
- 型の変換
- 中止ボタンの返却値
- エラー判定
型の変換
以下の様に型が異なるため、廃止汎用モジュールで使用していた変数をそのまま使用するとショートダンプの原因となります。
そのため一度型変換を行う必要があります。
・廃止汎用モジュール「UPLOAD」のFILETYPEはC型の3桁
・汎用モジュール「GUI_UPLOAD」のTILETYPEの型は「CHAR10」(C型の10桁)
中止ボタンの返却値
廃止汎用モジュールで取得する値と置換え後の汎用モジュールで取得した値が以下の様に異なる場合があります。
ポップアップ画面でキャンセルボタンを押下した時の返却値になります。
・廃止汎用モジュール「UPLOAD」のCANCELの返却値は’X’
・メソッド「CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG」の返却値は’9′
エラー判定
1つの汎用モジュールから2つの汎用モジュールを用いるため、エラー判定を行うタイミングが異なる場合がある。
例えばポップアップ画面のキャンセルボタンを押下した時の判定はメソッド「CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG」で行う必要がある。
以下のサンプルソースコードを確認すると分かりやすいです。
置換えソースコードサンプル
修正後については廃止汎用モジュール「UPLOAD」が使用されていたものを置換えて修正しているため、改修を想定したコーディングサンプルとなっています。
修正前コーディング
*エラー判定用
DATA:
C_XFLG TYPE C VALUE 'X',
L_ERROR TYPE C.
*使用するパラメータ値
DATA:
L_FILE(128) TYPE C,
C_ASC(3) TYPE C VALUE 'ASC',
L_FILEMASK_MASK(5) TYPE C VALUE '*.csv',
L_FILEMASK_TEXT(3) TYPE C VALUE 'CSV',
L_FISIZE TYPE I,
L_FINAME(128) TYPE C,
L_FTYPE(3) TYPE C,
L_CANCEL(1) TYPE C,
IT_DATA_TAB TYPE TABLE OF VBAK.
CALL FUNCTION 'UPLOAD'
EXPORTING
FILENAME = L_FILE
FILETYPE = C_ASC
ITEM = SY-TITLE
FILEMASK_MASK = L_FILEMASK_MASK
FILEMASK_TEXT = L_FILEMASK_TEXT
IMPORTING
FILESIZE = L_FISIZE
ACT_FILENAME = L_FINAME
ACT_FILETYPE = L_FTYPE
CANCEL = L_CANCEL
TABLES
DATA_TAB = IT_DATA_TAB
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7.
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(128) TYPE C,
C_ASC(3) TYPE C VALUE 'ASC',
L_FILEMASK_MASK(5) TYPE C VALUE '*.csv',
L_FILEMASK_TEXT(3) TYPE C VALUE 'CSV',
L_FISIZE TYPE I,
L_FINAME(128) TYPE C,
L_FTYPE(3) TYPE C,
L_CANCEL(1) TYPE C,
IT_DATA_TAB TYPE TABLE OF VBAK.
***新規追加変数(START)
DATA:
L_FILENAME2 TYPE STRING,
L_FILENAME TYPE STRING,
L_RC TYPE I,
L_USER_ACTION2 TYPE I,
L_TITLE2 TYPE STRING,
L_FILEMASK_MASK2 TYPE STRING,
*L_FILEMASK_TEXTはパラメータが存在しない
L_ASC2 TYPE CHAR10,
L_FILESIZE2 TYPE I.
***新規追加変数(END)
***型変換を実施(START)
L_TITLE2 = SY-TITLE.
L_FILENAME = L_FILE.
L_FILEMASK_MASK2 = L_FILEMASK_MASK.
***型変換を実施(END)
*ダイアログの表示
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE = L_TITLE2
DEFAULT_FILENAME = L_FILENAME
FILE_FILTER = L_FILEMASK_MASK2
CHANGING
FILE_TABLE = L_FILENAME2
RC = L_RC
USER_ACTION = L_USER_ACTION2
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
OTHERS = 5.
IF SY-SUBRC = 0.
IF L_USER_ACTION2 = '9'.
* エラーフラグ設定
MOVE C_XFLG TO L_ERROR.
MESSAGE S000(Z1) WITH 'アップロード処理を中止しました'.
***型変換を実施(START)
L_ASC2 = C_ASC.
***型変換を実施(END)
* 指定先パスのファイルをアップロード
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = L_FILENAME2
FILETYPE = L_ASC2
IGNORE_CERR = ABAP_FALSE
IMPORTING
FILELENGTH = L_FILESIZE2
TABLES
DATA_TAB = IT_DATA_TAB
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
OTHERS = 17.
IF SY-SUBRC <> 0.
* エラーフラグを設定
MOVE C_XFLG TO L_ERROR.
MESSAGE S001(Z1) WITH 'アップロードに失敗しました'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.












