ローカルファイル

25.1 ローカルファイル

1. ローカルファイル

  • ローカルファイルとは
  • ローカルファイル操作
  • [ファイルを開く]ダイアログ(FILE OPEN DIALOG)
  • [ファイルを開く]ダイアログ(TMP_GUI_FILE_OPEN_DIALOG)
  • ファイルのアップロード(メソッドのGUI_UPLOAD)
  • ファイルのアップロード(汎用モジュールのGUI_UPLOAD)
  • [ファイルの保存]ダイアログ(FILE SAVE DIALOG)
  • [ファイルの保存]ダイアログ(GUI_FILE SAVE DIALOG)
  • ファイルダウンロード(メソッドのGUI_DOWNLOAD)
  • ファイルダウンロード(汎用モジュールのGUI_DOWNLOAD)

ローカルファイルとは

PCに保存されているファイルのことをローカルファイルと呼びます。
ここではローカルファイルの書き込みや読み込みを行うファイル操作について説明します。

ローカルファイル操作

他システムとデータのやり取りをするために、他システムから送信されたデータをSAPに取り込む際にデータをアップロードしたり、SAPからデータを送信するためにダウンロードすることがあります。
ファイル操作で使用するファイル形式として、項目と項目の間にタブ文字を挿入したテキストであるTSV形式、「,」(カンマ)で区切るCSV形式、区切り文字を使用せず《決まった位置に隙間なくデータを配置していく固定長形式があります。

ローカルファイル操作をする場合、クラスのCL_GUI_FRONTEND_SERVICESを使用します。
使用頻度が高いファイルの照会や、対応する汎用モジュールも存在します。

「ファイルを開く」ダイアログ(FILE OPEN DIALOG)

メソッドのFILE OPEN DIALOG を使用すると、 [ファイルを開く]ダイアログを表示することができます。汎用モジュールのように、テスト、実行も可能です。

[ファイルを開く]ダイアログ(FILE OPEN DIALOG)

REPORT ZTEST_PROGRAM_FILE_OP_DAIALOG.

* ローカル変数定義
  DATA:
        LW_RC TYPE I,
        LTD_FILETABLE TYPE FILETABLE.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      WINDOW_TITLE        = 'TEST TITLE'
      FILE_FILTER         = '.TEXT'
      INITIAL_DIRECTORY   = 'C:\'
    CHANGING
      FILE_TABLE          = LTD_FILETABLE
      RC                  = LW_RC. 

「ファイルを開く」ダイアログ(TMP_GUI_FILE_OPEN_DIALOG)

汎用モジュールのTMP_GUI_FILE_OPEN_DIALOGでも、 [ファイルを開く]ダイアログを表示することができます。

[ファイルを開く]ダイアログ(TMP_GUI_FILE_OPEN_DIALOG)

REPORT ZTEST_PROGRAM_FILE_OP_DAIALOG2.
* ローカル変数定義
  DATA:
        LW_RC TYPE I,
        LTD_FILETABLE TYPE FILETABLE.

CALL FUNCTION 'TMP_GUI_FILE_OPEN_DIALOG'
    EXPORTING
      WINDOW_TITLE         = 'TEST TITLE'
      FILE_FILTER          = '.TEXT'
      INIT_DIRECTORY       = 'C:\'
    IMPORTING
      RC                   = LW_RC
    TABLES
      FILE_TABLE           = LTD_FILETABLE. 

ファイルのアップロード(メソッドのGUI_UPLOAD)

メソッドのGUI_UPLOADを使用すると、指定したファイルパスからローカルファイルをアップロードし、内部テーブルに格納できます。

ファイルアップロード

REPORT ZTEST_PROGRAM_FILE_UPLOAD2.
TYPES: BEGIN OF T_FILE,
         VAL1(10) TYPE C,
         VAL2(10) TYPE C,
         VAL3(10) TYPE C,
       END OF T_FILE.
