intra-mart Accel Platform IM-LogicDesigner チュートリアルガイド 第7版 2018-04-01

5.4.8.2. 初期サンプルから見るユーザ定義(テンプレート)の詳細

この章では、テンプレートを利用したユーザ定義の作成方法を、IM-LogicDesignerが提供する初期サンプルをもとに説明します。

5.4.8.2.1. 初期サンプルについて

本章で扱う「初期サンプル」とは、「ユーザ定義(テンプレート)の作成画面への遷移手順」に基いて「テンプレート定義編集」画面に遷移した際、初めから定義されているテンプレート、および、入力値/出力値のことを指します。
../../../../_images/about_first_sample1.png

図:初期表示時、サンプルテンプレートが定義されている

初期表示時に定義されているテンプレートは以下の通りです。
<#setting url_escaping_charset="UTF-8">
<#-- mail body (variable example) -->
Hello, ${userName}.
The list of the goods which are in the cart is as follows.

<#-- goods list (repeat example) -->
<#list goodsList as goods>
 * ${goods.name} x${goods.count} = $${goods.price}-
</#list>

<#-- special price (branch example) -->
<#if totalPrice gte 100>
Because the total amount is $100 or more, shipping is free.
</#if>

<#-- contact information (escape example) -->
When you had like to make contact with us, please access ahead of following link.
http://<HOST>:<PORT>/<CONTEXT_PATH>/contact/${customerId?url}

Thank you.
初期表示時のテンプレートには、利用頻度の高い以下の構文が含まれています。
  • 文字列の置換
  • 繰り返し
  • 条件分岐
  • エスケープ処理

5.4.8.2.2. テンプレート定義

はじめに、テンプレートの定義方法と留意点を説明します。

5.4.8.2.2.1. テンプレートの記法/構文

ユーザ定義(テンプレート)では、テンプレートの記法としてFreeMarker Template Language(FTL)を利用します。

コラム

FTLの詳細について

FTLの詳細については、「IM-LogicDesigner仕様書」 - 「ユーザ定義タスク」 - 「テンプレート」を参照ください。
また、仕様書で説明している以外の式、および、ディレクティブについては「Template Language Reference」を参照してください。
ユーザ定義(テンプレート)の初期サンプルでは、物品購入に関するメール本文を想定したテンプレートを定義しています。
ここでは、各段落についてそれぞれどの様な記法/構文が利用されているかを説明します。

5.4.8.2.2.1.1. 式の利用

テンプレートの記法/構文のベースとなるのは式(補間式)です。
式では、「${XXX}」という構文で表現され、XXXで指定された変数や、後述する記法に応じて、内容を補間します。
以下の例では、式を利用してuserNameの値をテンプレートに埋め込んでいます。
<#setting url_escaping_charset="UTF-8">
<#-- mail body (variable example) -->
Hello, ${userName}.
The list of the goods which are in the cart is as follows.

5.4.8.2.2.1.2. 繰り返しの利用

テンプレートでは複数の値を順次取り出して処理を行う、繰り返し処理が利用可能です。
繰り返し処理を行うには「<#list LIST as ITEM></#list>」というタグ形式を用います。
このタグ形式を、FTLではディレクティブと呼びます。
以下の例では、繰り返しを利用してgoodsListに含まれる要素をgoodsという名称で扱っています。
そしてgoodsに含まれる値を式(補間式)を利用してテンプレートに埋め込んでいます。
<#-- goods list (repeat example) -->
<#list goodsList as goods>
 * ${goods.name} x${goods.count} = $${goods.price}-
</#list>

5.4.8.2.2.1.3. 条件文の利用

条件文は繰り返しと同様にディレクティブを利用します。
条件文のディレクティブは「<#if CONDITION> ~ </#if>」という形で表現します。
以下の例では、totalPriceの値が100以上(gte : greater than or equal)という条件文を定義しています。
そして、totalPriceが100以上の場合には、送料無料である文言が追加でテンプレートに埋め込まれます。
<#-- special price (branch example) -->
<#if totalPrice gte 100>
Because the total amount is $100 or more, shipping is free.
</#if>

5.4.8.2.2.1.4. ビルトイン式の利用

