「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)で使用するテンプレートの記述方法を説明します。
テンプレートはテキストファイルとして保存し添付ファイルフィールドにセットするか、文字列(複数行)フィールド内にセットします。添付ファイルフィールドにセットする場合、ファイルの文字コードは UTF-8 にしてください。
※ このテンプレートは Excel 形式ではありません。テキスト形式で作成してください。
テンプレートには以下の要素を書くことができます。
${式} で Customine の式 を記述できます。この式は実行時に評価されてその値に置き換わります。式では Customine の関数 も使用できます。
「=式」は使用できません。
この式では @
で「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)」の「データレコード」パラメーターを参照できます。@
はレコードの配列になります。
例えばデータレコードに「購入日」というフィールドがあった場合、
お買い上げ日: ${format(@[0].購入日, 'YYYY年M月D日')}
のようなテンプレートで
お買い上げ日: 2024年5月14日
といった出力を得られます。
なお、単に ${フィールド}
と記述した場合、そのフィールドはデータレコードのフィールドではなく、画面のレコードのフィールドになります。データレコードを参照したい場合は @
経由で参照してください。
$IF を使用することで、特定の条件を満たす場合のみ出力したいブロックを記述できます。
$IF は以下のように記述します。
$IF 条件式
内容
$END
条件式には結果が真偽で表すことができる式を記述します。真偽値でなかった場合はエラーになります。この条件式は {} で囲わないでください。
実行時に条件式の評価結果が真になった場合、そこから $END
までの内容を出力します。内容は複数行記述可能で、${式}も使用できます。条件が偽になった場合はなにも出力しません。
${氏名}様
お買い上げありがとうございました。
$IF 会員区分 = 'ゴールド'
<< ゴールド会員の方にお得なお知らせ >>
●年●月●日までポイント${割増}%増量!
$END
Customine の式には and や or 演算子はありません。条件を and や or で結合したい場合はand 関数 や or 関数 を使用してください。
また、$IF の条件を満たさない場合に出力を行う $ELSE のような文法はありません。1つ1つ条件を記述していく必要があります。
$IF 金額 < 1000
ポイント付与率 3%
有効期限1か月
$END
$IF and(金額 >= 1000, 金額 < 10000)
ポイント付与率 5%
有効期限3か月
$END
$IF 金額 >= 10000
ポイント付与率 8%
有効期限6か月
$END
$IF や$END の前後にテキストを記述することはできません。$IF の手前にテキストがある場合、その行は $IF 行ではないとみなされて通常のテキスト行として扱われます。$IF の後ろにテキストがある場合、そのテキストも条件式の一部とみなされます。
配列の要素数分、繰り返し出力することができます。
$FOR は以下のように記述します。
$FOR 変数名 IN 式
内容
$END
または
$FOR 変数名, インデックス変数名 IN 式
内容
$END
「式」には結果が配列になるような Customine 式を記述します。配列でなかった場合はエラーになります。この式は {} で囲わないでください。
式の結果となる配列の各要素に対し変数名をセットして $END の間までをループ出力します。式の結果が空配列であればなにも出力しません。内容は複数行記述可能で、${式}も使用できます。変数名は ${変数名} により参照することができます。インデックス変数名も指定した場合は、${インデックス変数名} でインデックス値を参照できます。インデックス値はゼロからカウントします。
典型的なパターンとして、式に @
を指定してデータレコードを出力するパターンがあります。@
はデータレコードの配列を表すので「変数名」にはレコード1行が入ります。
タイトル,日付
$FOR レコード IN @
${レコード.タイトル},${レコード.日付}
$END
$FOR や$END の前後にテキストを記述することはできません。$FOR の手前にテキストがある場合、その行は $FOR 行ではないとみなされて通常のテキスト行として扱われます。$FOR の後ろにテキストがある場合、そのテキストも式の一部とみなされます。
$IF や $FOR は入れ子にすることができます。
NO,タイトル,日付
$FOR レコード, NO IN @
${NO + 1},${レコード.タイトル},${レコード.日付}
$IF count(レコード.テーブル) > 0
商品コード,数量
$FOR 明細 IN レコード.テーブル
${明細.商品コード},${明細.数量}
$END
$END
$END
$IF の条件式の評価結果が真偽値以外だった場合にこのエラーになります。Customine の式では、数値や文字列を暗黙的に真偽値として解釈することはありません。
例えば、以下のようなテンプレートはエラーになります。
$IF 数値
${数値}
$END
正しくは、以下のように演算子を使って比較してください。
$IF 数値 != 0
${数値}
$END
$FOR の式の結果は配列形式になっている必要があります。単なる文字列や数値のように、配列ではないものを指定するとこのエラーになります。
以下は配列形式なので指定可能です。
$IF または $FOR に対応する $END が見つからなかった場合に起こります。$IF や $FOR の数に対して $END が足りていないとも言えます。テンプレートを見直して$IF~$END、$FOR~$END が正しく対応付けられているかをチェックしてください。
$IF,$FOR の数と $END の数が合っているように見える場合、$END の行が $END と解釈されていない可能性もあります。$END の前後にテキストを書くと、その行は $END とみなされず、通常のテキスト行と解釈されます。
$FOR や $IF は空白を除いて行の先頭に記述しなければなりません。同じ行内で $FOR や $IF の手前にテキストがあると、その行は $FOR, $IF ではなく通常のテキスト行とみなされます。例えば次のテンプレートは $FOR 行とみなされずそのまま出力されます。
この $FOR は $FOR でなくそのまま出力されます。
$FOR, $IF の数に対し $END の数が多すぎる可能性があります。$FOR,$IF と $END の対応付けを確認してください。
「$FOR や $IF の行がそのまま出力される」が発生していないかどうかも併せてチェックしてみてください。
$FOR, $IF の式の後ろにテキストを記述していないでしょうか。そのテキストも含め、1つの式とみなされています。
例えば以下のような $IF があった場合、点数 > 0 合格
が1つの条件式とみなされます。これは式として正しくないので「 [,]はサポートされていません。」というようなやや分かりにくいエラーが出ます。
$IF 点数 > 0 合格
テンプレートはプレーンなテキストとして解釈可能な形式のみ対応しています。リッチテキストや Excel 形式には対応していません。
テンプレートの文字コードは UTF-8 のみ対応しています。それ以外の文字コードには対応していません。
@this や @out は使用できません。これらはフィールドマッピングのみで使用できます。
$IF で出力する/しないを制御できるのは行単位です。行の一部分に対して出力する/しない切り分けを $IF で行うことはできません。そのような切り分けを行いたい場合は if 関数 を用いてください。
テキストテンプレートは「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)でしか使用できません。通常の文字列パラメーター内で使用することはできません。