DATA: IT_FILE TYPE TABLE OF T_FILE. " 内部テーブル
DATA: ST_FILE TYPE T_FILE.                " データ格納用
DATA: W_FILE TYPE STRING. 
*ファイルパスを指定(選択画面上でユーザーが指定できるようにする方が良い)
W_FILE = 'C:\User\kanda-it\TEST.txt’.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_UPLOAD
EXPORTING
  FILENAME  = W_FILE
  FILETYPE  = 'ASC'
  HAS_FIELD_SEPARATOR = 'X'
CHANGING
 DATA_TAB = IT_FILE
EXCEPTIONS
 FILE_OPEN_ERROR = 1
 FILE_READ_ERROR = 2
 OTHERS = 3. 
LOOP AT IT_FILE INTO ST_FILE.
  WRITE: / ST_FILE-VAL1.
ENDLOOP.

MESSAGE S001(ZTEST2021). 

出力結果

内部テーブルにアップロードした内容

アップロードする内容

ファイルのアップロード(汎用モジュールのGUI_UPLOAD)

汎用モジュールのGUI_UPLOADでも同様にできます。

ファイルアップロード

REPORT ZTEST_PROGRAM_FILE_UPLOAD.
* 入力レイアウト
TYPES: BEGIN OF T_FILE,
         VAL1(10) TYPE C,
         VAL2(10) TYPE C,
         VAL3(10) TYPE C,
       END OF T_FILE.
DATA: IT_FILE TYPE TABLE OF T_FILE. " 内部テーブル
DATA: ST_FILE TYPE T_FILE.               " データ格納用
DATA: W_FILE TYPE STRING.

*ファイルパスを指定(選択画面上でユーザーが指定できるようにする方が良い)
W_FILE = 'C:\Users\kanda-it\TEST.txt'.

CALL FUNCTION 'GUI_UPLOAD'
  EXPORTING
    FILENAME                = W_FILE        " 入力ファイル名
    FILETYPE                = 'ASC'         " ファイルタイプ
    HAS_FIELD_SEPARATOR     = 'X'           " セパレータ(TAB)
  TABLES
    DATA_TAB                = IT_FILE.      " 内部テーブル

LOOP AT IT_FILE INTO ST_FILE.
  WRITE: / ST_FILE-VAL1.
ENDLOOP.

MESSAGE S001(ZTEST2021). 

出力結果

内部テーブルにアップロードした内容

アップロードする内容

[ファイルの保存]ダイアログ(FILE SAVE DIALOG)

メソッドのFILE SAVE DIALOGを使用すると、[ファイル保存]ダイア ログを表示することができます。

[ファイルの保存]ダイアログ

REPORT ZTEST_PROGRAM_FILE_SAVE_DIALOG.
  DATA:
        LW_RC TYPE I,
        LTD_FILETABLE TYPE FILETABLE.
  DATA:
        ST_FILENAME TYPE STRING,
        ST_FULLPATH TYPE STRING,
        ST_PATH TYPE STRING.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_SAVE_DIALOG
  EXPORTING
    WINDOW_TITLE = '保存ダイアログ'
    DEFAULT_FILE_NAME = 'デフォルトファイル名'
  CHANGING
    FILENAME = ST_FILENAME
    FULLPATH = ST_FULLPATH
    PATH        = ST_PATH
  EXCEPTIONS
   CNTL_ERROR           = 1
    ERROR_NO_GUI         = 2
    NOT_SUPPORTED_BY_GUI = 3
    OTHERS               = 4.

MESSAGE S001(ZTEST2021). 

出力結果

[ファイルの保存]ダイアログ(GUI_FILE_SAVE_DIALOG)

汎用モジュール GUI_FILE_SAVE_DIALOGでも同様です。

[ファイルの保存]ダイアログ

REPORT ZTEST_PROGRAM_FILE_SAVE_DLOG2.
* ローカル変数定義
  DATA:
        LW_RC TYPE I,
        LTD_FILETABLE TYPE FILETABLE.
  DATA:
        ST_FILENAME TYPE STRING,
        ST_FULLPATH TYPE STRING,
        ST_PATH TYPE STRING.

