単純なアクセスだけでなく、ワークフローのマークアップを異なるバージョンで生成するために設定を使用することができます。例えば、複数のテキスト入力に対してループを使用したり、チェックボックスの入力に対して条件付きでマークアップを生成することができます。
この目的のためには、ヘルパー関数がしばしば理想的です。以下のヘルパーが利用可能である。
ゼネラルヘルパー
キーワードと説明
以下は、キーワードとその説明、コード例、出力例です。
を割り当てる。変数を代入する
{#assign "myval"}
This is a variable
{/assign}
を出力する。コンテキスト内の変数 "myVal "と対応する値
算数 簡単な算数(+,-,*,/,%付き)
{math myNum "+" 5}
をそれぞれ使用します。 indexで現在のループのインデックスに、@keyで現在のキー名にアクセスすることができます。また、@first と @last を使って、反復処理の最初と最後のステップにいるかどうかをチェックすることができます。
{#each myObj}
{@index}
{/each}
を出力します。例:"0 1 2 3 4"
forです。 単純な繰り返しを可能にするforループ。Operatorは[==,>,<,>=,<=]のいずれかを指定することができる。ハッシュパラメータは、カウンタの増減に使用できます。
{#for 5 ">" 0 after="-2"}
{this}
{/for}
比較する。2つの値を比較する。演算子は、[==, !=, <, <=, equalsIgnoreCase]のいずれかです。
{comapre myStr "==" "Hallo}
output: myStrが "Hallo "のとき、True。
スイッチ、ケース スイッチとケースの構成
{#switch type}
{#case "article"}
This is an article
{/case}
{#case "resource"}
This is a resource
{/case}
を出力する。typeが "article "の場合、出力は "This is an article "となる。
if 条件がtrueに評価されたブロックを挿入する
{#if (or (and isCar hasPlate) (and (not isCar) hasLicense)))}
Allowed to drive.
{else}
Not allowed to drive.
を出力します。ブール変数 "isCar=false" と "hasLicense=true" の場合、出力は "Allowed to drive" になります。
ない限り その逆
{unless trueVar}
This is text
{/unless}
を出力します。trueVar=true "の場合、"This is text "と出力されます。
とする。 複数のブーリアン値の論理的な「and」。
{and isCar hasPlate}
output: 変数に応じて、True または False を出力します。
または 複数のブーリアン値の論理的な「または」。
{or isCar hasPlate}
output: 変数に応じて True または False を出力します。
notブ ール値の論理的な「ない」。
{not isCar}
output: "isCar=false "の場合、True。
コレクションを返します。 コレクションのサイズやシングルトンプロパティを返すヘルパーです。演算子には ["size", "is_not_singleton", "is_singleton"] のいずれかを指定します。
{collection myColl "size"}
output: E.g.4
ルックアップを使用します。 変数を用いた動的なパラメータ解決を可能にする。例えば、配列インデックスの値を解決するために使用する。
{#each bar}
{lookup ../foo@index}
{/each}
を使っています。 ヘルパーにパラメータを渡すのに使用することができます。
{#with myVal}
{#ech myObj}
{/each}
{/with}
文字列ヘルパー
以下は、String Helpersとして使用されるキーワードとその説明、サンプルコード、出力例です。
caseformat:文 字列の大文字小文字を区別するためのフォーマット。演算子は ["lowercase", "lowercase_underscore", "lowercase_hyphen"] のいずれかとなる。
{caseFormat myStr "lowercase_underscore"}
output: myStr="This is a string "の場合、"this_is_a_string "と出力されます。
capitalizeFirst:最 初の文字を大文字にする
{capitalizeFirst value}
を出力します。値が"teamviewer"の場合、出力は"Teamviewer"になります。
をカットする。 与えられた文字列から引数の値をすべて削除する。
{cut value " "}
output: valueが "String with spaces "の場合、"Stringwithspaces "と出力されます。
defaultIfEmpty。 値が False と評価された場合、指定されたデフォルトを使用します。そうでない場合は
{defaultIfEmpty value "nothing"}
を出力する。value="false" の場合、出力は "nothing" です。
を結合する。 配列、イテレータ、またはイテレートと文字列を結合する。
{join "a" "b" "c" " // " prefix="" suffix=""}
出力: "a//b//c"
を中央に配置する。 指定された幅のフィールドの値を中央に配置する
{center value size=19 pad=" "}
ljust指 定された幅のフィールドの値を左揃えにする
{ljust value 20 pad=" "}
rjust指 定された幅のフィールドの値を右寄せにする
{rjust value 20 pad=" "}
サブストリング 文字列をサブ文字列に分割する
{substring value 3 }
{substring value 0 3 }
出力: 値が"TeamViewer"の場合、出力はそれぞれ "Viewer "と "Team "になります。
lower文 字列をすべて小文字に変換する
{lower value}
出力: 値が"TeamViewer"の場合、出力は"teamviewer"になります。
upper文 字列をすべて大文字に変換します。
{upper value}
output: valueが "Hello "の場合、出力は "HELLO "になります。
slugifyを使用します。 小文字に変換し、単語以外の文字(英数字とアンダースコア)を削除し、スペースをハイフンに変換します。また、先頭と末尾の空白を除去する。
{slugify value}
出力: 値が "TeamViewer is great" の場合、出力は "teamviewer-is-great" になります。
stringFormat。 引数である文字列書式指定子に従って、変数をフォーマットします。
{stringFormat value param1}
を出力します。value="Hello %s" かつ param1="TeamViewer" の場合、出力は "HelloTeamViewer" となります。
stringTags。 すべての[X]HTMLタグを除去する
{stripTags value}
を大文字にする。 文字列中の、空白で区切られたすべての単語を大文字にする。
{ capitalize value fully=false}
output: valueが "my first post "の場合、"My first post "と出力されます。
省略する。 文字列が指定された文字数より長い場合、その文字列を切り詰めます。切り捨てられた文字列は、翻訳可能な省略記号 ("...") で終わります。
{abbreviate value 6 }
値が"TeamViewer is great "の場合、"TeamVi... "と出力されます。
wordWrap。 指定された行の長さで単語を折り返す
{ wordWrap value 5 }
output: If value is "My words are long", output will be "Myrr__nwords are⑭ long".
を置き換えます。 リテラルターゲット配列にマッチするこの文字列の各サブストリングを、指定されたリテラル置換配列で置き換えます。
{ replace value "..." "rocks"}
output: value が "Handlebars ..." の場合、"Handlebars rocks" と出力されます。
yesno:t rue, false および (オプションで) null の値を、文字列 "yes", "no", "maybe" にマップする。
{ yesno value yes="yes" no="no" maybe="maybe" }
dateformatを 指定します。formatオプションは,パラメータまたはハッシュ(別名,名前パラメータ)で指定する。full" (例: Tuesday, June 19,2012), "medium" (例: Jun 19,2012), "short" (例: 6/19/12), "pattern" (日付パターン) のいずれかを指定します。
{dateFormat date ["format"]
[format="format"]
[tz=timeZone|timeZoneId]}
numberFormat。 Format パラメータは、["integer", "currency", "percent", "pattern"] のいずれかとなります。他に利用可能なオプションは以下の通り。groupingUsed (フォーマットでグループ化を使用するかどうかを設定), maximumFractionDigits (端数部分に許される最大桁数), maximumIntegerDigits (整数部分の最大桁数), minimumFractionDigits (端数部分の最小桁数),minimumIntegerDigits(整数部の最小桁数)、parseIntegerOnly(数値を整数としてのみパースするかどうか)、roundingMode(この NumberFormat で使用する RoundingMode [UP, DOWN, CEILING, FLOOR, HALF_UP, HALF_DOWN, HALF_EVEN, UNNECESSARY] )です。
{numberFormat number ["format"] [locale=default]}
事例紹介
いくつかの例を見てみましょう。
{
"General": {
"use_camera": {
"title": "Use Camera of Smartglasses",
"inputType": "checkbox-input",
"value": "true"
}
}
}
<onresume>
<rule id="auto">
<expression>1</expression>
<actions>
§{#if General.use_camera.value}§
<action ref="start_cam"/>
§{/if}§
</actions>
</rule>
</onresume>
見てわかるように、ここでifキーワードを使うと、対応する設定パラメータが true に設定されているときだけアクションを実行することができます。注意すべきは、すべてのキーワードは最初に#を書くことでスコープ内で使用されるということです。
それぞれを使った別の例です。この例では、multiple-dropdown-input を使って、ユーザーインターフェースに表示されるいくつかのボタンを設定することができます。最後の2つのボタンとして、チェックボックス入力が設定されているかどうかによってバーコードスキャンを生成し、もう1つのデフォルトボタンを生成しています。これらはインターフェースの一番右側に表示されます。
{
"Configuration": {
"buttons": {
"title": "Function Keys",
"inputType": "multiple-dropdown-input",
"elements": [
{
"name": "TAB",
"content": "ANDRRES_key_tab",
"type": "TEXT",
"translatable": true
},
{
"name": "DELETE",
"content": "ANDRRES_key_delete",
"type": "TEXT",
"translatable": true
},
{
"name": "BACKSPACE",
"content": "ANDRRES_key_backspace",
"type": "TEXT",
"translatable": true
},
{
"name": "F1",
"content": "F1",
"speech_cmd": "F 1",
"type": "TEXT"
},
{
"name": "F2",
"content": "F2",
"speech_cmd": "F 2",
"type": "TEXT"
}
],
"value": [
{
"name": "TAB",
"content": "ANDRRES_key_tab",
"type": "TEXT",
"translatable": true
},
{
"name": "DELETE",
"content": "ANDRRES_key_delete",
"type": "TEXT",
"translatable": true
}
]
}
}
}
<ui_update id="show_key_input_footer">
<widget_params>
<ui_element name="FOOTER_L2">
<param name="VISIBILITY">INVISIBLE</param>
</ui_element>
<ui_element name="RETURN_L1">
<param name="menu_id" descriptor="">0</param>
</ui_element>
§{#each Configuration.buttons.value}§
<ui_element name="§{name}§">
<param name="menu_id" descriptor="">§{math @index "+" 1}§</param>
</ui_element>
§{#if @last}§
§{#if Configuration.enable_camera.value}§
<ui_element name="CAMERA">
<param name="MENU_ID">§{math @../index "+" 2}§</param>
</ui_element>
<ui_element name="ENTER">
<param name="MENU_ID">§{math @../index "+" 3}§</param>
</ui_element>
§{else}§
<ui_element name="ENTER">
<param name="MENU_ID">§{math @../index "+" 2}§</param>
</ui_element>
§{/if}§
§{/if}§
§{/each}§
</widget_params>
</ui_update>
このように、高度な設定が可能なコンポーネントを作成することができます。