Handlebarsテンプレートは、テキストを適切にレンダリングするのに役立つ多くの関数をサポートしています。この記事では、最も一般的な関数をいくつか取り上げ、Workivaでどのように使用できるかを説明します。
メモ: ここでは、それぞれの関数を個別にリストアップしていますが、多くのHandlebars関数は、"スタック "することができ、別の関数の中で使用することができます。
各
EACH関数は、最も一般的に使用され、JSONを処理するための関数である。この関数は、JSONオブジェクトまたは配列をループします。関数の構文は、開閉ブロックを利用します。配列の各要素は、EACHループブロック内で操作可能である:
{{#each object}}
{{object element}}
{{/each}} Render Text Template およびRender File Template コマンドでは、処理する JSON オブジェクト/配列を JSON Variables セクションで指定します:
コマンドのJSON変数セクションで指定された名称は、テンプレートのEACHオープニングブロックで使用される。 以下のような単純なJSON配列の場合、EACHループ内ですべてのキー(Priority &Owner )が処理可能である:
[
{
"Owner Name":"Abby Steere",
"Priority":"High"
},
{
"Owner Name":"Jeff Hickey",
"Priority":"High"
},
{
"Owner Name":"Ryan Niebruegge",
"Priority":"High"
},
{
"Owner Name":"Ryan Niebruegge",
"Priority":"Low"
},
{
"Owner Name":"Abby Steere",
"Priority":"Medium"
},
{
"Owner Name":"Jeff Hickey",
"Priority":"Medium"
},
{
"Owner Name":"Ryan Niebruegge",
"Priority":"中"
}
]。
例
タスクオーナー,タスク優先度
{{#each object_items}}
{{Owner}},{{Priority}}
{{/each}}
レンダリング結果
EACH関数は、入れ子配列を含むより複雑なJSONオブジェクトもプロセスできる。
JSONオブジェクトの例(商品リスト)
{
"products":[
{
"ID":1,
"title":"iPhone 14",
"price":799,
"brand":"Apple",
"category":"smartphones",
"images":[
"/products/1/1.jpg",
"/products/1/2.jpg",
"/products/1/3.jpg",
"/products/1/4.jpg",
"/products/1/thumbnail.jpg"
]
.},
{
"ID":2,
"title":"iPhone 15",
"price":899,
"brand":"Apple",
"category":"smartphones",
"images":[
"/products/2/1.jpg",
"/products/2/2.jpg",
"/products/2/3.jpg",
"/products/2/thumbnail.jpg"
]
.},
{
"ID":3,
"title":"S23 Ultra",
"price":1249,
"brand":"Samsung",
"category":"smartphones",
"images":[
"/products/3/1.jpg"
]
},
{
"ID":4,
"title":"Pixel 8",
"price":799,
"brand":"Google",
"category":"smartphones",
"images":[
"/products/4/1.jpg",
"/products/4/2.jpg",
"/products/4/thumbnail.jpg"
]
}
.
], "limit":100
, "total":4
, "hasmore":false
}. 例
このテンプレートでは、アイテムの配列(products)をループするだけでなく、ルート(total)のアイテムにもアクセスしています:
JSONオブジェクトには以下があります: {{response.total}} items:
{{#each response.products}}
{{title}}
{{/each}} レンダリング結果
UNLESSと@FIRST / @LAST
UNLESS関数は、@FIRSTまたは@LAST演算子と結合して最終レンダリング出力をコントロールするのが一般的である。
例えば、カンマ区切りのイテレータ値リストを作成する場合、リストの最後のアイテムの後にカンマは不要である。UNLESSと@LASTを結合することで、カンマで終わらないカンマ区切りリストを簡単に生成することができる。
例
{{#each response.products}}{{title}}{{#unless @last}},{{/unless}}{{/each}} 商品リスト・オブジェクトを使用したレンダリング結果
IF / ELSEIF / ELSEおよびEQUAL
IF関数、ELSEIF関数、ELSE関数を使えば、テンプレートにロジックを追加して、さまざまなシナリオをアカウントにすることができます。関数をEQUAL演算子と結合する場合、IFを使用してもELSEIFやELSEを使用する必要はない。
等号演算子はテキストや数値の比較に使用できます。テキスト値を比較する場合、どちらかの値が明示的に指定され、変数から取得されたものでない場合は、二重引用符で囲む必要があります。
例
この例では、IF関数内の "brand "はJSON変数から取得されている。実行時、変数はオブジェクトのブランド要素の値に置換される。
{{brand}},{{#if (equal brand "Apple")}}iOS{{else}}Android{{/if}} 商品リスト・オブジェクトを使用したレンダリング結果
@KEY / THIS / @INDEX
KEY関数とTHIS関数は、キーの名称がさまざまであったり、わからなかったりするJSONオブジェクトを扱うときに便利です。
@INDEX関数は、各操作で処理されているアイテムの位置を返します。
メモ: @INDEX関数はゼロベースなので、リストの最初のアイテムのインデックス値は0、2番目は1、といった具合になる。
JSON本文の例
この本文は、Workiva コネクターのGet File Properties コマンドからの応答である:
{
"created": "2023-11-20T21:02:09.000Z",
"id": "91af3ec18c554d5a81fd4ec4edc3a897",
"metadata": {
"account": {},
"amount": {
"numberFormat": ",."
},
"entity": {}
},
"name": "Sample.csv",
"numRecords": 3,
"originalFileSize": 72,
"status": "IMPORTED",
"tableId": "d1463c30226445819b0dddf57226ccf7",
"tags": {
"WK-Chains-Source": "https://h.sandbox.wdesk.com/s/wdata/oc/app/workiva-chains/find/executor?chainId=95631\u0026chainExecutorId=4217258"
},
"updated": "2023-11-20T21:02:18.000Z",
"userId": "V0ZVc2VyHzU1OTQwMTMxODMzMTE4NzI",
"version": 1
} 例
{{#each properties.tags}}
{{@key}},{{{this}}}
{{/each}} レンダリング結果
関数の結合
この記事で説明したすべての関数は、互いに結合して使うことができる。UNLESS、IF、@KEY、THIS、または@INDEX関数をEACH関数内で使用し、レンダリング出力を条件付きでコントロールすることができます。
例
このテンプレートでは複数の関数が結合され、HTML書式設定のテーブルが作成される:
- EACH関数は、製品をループするために使用されます。
- @INDEXは、配列中の商品の位置を取得するために使用されます。
- IF関数が商品のブランドを評価し、条件付きでテキストを書式設定する。
- 入れ子のEACH文は、各商品の画像をプロセスします。
- UNLESS文は、各画像リンク(リストの最後を除く)の後に改行(
)を追加します。
| アイテムID | 製品 | ブランド | 価格 | 画像 |
|---|---|---|---|---|
| {{@index}} | {{title}} | {{brand}} | {{price}} | {{#each images}}{{this}}{{#unless @last}} {{/unless}}{{/each}} |
レンダリング結果
ウェブページやHTML対応Eメールでビューしたときのテーブルは、以下のように表示されます: