ファイル連携の出力先ディレクトリは環境ごとに設定し、ファイル名だけをプログラムで決めたい場合があります。FILE_GET_NAME_USING_PATHは、論理パスとファイル名を渡して、完全な物理ファイル名を取得する汎用モジュールです。
ここでいう論理パスは、FILEなどで定義した名前です。OSのディレクトリ文字列をLOGICAL_PATHに直接渡すものではありません。
FILE_GET_NAMEとの違い
| 使うもの | 入力 | 向いている場合 |
|---|---|---|
FILE_GET_NAME | 論理ファイル名。必要なら置換パラメータ | ファイル名の形式もFILEで管理したい |
FILE_GET_NAME_USING_PATH | 論理パス+実行時に決めたファイル名 | ディレクトリを設定で管理し、ファイル名は処理ごとに変えたい |
FILE_GET_NAMEも設定次第でディレクトリとファイル名を含む完全な物理ファイル名を返します。「前者はパスだけ、後者はフルパス」という違いではありません。
ABAPの呼び出し例
DATA lv_full_name TYPE string.
CALL FUNCTION 'FILE_GET_NAME_USING_PATH'
EXPORTING
logical_path = 'Z_IF_OUT_PATH'
file_name = 'orders_20261018.csv'
IMPORTING
file_name_with_path = lv_full_name
EXCEPTIONS
path_not_found = 1
missing_parameter = 2
operating_system_not_found = 3
file_system_not_found = 4
OTHERS = 5.
IF sy-subrc <> 0.
" FILEの論理パスとOS別物理パスの定義を確認する
RETURN.
ENDIF.
" lv_full_name を後続のファイル操作で使用する
例ではファイル名を固定していますが、実際には連携先の命名規則に従って日付や連番を組み立てます。物理パスが/sap/interface/out/<FILENAME>のように定義されていれば、<FILENAME>部分に指定したファイル名が入ります。区切り文字を自分で結合しないため、OS別のパス設定を活用できます。
設定・エラー時に確認すること
FILEで論理パスが定義され、対象OSの構文グループに物理パスが割り当てられているか。- 指定したファイル名が空でないか、想定外の区切り文字や
..を含まないか。外部入力をそのまま使わない。 - 作成したフルパスが意図するサーバー上の場所か。パス解決の成功と、ファイルの存在・権限・書き込み成功は別に確認する。
パス解決後にファイルを扱う場合、OPEN DATASETなどの戻り値も確認してください。ユーザーが物理ファイル名を指定できる処理では、許可ディレクトリ外へのアクセスを防ぐ設計と検証が必要です。
参考・関連記事
- FILE_GET_NAME:論理ファイル名から物理ファイル名を得る
- TRINT_SPLIT_FILE_AND_PATH:取得したフルパスを分割する
- 汎用モジュール一覧:ABAPの関連機能を探す