テキストテンプレートの記述方法

概要

「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)で使用するテンプレートの記述方法を説明します。

テンプレートはテキストファイルとして保存し添付ファイルフィールドにセットするか、文字列(複数行)フィールド内にセットします。添付ファイルフィールドにセットする場合、ファイルの文字コードは UTF-8 にしてください。

※ このテンプレートは Excel 形式ではありません。テキスト形式で作成してください。

テンプレートに記述できるもの

テンプレートには以下の要素を書くことができます。

  • ${式}
  • $IF
  • $FOR

${式}

${式} で Customine の式 を記述できます。この式は実行時に評価されてその値に置き換わります。式では Customine の関数 も使用できます。

「=式」は使用できません。

この式では @ で「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)」の「データレコード」パラメーターを参照できます。@ はレコードの配列になります。

例えばデータレコードに「購入日」というフィールドがあった場合、

お買い上げ日: ${format(@[0].購入日, 'YYYY年M月D日')} 

のようなテンプレートで

お買い上げ日: 2024年5月14日

といった出力を得られます。

なお、単に ${フィールド} と記述した場合、そのフィールドはデータレコードのフィールドではなく、画面のレコードのフィールドになります。データレコードを参照したい場合は @ 経由で参照してください。

$IF

$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 は以下のように記述します。

$FOR 変数名 IN 式
内容
$END

または

$FOR 変数名, インデックス変数名 IN 式
内容
$END

「式」には結果が配列になるような Customine 式を記述します。配列でなかった場合はエラーになります。この式は {} で囲わないでください

式の結果となる配列の各要素に対し変数名をセットして $END の間までをループ出力します。式の結果が空配列であればなにも出力しません。内容は複数行記述可能で、${式}も使用できます。変数名は ${変数名} により参照することができます。インデックス変数名も指定した場合は、${インデックス変数名} でインデックス値を参照できます。インデックス値はゼロからカウントします。

典型的なパターンとして、式に @ を指定してデータレコードを出力するパターンがあります。@ はデータレコードの配列を表すので「変数名」にはレコード1行が入ります。

タイトル,日付
$FOR レコード IN @
${レコード.タイトル},${レコード.日付}
$END

$FOR や$END の前後にテキストを記述することはできません。$FOR の手前にテキストがある場合、その行は $FOR 行ではないとみなされて通常のテキスト行として扱われます。$FOR の後ろにテキストがある場合、そのテキストも式の一部とみなされます。

$IF, $FOR の入れ子

$IF や $FOR は入れ子にすることができます。

NO,タイトル,日付
$FOR レコード, NO IN @
${NO + 1},${レコード.タイトル},${レコード.日付}
  $IF count(レコード.テーブル) > 0
    商品コード,数量
    $FOR 明細 IN レコード.テーブル
    ${明細.商品コード},${明細.数量}
    $END
  $END
$END

トラブルシューティング

エラー「$IF の条件が判定できません。条件式は結果が true または false になる必要があります。」

$IF の条件式の評価結果が真偽値以外だった場合にこのエラーになります。Customine の式では、数値や文字列を暗黙的に真偽値として解釈することはありません。

例えば、以下のようなテンプレートはエラーになります。

$IF 数値
${数値}
$END

正しくは、以下のように演算子を使って比較してください。

$IF 数値 != 0
${数値}
$END

エラー「$FOR の式が配列ではありません。結果が配列になる式を指定してください。」

$FOR の式の結果は配列形式になっている必要があります。単なる文字列や数値のように、配列ではないものを指定するとこのエラーになります。

以下は配列形式なので指定可能です。

  • データレコード
  • レコードを取得するアクションの結果値
  • テーブル
  • 以下のフィールドタイプのフィールド値
    • チェックボックス
    • 複数選択
    • 添付ファイル
    • ユーザー選択
    • 組織選択
    • グループ選択
    • 作業者
    • カテゴリー

エラー「$END が見つかりません。」

$IF または $FOR に対応する $END が見つからなかった場合に起こります。$IF や $FOR の数に対して $END が足りていないとも言えます。テンプレートを見直して$IF~$END、$FOR~$END が正しく対応付けられているかをチェックしてください。

$IF,$FOR の数と $END の数が合っているように見える場合、$END の行が $END と解釈されていない可能性もあります。$END の前後にテキストを書くと、その行は $END とみなされず、通常のテキスト行と解釈されます。

$FOR や $IF の行がそのまま出力される

$FOR や $IF は空白を除いて行の先頭に記述しなければなりません。同じ行内で $FOR や $IF の手前にテキストがあると、その行は $FOR, $IF ではなく通常のテキスト行とみなされます。例えば次のテンプレートは $FOR 行とみなされずそのまま出力されます。

この $FOR は $FOR でなくそのまま出力されます。

$END が出力される

$FOR, $IF の数に対し $END の数が多すぎる可能性があります。$FOR,$IF と $END の対応付けを確認してください。

「$FOR や $IF の行がそのまま出力される」が発生していないかどうかも併せてチェックしてみてください。

$FOR や $IF で式は正しいはずなのに式エラーが出る

$FOR, $IF の式の後ろにテキストを記述していないでしょうか。そのテキストも含め、1つの式とみなされています。

例えば以下のような $IF があった場合、点数 > 0 合格が1つの条件式とみなされます。これは式として正しくないので「 [,]はサポートされていません。」というようなやや分かりにくいエラーが出ます。

$IF 点数 > 0 合格

制限事項

  • テンプレートはプレーンなテキストとして解釈可能な形式のみ対応しています。リッチテキストや Excel 形式には対応していません。

    • HTML や CSV はテンプレートとして使用できます。
  • テンプレートの文字コードは UTF-8 のみ対応しています。それ以外の文字コードには対応していません。

  • @this や @out は使用できません。これらはフィールドマッピングのみで使用できます。

  • $IF で出力する/しないを制御できるのは行単位です。行の一部分に対して出力する/しない切り分けを $IF で行うことはできません。そのような切り分けを行いたい場合は if 関数 を用いてください。

  • テキストテンプレートは「テンプレートをもとにテキストを生成する」(kintoneアプリカスタマイズ版/Job Runner版)でしか使用できません。通常の文字列パラメーター内で使用することはできません。