トランザクションマネージャー:統合 - ハンドルバー構文
統合変換テンプレートをビルドするときに、ハンドルバーテンプレート言語を使用できます。
Handlebars は、動的コンテンツの生成に使用される軽量のテンプレート言語です。統合変換テンプレートをビルドするアドミニストレーターは、ハンドルバー構文の次の重要な要素と、 CPQに固有の拡張機能を使用します。
- ハンドルバー式:二重中括弧 {{ }}で囲まれた式を使用すると、アドミニストレーターは変数、関数、またはプロパティをテンプレートに挿入できます。たとえば、 {{user.name}} はユーザーオブジェクトの name プロパティの値を表示します。
- 組み込みヘルパーには、条件付きヘルパーと反復ヘルパーが含まれます。
- 条件付きヘルパーを使用すると、値に基づいて条件付きでコンテンツをレンダリングできます。例:
- #if 条件が true の場合、コンテンツを表示します。
{{#if user.isActive}} Active {{/if}}このスニペットは、
user.isActiveが true の場合にのみ「アクティブ」をレンダリングします。 - #unless – #if の逆で、条件が false の場合にコンテンツが表示されます。
{{#unless user.isActive}} Inactive {{/unless}}このスニペットは、
user.isActiveが false の場合に「非アクティブ」をレンダリングします。
- #if 条件が true の場合、コンテンツを表示します。
- 反復ヘルパーを使用すると、リストをループしたり、スコープを変更したりできます。
- #each はアレイをループし、各アイテムのコンテンツを表示します。
{{#each users}} <li>{{this.name}}</li> {{/each}}このスニペットはユーザーを反復処理し、各ユーザーの名前をリストアイテムとして表示します。
- #with スコープを特定のオブジェクトに変更します。
{{#with user}} <p>{{name}}</p> {{/with}}このスニペットは、ブロック内の
ユーザーのプロパティへのアクセスを簡素化します。
- #each はアレイをループし、各アイテムのコンテンツを表示します。
- 条件付きヘルパーを使用すると、値に基づいて条件付きでコンテンツをレンダリングできます。例:
統合のための高度なハンドルバー構文
ここでは、ハンドルバーのテンプレート言語を利用する統合テンプレートで使用される各構文要素について説明します。
- {{#if lines}} {{/if}}
{{#if}} 何かが真実かどうかを確認します。
次のスニペットは、
行内に何かがあるかどうかを確認します。行に値(アイテムのリストやデータなど)がある場合、ブロック内で何かを行います。行が空または存在しない場合は、ブロックをスキップします。{{#if lines}} We have lines to process! {{else}} No lines available. {{/if}}行が存在する場合は、「処理する行があります!」と表示されます。そうでない場合は、「利用可能なラインはありません」と表示されます。 - {{~#each lines~}} {{/each}}
{{#each}} リスト内の各アイテムに対して何かを繰り返します。
次のスニペットは、
行リスト内の各アイテムを反復処理し、すべてのアイテムのブロック内のコンテンツを表示します。~ 記号は、ハンドルバーの空白制御文字です。ブロックの前後の余分なスペースや改行を取り除き、よりクリーンでコンパクトな出力を保証します。(下記参照){{~#each lines~}} <p>{{this}}</p> {{/each}}スニペットは各項目を
行で処理し、各項目を段落タグに配置します。 - {{#if <logik line-level field varname>}} {{/if}}
{{#if <logik ...}} 特定のデータが真実であるか存在するかを確認します。データ内の特定のフィールドまたは値 (varname など) が存在するか、true であるかをチェックします。これは、より複雑な構造(データセットなど)で特定の情報をチェックする方法です。
{{#if logik.lineLevelField.isActive}} The field is active! {{else}} The field is not active. {{/if}}このスニペットは、
logik.lineLevelField.isActiveが true かどうかを確認します (何かが「アクティブ」かどうかのチェックなど)。アクティブになっている場合は、「フィールドがアクティブです!」と表示されます。アクティブでない場合は、「フィールドがアクティブではありません」と表示されます。
チルダ (~)
制御文字であるチルダ (~) は、空白と改行を非表示にし、出力をクリーンに保つのに役立ちます。これにより、HTML がよりコンパクトになり、出力の間隔の問題が防止されます。
上記の例のいくつかでは、 #each の前の先頭のチルダによって、ブロックが開始される前の空白が削除されます。#each の後の末尾のチルダは、ブロックの開始後の空白を削除します。
zeroIfMissing カスタムヘルパー
zeroIfMissing ヘルパーは、欠損によるエラーを防止し、数値フィールドが常に有効なデフォルト値を持つようにします。
Custom Helper 'zeroIfMissing'
"price": {{zeroIfMissing txn.price}}, would become -> "price": 0 (or "price": 9.99, if txn.price is present)
lgkFilter カスタムヘルパー
lgkFilter ヘルパーはコレクションを反復処理し、指定された条件を満たすアイテムのみを含めます。
{
"numericFiltered": [
{{#lgkFilter lines "txn.line.custom.someNumber > 10"}}
{
"id": "{{txn.line.product.id}}",
"someNumber": "{{txn.line.custom.someNumber}}"
}
{{else}}
{
"error": "Item could not be added (numeric condition)"
}
{{/lgkFilter}}
],
"textFiltered": [
{{#lgkFilter lines "txn.line.custom.status == Active"}}
{
"id": "{{txn.line.product.id}}",
"status": "{{txn.line.custom.status}}"
}
{{else}}
{
"error": "Item could not be added (text condition)"
}
{{/lgkFilter}}
]
}
- 単純な構文: {{#lgkFilter lines "<predicate_field>"}}
- 条件付き構文: {{#lgkFilter lines "<predicate_field> <comparator> <literal_value>"}}
- サポートされているコンパレーター: <、 >、 <=、 >=、 !=、 ==
- & などの複合条件はサポートされていません
else ブロックはヘルパー内でサポートされています。
ヘルパーは、構文が正しくない場合、およびフィールドを解析できない場合にエラーをスローします。
ヘルパーは、有効な JSON 出力のカンマ結合を内部的に実行します。
@ 記号
@ は、現在のコンテキストからではなく、外部コンテキストまたは親コンテキストから値をプルしていることを保証します。これは、必要なデータが構造内の上位レベルにあり、現在のスコープのローカルデータと混同しないようにする場合によく使用されます。
式 "LGK__TransactionId__c": "@{parentTransaction.id}"では、 @ 記号は、ハンドルバーやその他の同様のシステムなどのテンプレートシステムの親コンテキストまたはオブジェクトから値を参照するために使用されます。
@{} 構文は、親コンテキスト (現在のスコープ外のオブジェクトまたはデータ) を参照し、parentTransaction.id の値を取得するようにシステムに指示します。
たとえば、次のようなオブジェクトがあるとします。
{
"parentTransaction": {
"id": "12345"
}
}
"LGK__TransactionId__c": "@{parentTransaction.id}"を使用すると、parentTransaction の ID (12345) が "LGK__TransactionId__c" の値として使用されます。
条件付き割り当ての例
ライン "LGK__ParentTransactionLineId__c": {{#if txn.line.custom.parentLineReferenceId}} "@{line_{{txn.line.custom.parentReferenceId}}.id}" {{else}} null {{/if}} はハンドルバーテンプレートの一部であり、条件付きでフィールド LGK__ParentTransactionLineId__cの値を設定します。
LGK__ParentTransactionLineId__cは、結果の値が配置されるキーです。- {{#if txn.line.custom.parentLineReferenceId}}
txn.line.custom.parentLineReferenceIdが存在し、値があるかどうかを確認します。 - @{line_{{txn.line.custom.parentReferenceId}}.id}
parentReferenceIdに基づいて特定の行のIDへの動的参照を作成します。 - {{else}} null {{/if}} 条件が false の場合、値を null に設定します。
条件付き句読点を使用した Salesforce フィールドの連結
ハンドルバーでは、複数のフィールドを句読点 (カンマ、スペース、条件付きチェックなど) で連結するには、テンプレート内の変数を組み合わせ、{{#if}} ブロックを使用して条件付きロジックを処理します。
たとえば、次の方法を使用して、住所の番地、番地 2、市区町村、都道府県、郵便番号などのフィールドを連結し、「番地 2」が入力されている場合にのみ「番地 2」の後のカンマとスペースが含まれるようにすることができます。
{{#if streetAddress}}
{{streetAddress}}
{{#if streetAddress2}}, {{streetAddress2}}{{/if}}
{{#if city}}, {{city}}{{/if}}
{{#if state}}, {{state}}{{/if}}
{{#if zipcode}}, {{zipcode}}{{/if}}
{{else}}
No address available
{{/if}}
これにより、streetAddress、streetAddress2、city などのフィールドが連結され、対応するフィールドが入力された場合にのみカンマが含まれるようになります。
streetAddress2 を使用した出力例:"123 Main St, Apt 4, San Francisco, CA, 94105"
streetAddress2 を使用しない出力の例:"123 Main St, San Francisco, CA, 94105"
結び
これらの重要な要素を使用することで、アドミニストレーターは動的で柔軟かつ保守可能な統合変換テンプレートを作成できます。式、ヘルパー、ブロック、条件、および親コンテキスト参照を理解して活用することで、複雑なデータとロジックを簡単に処理できます。