式の利用」で説明した式(補間式)では、利用する値を内部でさらに処理を加えるビルトイン式の定義が可能です。
ビルトイン式は通常の式で指定する変数の最後に?を付与し、その後ろに具体的な処理を示す内容を指定します。
以下の例では、customerIdに「url」というビルトイン式を定義しています。
urlビルトイン式は指定した値をURLエンコードします。
<#-- contact information (escape example) -->
When you had like to make contact with us, please access ahead of following link.
http://<HOST>:<PORT>/<CONTEXT_PATH>/contact/${customerId?url}

5.4.8.2.2.2. テンプレートの多言語化

ユーザ定義(テンプレート)では、標準で多言語対応を行うための仕組みが用意されています。
多言語対応を行うには、はじめに各言語フィールドに言語に応じたテンプレートを定義します。
言語フィールドは「テンプレートの入力」をクリックすることで展開/格納されます。
../../../../_images/i18n_template_field.png

図:日本語フィールドへの定義例

次に実際にユーザ定義(テンプレート)をロジックフロー上で利用する際に、多言語化の基準となるロケール情報をユーザ定義に渡します。
具体的には、ユーザ定義(テンプレート)が標準で提供する入力値である「locale」に多言語化の基準となるロケール情報をマッピングします。
../../../../_images/i18n_locale_mapping.png

図:ロジックフローの入力値を利用する場合のロケール情報のマッピング例

対応するロケールの言語テンプレートが定義されていない場合、または、ロケールが指定されていない場合、テンプレートは「標準」が選択されます。

5.4.8.2.3. 入力値/出力値

次に、作成するユーザ定義(テンプレート)を呼び出す際の入力値と、呼び出しが完了した際に返却する出力値の定義について説明します。
../../../../_images/sample_input_output1.png

図:初期表示時の入力値、および、出力値

5.4.8.2.3.1. 入力値

ユーザ定義(テンプレート)の入力値は、システムによって以下の二つが固定で定義されています。
入力値 説明
locale<locale> 利用するテンプレートのロケール(言語)の指定を行う入力値
data<object> テンプレートを定義する記法/構文内で利用する値の、親となる入力値
定義したテンプレートに「テンプレートの記法/構文」で紹介した方法で値を埋め込む場合には、data<object>配下に具体的な入力値を定義します。
初期サンプルではdata<object>配下に、以下の要素をテンプレートへの入力値として定義しています。
  • userName<string> - ユーザ名

  • goodsList<object[]> - 商品リスト
    • name<string>
    • count<integer>
    • price<integer>
  • totalPrice<integer> - 合計金額

  • customerId<string> - カスタマーID

注意点として、data<object>の配下以外に定義された値はテンプレート上での利用はできません。

5.4.8.2.3.2. 出力値

ユーザ定義(テンプレート)の出力値は、システムによって固定です。
IM-LogicDesignerでは定義されたテンプレート、および、「入力値」をもとに、以下の内容をユーザ定義(テンプレート)の出力値として定義します。
出力値 説明
output<string> テンプレート、および、入力値から生成された文字列

5.4.8.2.4. ユーザ定義(テンプレート)を作成する。

最後に、これまでの内容を踏まえてユーザ定義(テンプレート)を作成します。
  1. 「テンプレート定義編集」画面を表示します。

  2. ユーザ定義の基本情報となる各項目に以下の値を入力します。

    • ユーザ定義ID「tutorial_ud_template_message

    • バージョン「1」(固定)

    • ユーザ定義名
      • 標準 - 「ユーザ定義[テンプレート]
      • 日本語、英語、中国語(中華人民共和国) - 入力なし
    • カテゴリ
      • カテゴリID - 「tutorial_user_category
    • ソート番号「6001

    ../../../../_images/implement_ud_template_message1.png

    図:基本情報の入力

  3. 入力値、および、出力値を「入力値/出力値」をもとに確認します。

    ../../../../_images/implement_ud_template_message2.png

    図:入出力値の確認

  4. テンプレートを「テンプレート定義」で提示されているテンプレート定義を元に確認します。

    ../../../../_images/implement_ud_template_message3.png

    図:テンプレート定義の確認

  5. 登録」をクリックします。

    ../../../../_images/implement_ud_template_message4.png

    図:登録

以上で、ユーザ定義(テンプレート)の作成が完了しました。