CALL FUNCTION 'GUI_FILE_SAVE_DIALOG'
  EXPORTING
    WINDOW_TITLE = '保存ダイアログ'
    DEFAULT_FILE_NAME = 'デフォルトファイル名'
  IMPORTING
    FILENAME  = ST_FILENAME
    FULLPATH = ST_FULLPATH
    PATH        = ST_PATH
  EXCEPTIONS
   CNTL_ERROR           = 1
    ERROR_NO_GUI         = 2
    NOT_SUPPORTED_BY_GUI = 3
    OTHERS               = 4.

MESSAGE S001(ZTEST2021). 

出力結果

ファイルダウンロード(メソッドのGUI_DOWNLOAD)

メソッドのGUI_DOWNLOADを使用すると、内部テーブルのデータを指定した
ファイルパスのローカルファイルにダウンロードすることができます。

ファイルダウンロード

REPORT ZTEST_PROGRAM_FILE_DOWNLOAD2.
“ 出力レイアウト
TYPES: BEGIN OF T_FILE,
         VAL1(10) TYPE C,
         VAL2(10) TYPE C,
         VAL3(10) TYPE C,
       END OF T_FILE.

DATA: IT_FILE TYPE TABLE OF T_FILE, ” 内部テーブル
      WA_FILE TYPE T_FILE.
DATA: W_FILE TYPE STRING.

* テスト用にデータを一行だけ格納
WA_FILE-VAL1 = ‘1’.
WA_FILE-VAL2 = ‘2’.
WA_FILE-VAL3 = ‘3’.
APPEND WA_FILE TO IT_FILE.

*ファイルパスを指定(選択画面上でユーザーが指定できるようにする方が良い)
W_FILE = 'C:\Users\kanda-it\TESTDOWNLOAD.txt'.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD
  EXPORTING
    FILENAME              = W_FILE  " 出力ファイル名
    FILETYPE              = 'ASC'   " ファイルタイプ
    WRITE_FIELD_SEPARATOR = 'X'     " タブ区切りで出力
  CHANGING
    DATA_TAB              = IT_FILE. " 内部テーブル

LOOP AT IT_FILE INTO WA_FILE.
  WRITE: / WA_FILE-VAL1, WA_FILE-VAL2, WA_FILE-VAL3.
ENDLOOP.

MESSAGE S001(ZTEST2021). 

出力結果

ファイルダウンロード(汎用モジュールのGUI_DOWNLOAD)

汎用モジュールのGUI_DOWNLOADでも同様にできます。

ファイルダウンロード

REPORT ZTEST_PROGRAM_FILE_DOWNLOAD.
“ 出力レイアウト
TYPES: BEGIN OF T_FILE,
         VAL1(10) TYPE C,
         VAL2(10) TYPE C,
         VAL3(10) TYPE C,
       END OF T_FILE.

DATA: IT_FILE TYPE TABLE OF T_FILE, ” 内部テーブル
      WA_FILE TYPE T_FILE.
DATA: W_FILE TYPE STRING.

* テスト用にデータを一行だけ格納
WA_FILE-VAL1 = ‘1’.
WA_FILE-VAL2 = ‘2’.
WA_FILE-VAL3 = ‘3’.
APPEND WA_FILE TO IT_FILE.
*ファイルパスを指定(選択画面上でユーザーが指定できるようにする方が良い)
W_FILE = 'C:\Users\kanda-it\TESTDOWNLOAD.txt'.

CALL FUNCTION 'GUI_DOWNLOAD'
  EXPORTING
    FILENAME              = W_FILE  " 出力ファイル名
    FILETYPE              = 'ASC'   " ファイルタイプ
    WRITE_FIELD_SEPARATOR = 'X'     " タブ区切りで出力
  TABLES
    DATA_TAB              = IT_FILE. " 内部テーブル

LOOP AT IT_FILE INTO WA_FILE.
  WRITE: / WA_FILE-VAL1, WA_FILE-VAL2, WA_FILE-VAL3.
ENDLOOP.

MESSAGE S001(ZTEST2021). 

出力結果


NEXT>> 25.2 サーバーファイル