[CAIレシピ] ファイルの存在チェック

## はじめに
この記事では、指定したファイルがSecure Agent上に存在しているかをチェックする方法を確認します。XMLファイルを対象にチェックする場合、その他のタイプのファイルも含めてチェックする場合とで実装が異なる点に注意が必要です。

なお、この記事は次の記事の内容を理解していることを前提としています。

- [はじめてCAIを使う際に](https://qiita.com/shunsuzu/private/12b8dbd08a30efa0003a)
- [プロセスの作成と実行(匿名認証と基本認証)](https://qiita.com/shunsuzu/private/01d91caedb92bd7781ea)
- [プロセス実行環境の切り替え(Secure Agent環境での実行)](https://qiita.com/shunsuzu/private/2afc72613d894b4d553e)
- [割り当てステップと、各種変数フィールドの利用](https://qiita.com/shunsuzu/private/fae696539cd245828848)
- [OSコマンドの実行](https://qiita.com/shunsuzu/private/19c35d8ce80126503a1f)

## XMLファイルの存在チェック

### CAIプロセスの作成

次の手順では、入力フィールドとして指定されたXMLファイルがSecure Agent実行環境上に存在しているかをチェックするCAIプロセスの作成手順を確認しています。

1. CAIプロセスを次の設定で作成します。
    - 名前を __recipe-psa-functionFileExistCheck__ とする
    - __匿名アクセス__ を許可する
    - __Secure Agent__ にデプロイする

1. 入力フィールド __input__ を __タイプ=テキスト__ として定義します。
1. 出力フィールド __output__ を __タイプ=テキスト__ として定義します。

1. 割り当てステップを追加して、出力フィールド __output__ に __計算式__ として `fn:doc-available($input.input)` を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/bd714542-43a5-6a4d-44f8-b41f93a620b4.png)


### CAIプロセスの実行
実行すると、存在するファイルパス・存在しないファイルパスを指定した場合で動作が異なることを確認できると思います。

```:ファイルが存在しない場合
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-functionFileExistCheck \
-H 'Content-Type: application/json' \
-d '{"input": "file:///opt/infaUSW5/ff/cataloooooooog.xml"}'

//実行結果
{"ouptput":"false"}
```

```:ファイルが存在する場合
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-functionFileExistCheck \
-H 'Content-Type: application/json' \
-d '{"input": "file:///opt/infaUSW5/ff/catalog.xml"}'

//実行結果
{"ouptput":"true"}
```

## XMLファイル以外の存在チェック

### CAIプロセスの作成
前述したCAIプロセスで利用していた `fn:doc-available($input.input)` はXMLファイルのみを対象に検査が可能な関数です。XMLファイル以外も含めたファイルの存在をチェックする関数は残念ながら用意されていないようです。

このセクションでは[OSコマンドの実行](https://qiita.com/shunsuzu/private/19c35d8ce80126503a1f)で紹介したOSコマンドを実行する方法を利用してファイルの存在チェックをする処理を作ってみます。

次の手順では、入力フィールドとして指定されたファイルがSecure Agent実行環境上に存在しているかを、OSコマンドを用いてチェックするCAIプロセスを作成しています。

1. CAIプロセスを次の設定で作成します。
    - 名称を __recipe-psa-functionFileExistCheckOScmd__ とする
    - __匿名アクセス__ を許可する
    - __Secure Agent__ にデプロイする

1. 入力フィールド __input__ を __タイプ=テキスト__ として定義します。
1. 出力フィールド __output__ を __タイプ=テキスト__ として定義します。

1. CAIプロセスが次の順に実行されるように各種ステップを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/e8419663-a045-0742-95b3-316275162a37.png)

1. サービスステップを選択して、シェルコマンドを実行する設定としてします。 __Command__ には __計算式__ として `"ls " || $input.input` を指定します。__Working Directory__ には Secure Agent 実行ユーザーのホームディレクトリを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/7cfad917-272d-64e3-a825-7b41f9ac13fe.png)

1. 割り当てステップを選択して、出力フィールド __output__ に __コンテンツ__ として __Response Code__ を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074553/4ee874bd-119b-9a59-8193-905301fc6aae.png)


### CAIプロセスの実行
実行すると、存在するファイルパス・存在しないファイルパスを指定した場合で動作が異なることを確認できると思います。

```:ファイルが存在しない場合
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-functionFileExistCheckOScmd \
-H 'Content-Type: application/json' \
-d '{"input": "/opt/infaUSW5/ff/cataloooooooog.xml"}

//実行結果
{"output":"2"}
※lsの実行結果で 2 はファイルが存在しないことを示す
```


```:ファイルが存在する場合
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-functionFileExistCheckOScmd \
-H 'Content-Type: application/json' \
-d '{"input": "/opt/infaUSW5/ff/catalog.xml"}'

//実行結果
{"output":"0"}
※lsの実行結果で 0 はファイルが存在していることを示す
```


## 参照

- [Qiita - IICS CAIの実装レシピ - マスターページ](https://qiita.com/shunsuzu/private/3d1971ef6e3b993516aa)