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

概要

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.