論理パスとファイル名から完全パスを取得|FILE_GET_NAME_USING_PATH

ファイル連携の出力先ディレクトリは環境ごとに設定し、ファイル名だけをプログラムで決めたい場合があります。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別のパス設定を活用できます。

設定・エラー時に確認すること

  1. FILEで論理パスが定義され、対象OSの構文グループに物理パスが割り当てられているか。
  2. 指定したファイル名が空でないか、想定外の区切り文字や..を含まないか。外部入力をそのまま使わない。
  3. 作成したフルパスが意図するサーバー上の場所か。パス解決の成功と、ファイルの存在・権限・書き込み成功は別に確認する。

パス解決後にファイルを扱う場合、OPEN DATASETなどの戻り値も確認してください。ユーザーが物理ファイル名を指定できる処理では、許可ディレクトリ外へのアクセスを防ぐ設計と検証が必要です。

参考・関連記事

関連記事

PAGE TOP