【バージョンアップ】廃止汎用モジュール「UPLOAD」

概要

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.