はじめに
CSVファイル読み込み・CSVファイル書き出しでは、CSVファイルを読み込んで、CSVファイルに書き出す手順を確認しました。その際、CSVヘッダーは決め打ちでid/name列を指定していました。
この記事では、CSVのヘッダー(Custom headers)をCSVファイルから動的に生成する実装を確認します。
- はじめてCAIを使う際に
- プロセスの作成と実行(匿名認証と基本認証)
- 割り当てステップと、各種変数フィールドの利用
- プロセスオブジェクトによるユーザー定義変数の利用
- CAIでXQueryを利用する時に覚えておきたいこと
- テキストファイルの作成
- CSVファイル読み込み・CSVファイル書き出し
CSVファイル読み込み・CSVファイル書き出し(動的ヘッダー)
CAIプロセスの作成
CSVファイル読み込み・CSVファイル書き出しで作成した recipe-psa-fileWriteCsv2Csv をコピーして、API名のオーバーライド にチェックを入れ、名前とAPI名を recipe-psa-fileWriteCsv2CsvDinamic とします。
割り当てステップを選択して、Custom Headerの値を次のように変更します。
let $text := fn:unparsed-text($input.inputPath )
let $lines := tokenize($text , '\n')
let $fieldnames:=tokenize($lines[1], '\s*,\s*')
return
for $fieldname at $index in $fieldnames
return
<Header>
{element {'fieldIndex'} {string($index)}}
{element {'name'} {$fieldname}}
</Header>
このXQueryコードでは、CSVファイルのヘッダー行(1行目)の文字列を利用して、次のようなXMLを生成しています。
<Header>
<fieldIndex>1</fieldIndex>
<name>id</name>
</Header>
<Header>
<fieldIndex>2</fieldIndex>
<name>name</name>
</Header>
<Header>
<fieldIndex>3</fieldIndex>
<name>color</name>
</Header>
CAIプロセスの実行
curlコマンドを例とした動作確認結果です。CSVファイル読み込み・CSVファイル書き出しで作成した recipe-psa-fileWriteCsv2Csv ではヘッダー列はid/name列の決め打ちでしたが、今回は元のCSVファイルから動的にヘッダーを生成しているため、id/name列に加えてcolor列も出力されている動作を確認できます。
curl -k https://localhost:7443/process-engine/public/rt/recipe-psa-fileWriteCsv2CsvDinamic \
-H 'Content-Type: application/json' \
-d '{"inputPath": "/opt/infaUSW5/ff/fruite.csv"}'
//実行結果
{
"output": {
"fileInfo": {
"fullName": "fruite.csv",
"name": "fruite",
"ext": "csv",
"path": "/opt/infaUSW5/ff/tgt/fruite.csv",
"dir": "/opt/infaUSW5/ff/tgt",
"size": 157,
"lastModified": "2024-12-17T12:08:37Z"
},
"processedRecordsCount": 10,
"writtenRecordsCount": 9,
"success": true,
"message": null
}
}
//出力ファイルの確認
$ cat fruite.csv
id,name,color
1,orange,orange
2,kiui,green
3,banana,yellow
4,mango,yellow
5,watermelon,red
6,melon,green
7,lemon,yellow
8,apple,red
9,grape,purple