Handlebars-Vorlagen unterstützen eine Reihe von Funktionen, die bei der korrekten Darstellung Ihres Textes helfen können. In diesem Artikel werden wir einige der gebräuchlichsten Funktionen behandeln und wie sie in Workiva verwendet werden können.
Hinweis: Obwohl wir hier jede Funktion einzeln aufführen, können viele Handlebars-Funktionen "gestapelt" oder innerhalb einer anderen Funktion verwendet werden.
EACH
Die EACH-Funktion wird am häufigsten verwendet und ist für die Verarbeitung von JSON vorgesehen. Die Funktion führt eine Schleife durch ein JSON-Objekt oder Array; die Syntax der Funktion verwendet einen öffnenden und schließenden Block. Jedes Element des Arrays steht für die Operation innerhalb des EACH-Schleifenblocks zur Verfügung:
{{#each object }}
{{object element}}
{{/each}} In den Befehlen Textvorlage rendern und Dateivorlage rendern wird das zu verarbeitende JSON-Objekt/Array im Abschnitt JSON-Variablen angegeben:
Der im Abschnitt JSON-Variablen des Befehls angegebene Name wird im Öffnungsblock EACH der Vorlage verwendet. Für ein einfaches JSON-Array wie das folgende ist jeder Schlüssel (Priorität & Eigentümer im folgenden Beispiel) für die Verarbeitung innerhalb der EACH-Schleife verfügbar:
[
{
"Name des Eigentümers": "Abby Steere",
"Priorität": "Hoch"
},
{
"Name des Eigentümers": "Jeff Hickey",
"Priorität": "Hoch"
},
{
"Name des Eigentümers": "Ryan Niebruegge",
"Priorität": "Hoch"
},
{
"Name des Eigentümers": "Ryan Niebruegge",
"Priorität": "Niedrig"
},
{
"Name des Eigentümers": "Abby Steere",
"Priorität": "Mittel"
},
{
"Name des Eigentümers": "Jeff Hickey",
"Priorität": "Mittel"
},
{
"Name des Eigentümers": "Ryan Niebruegge",
"Priorität": "Mittel"
}
]
Beispiel
Aufgabenbesitzer,Aufgabenpriorität
{{#each object_items}}
{{Owner}},{{Priority}}
{{/each}}
Gerendertes Ergebnis
Die EACH-Funktion kann auch komplexere JSON-Objekte verarbeiten, einschließlich solcher mit verschachtelten Arrays.
Beispiel JSON-Objekt (Produktliste)
{
"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
} Beispiel
In dieser Vorlage wird auf ein Element in der Wurzel (total) zugegriffen und eine Schleife über ein Array (products) von Elementen gezogen:
JSON-Objekt hat {{response.total}}-Elemente:
{{#each response.products}}
{{title}}
{{/each}} Gerendertes Ergebnis
UNLESS und @FIRST / @LAST
Die Funktion UNLESS wird meist mit den Operatoren @FIRST oder @LAST kombiniert, um die endgültige gerenderte Ausgabe zu steuern.
Bei der Erstellung einer kommagetrennten Liste der Werte, die iteriert werden sollen, ist beispielsweise ein Komma nach dem letzten Element in der Liste unnötig. Durch die Kombination von UNLESS und @LAST lässt sich leicht eine kommagetrennte Liste erstellen, die nicht mit einem Komma endet.
Beispiel
{{#each response.products}}{{title}}{{#unless @last}},{{/unless}}{{/each}} Gerendertes Ergebnis unter Verwendung des Objekts Produktliste
IF / ELSEIF / ELSE und EQUAL
Mit den Funktionen IF, ELSEIF und ELSE kann der Vorlage eine Logik hinzugefügt werden, um verschiedene Szenarien zu berücksichtigen. Die Verwendung von IF erfordert nicht die Verwendung von ELSEIF oder ELSE, wenn die Funktionen auch mit EQUAL-Operatoren kombiniert werden.
Der Gleichheitsoperator kann verwendet werden, um Text oder numerische Werte zu vergleichen. Wenn beim Vergleich von Textwerten einer der beiden Werte explizit angegeben und nicht aus einer Variablen abgerufen wird, muss er in Anführungszeichen gesetzt werden.
Beispiel
In diesem Beispiel wird "brand" in der IF-Funktion aus der JSON-Variable abgerufen. Bei der Ausführung wird die Variable durch den Wert im Markenelement des Objekts ersetzt.
{{brand}},{{#if (equal brand "Apple")}}iOS{{else}}Android{{/if}} Gerendertes Ergebnis unter Verwendung des Objekts Produktliste
@KEY / THIS / @INDEX
Die Funktionen @KEY und THIS sind nützlich bei der Interaktion mit JSON-Objekten, bei denen der Schlüsselname variiert oder möglicherweise nicht bekannt ist.
Die @INDEX-Funktion gibt die Position des Elements zurück, das in jedem Vorgang verarbeitet wird.
Hinweis: Die Funktion @INDEX ist nullbasiert, d. h. das erste Element in der Liste hat einen Indexwert von 0, das zweite einen Index von 1, usw.
Beispiel JSON-Körper
Dieser Body ist die Antwort des Get File Properties Befehls des Workiva Connectors:
{
"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-Ketten-Quelle": "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
} Beispiel
{{#each properties.tags}}
{{@key}},{{{this}}}
{{/each}} Gerendertes Ergebnis
Kombinieren von Funktionen
Alle in diesem Artikel beschriebenen Funktionen können in Kombination miteinander verwendet werden. EACH-Funktionen können innerhalb anderer EACH-Funktionen verschachtelt werden; UNLESS-, IF-, @KEY-, THIS- oder @INDEX-Funktionen können innerhalb einer EACH-Funktion zur bedingten Steuerung der gerenderten Ausgabe verwendet werden.
Beispiel
In dieser Vorlage werden mehrere Funktionen kombiniert, um eine HTML-formatierte Tabelle zu erstellen:
- Die Funktion EACH wird verwendet, um die Produkte in einer Schleife zu durchlaufen.
- Ein @INDEX wird verwendet, um die Position des Produkts im Array abzurufen.
- Eine IF-Funktion wertet die Marke des Produkts aus und formatiert den Text unter bestimmten Bedingungen.
- Eine verschachtelte EACH-Anweisung verarbeitet die Bilder für jedes Produkt
- Eine UNLESS-Anweisung fügt nach jedem Bildlink (außer dem letzten in der Liste) einen Zeilenumbruch (
) ein.
| Artikel-ID | Produkt | Marke | Preis | Bilder |
|---|---|---|---|---|
| {{@index}} | {{title}} | {{brand}} | {{price}} | {{#each images}}{{this}}{{#unless @last}} {{/unless}}{{/each}} |
Gerendertes Ergebnis
Die resultierende Tabelle wird auf einer Webseite oder in einer HTML-kompatiblen E-Mail wie folgt angezeigt: