1. Domů
  2. Samba Enterprise
  3. Funkce pro Handlebars.js
  1. Domů
  2. Extra
  3. Funkce pro Handlebars.js
  1. Domů
  2. Uživatelská příručka
  3. Flow kampaně
  4. Funkce pro Handlebars.js

Funkce pro Handlebars.js

This post is also available in: Angličtina Polský

Níže naleznete soupis všech dostupných základních funkcí a také pomocných funkcí (tzv. helpers), které lze použít při konstrukci těla požadavku v definici Webhook uzlu ve Flow kampaních. Jako šablonovací jazyk se používá Handlebars.js.

K otestování správné syntaxe můžete použít přímo testovací rozhraní v definici Webhooku v Sambě, případně demo od Handlebars.js.

Základní funkce

if

Slouží pro vytváření podmínek. Pokud argument vrátí falseundefinednull""0, nebo [], tak se blok nevykreslí.

Příklad

{{# if true}}
hello
{{/ if}}
{{# if false}}
bye
{{/ if}}

se vyhodnotí jako

hello

unless

Používá se jako opak k funkci if – blok je vykreslen jen pokud není podmínka splněna.

Příklad 1

{{# unless true}}
hello
{{/ unless}}
{{# unless false}}
bye
{{/ unless}}

se vyhodnotí jako

bye

Příklad 2

{{# each customers}}
{{# unless @first }}
{{/ unless}}
{
...
}
{{/ each}}

vloží znak nového řádku před JSON s každým zákazníkem kromě prvního.

Příklad 3

{{# each customers}}
{
...
}
{{# unless @last }},{{/ unless}}
{{/ each}}

vloží čárku za JSON s každým zákazníkem kromě posledního.

each

Používá se pro iteraci nad seznamem.

Příklad 1

{{# each customers}}
...
{{/ each}}

iteruje nad seznamem zákazníků, kteří vstoupili do Webhook uzlu. Jedná se o základní konstrukt pro tvorbu requestu ve Webhook uzlu.

Příklad 2

"parameters": [
    {{~# each parameters }}
    {
      "name":  {{ json-string @key }},
      "value": {{ json-string . }}
    }{{# unless @last }},{{/ unless }}{{/ each }}
  ]

výpíše do pole objektů všechny vlastní zákaznické parametry.

with

Pomocí tohoto helperu lze vyhodnotit část bloku, jen pokud existuje daná proměnná a zároveň změnit vyhodnocovací kontext. Pro zpracování případu, kdy proměnná neexistuje, lze použít sekci {{else}}.

Nepovinné atributy

Tato funkce by měla být použita při vykreslování všech nepovinných atributů, což jsou zpravidla všechny kromě zákaznického ID.

Příklad 1 

...
"lastname": "{{ lastName }}"{{# with email }},
"email": "{{ . }}"{{/ with }},
"registration": {{ registeredOn }},
...

Zde je vložena emailová adresa do JSONu jen v případě, že je u zákazníka uvedena.

Příklad 2

...
"lastname": "{{ lastName }}",{{# with email }}
"email": "{{ . }}" {{else}}
"email": "unknown" {{/ with }},
"registration": {{ registeredOn }},
...

V tomto případě se při neexistující emailové adrese vloží vždy alespoň hodnota „unknown“.

Příklad 3

...
"lastname": "{{ lastName }}",{{# with parameters.bonus_points }}
"points": "{{ . }}" {{else}}
"points": "0" {{/ with }},
"registration": {{ registeredOn }},
...

V tomto případě se při neexistujícím vlastním parametru bonus_points vloží vždy alespoň hodnota 0.

lookup

Pomocí této funkce se lze zanořit do cesty vybraného parametru. Užitečné je to zejména pro parametry, jejichž názvy je nutné escapovat a nelze tak užít standardní tečkovou notaci.

Příklad

...
 "bonus_points": "{{ lookup parameters "Bonus body" }}",
...

Takto lze funkci použít pro vložení vlastního zákaznického parametru jménem Bonus body do těla volání API.

and, or

Základní logické operátory.

Příklad

{{ and (is-null a) (is-null b) (is-null c) }}

not

Slouží k negaci pravdivostní hodnoty.

Příklad

{{ not (is-null a) }}

eq, neq, gt, gte, lt, lte

Slouží k porovnávání hodnot.

Příklad

{{ eq (is-null a) (is-null b) }}

tečková notace

Slouží k zanoření se do vybrané cesty atributu, jehož název není v rozporu s podporovaným formátem a není třeba ho escapovat. Pro netradiční názvy parametrů je třeba použít funkci lookup.

Příklad

Dohledání parametru Bonus_body v objektu parameters.

...
"bonus_points": "{{ parameters.Bonus_body }}",
...

vlnovka ~

Použití vlnovky uvnitř handlebaru odstraní všechny bílé znaky před, resp. za daným handlebarem.

Příklad 1

{{~ let "today" "2023-01-05" }}

odstraní všechny bílé znaky před tímto handlebarem.

Příklad 2

{{~ let "today" "2023-01-05" ~}}

odstraní všechny bílé znaky před i za tímto handlebarem.

Pomocné funkce

let

Pomocí této funkce lze definovat vlastní proměnné.

Příklad

{{ let "today" "2023-01-05" }}

Takto lze na začátku těla requestu definovat proměnnou „today“, kterou lze pak použít jako handlebar:

"today_is": "{{today}}"

is-null

Funkce vrací true nebo false, typicky se používá při tvorbě podmínek.

Příklad

...
"childrenNumber": {{#if (is-null childrenNumber)}}"no children"{{/if}}
...

Tímto způsobem lze u všech zákazníků, kteří mají v poli „childrenNumber“ definováno hodnotu null, uvést v API volání vybraný náhradní text.

is-defined

Funkce vrací true nebo false, typicky se používá při tvorbě podmínek. Oproti funkci is-null kontroluje existenci definice daného parametru a nikoli jen, zda je hodnota přímo null.

Příklad

...
"childrenNumber": {{#if (is-defined childrenNumber)}}"no children"{{/if}}
...

Tímto způsobem lze u všech zákazníků, kteří nemají definováno pole „childrenNumber“, uvést v API volání vybraný náhradní text.

is-undefined

Funkce vrací true nebo false, typicky se používá při tvorbě podmínek. Její výstup je negací k výstupu funkce is-defined.

Příklad

Mějme následující JSON objekt

{"a":0,"b":null}

Rozdíly mezi funkcemi is-null, is-defined a is-undefined názorně vysvětluje následující tabulka.

Funkce Argument „a“ Argument „b“ Argument „c“
is-null false true nedefinováno
is-defined true true false
is-undefined false false true

to-upper

Změní všechna písmena na velká.

Příklad

{{to-upper "hello"}}

vrací

"HELLO"

to-lower

Změní všechna písmena na malá.

Příklad

{{to-lower "HELLO"}}

vrací

"hello"

capitalise/capitalize

Změní první písmeno každého slova na velké.

Příklad

{{capitalise "hello world"}}

vrací

"Hello World"

md5

Vytváří hash pomocí algoritmu MD5.

Příklad

{{md5 "hello world"}}

vrací

5eb63bbbe01eeed093cb22bb8f5acdc3

sha256

Vytváří hash pomocí algoritmu SHA-256.

Příklad

{{sha256 "hello world" encoding="base64url"}}

vrací

uU0nuZNNPgilLlLX2n2r-sSE7-N6U4DukIj3rOLvzek=

base64

Zakódování pomocí algoritmu base64.

Příklad

{{base64 "Dear user, how do you enjoy templating?"}}

vrací

RGVhciB1c2VyLCBob3cgZG8geW91IGVuam95IHRlbXBsYXRpbmc/

base64url

Zakódování pomocí algoritmu base64url.

Příklad

{{base64url "Dear user, how do you enjoy templating?"}}

vrací

RGVhciB1c2VyLCBob3cgZG8geW91IGVuam95IHRlbXBsYXRpbmc_

date-format

Převádí timestamp (ms) na zvolený formát data ve formátu YYYY-MM-ddTHH:mm:ss.sTZD (více informací).

Příklad

...
"registrationDate": {{ json-string (date-format registeredOn format="YYYY-MM-dd") }},
"registrationTime": {{ json-string (date-format registeredOn format="HH:mm:ss") }},
"registrationDateTime": {{ json-string (date-format registeredOn format="YYYY-MM-dd HH:mm:ss") }},
...

date-parse

Převádí datum ve formátu YYYY-MM-ddTHH:mm:ss.sTZD (více informací) na timestamp (ms).

Příklad

"registrationDate_timestamp": {{ json-string (date-parse registeredOn format="YYYY-MM-dd'T'HH:mm:ss") }}

silent

Tato funkce způsobí ignorování obsahu uvnitř bloku. Hodí se pro komentování během testování.

Příklad

{{#silent}}
this will be never rendered
{{/silent}}

json-string

Interpretuje text jako JSON string a podle toho jej zakóduje. To se může hodit v případě, kdy např. proměnná může obsahovat uvozovky.

Příklad

"customer_id": {{ json-string id }} 

je bezpečnější variantou tohoto zápisu

"customer_id": "{{ id }}" 

regexp

Slouží k vytváření podmínek pomocí regulárních výrazů.

filter

Hodí se např. pro vypsání všech zákaznických parametrů splňujících určitou podmínku.

Příklad 1

"parameters": [
{{~# each (filter (not is-date-param) parameters) }}
{
"name": {{ json-string @key }},
"value": {{ json-string . }}
}{{# unless @last }},{{/ unless }}
{{~/ each }}
]

Příklad 2

Pokud je potřeba filtrovat například všechny zákazníky podle určité vlastnosti, lze využít speciální _ funkci.  Například pro vytvoření výstupu, kde na každém řádku bude zákaznické ID a za dvojtečkou jeho „LOYALTY_CARD_NO“, přičemž ve výsledném JSON objektu budou jen ti zákaznici, pro které je „LOYALTY_CARD_NO“ definováno, lze použít následující konstrukci:

{
{{~# each (filter (is-defined _.parameters.LOYALTY_CARD_NO) customers) }}
"{{ id }}": "{{ parameters.LOYALTY_CARD_NO }}"{{# unless @last }},{{/ unless }}
{{~/ each }}
}

now

Vrací aktuální timestamp v milisekundách. Hodnota je generována v okamžiku vytvoření batche, tj. v případě více výskytů u jednotlivých zákazníků bude mít stejnou hodnotu v rámci 1 dávky.

Pomocí této proměnné lze z timestamp a hesla vytvořit hashovaný podpis pomocí helperu sha256.

Příklad

{{ now }}

{{ date-format (now) format="YYYY-MM-dd HH:mm:ss" timezone="Europe/Prague" }}

uuid

Vrátí identifikátor UUID pro libovolný výskyt dané proměnné, tj. lze jej použít k identifikaci celé dávky (pokud je použit pouze jednou v záhlaví) nebo pro jednotlivé zákazníky (pokud je vložen do těla požadavku). Pokud je daná dávka z nějakého důvodu zpracovávána v systému Samba znovu, není zaručeno, že identifikátory UUID budou stejné. Pokud potřebujete identifikátor GUID společnosti Microsoft, můžete použít pomocnou funkci to-upper.

Verze

  • version=“3″
    • UUID je s použitím zvoleného řetězce vždy stejné (tj. není náhodné)
  • version=“4″
    • výchozí volba
    • UUID je vždy náhodné

Příklad

{{ uuid }}

{{ uuid customers.[0].email version="3" }}

This post is also available in: Angličtina Polský

Upraveno 22 listopadu, 2024

Byl pro vás tento článek užitečný?

Mohlo by vás zajímat