このCookBookでは、IM-LogicDesignerの「条件分岐」「繰り返し」制御要素の条件で利用するEL式について定義例を紹介しています。
ここでは主に「 IM-LogicDesigner上で取り扱う値を条件に用いる場合 」の指定方法を説明します。
EL式の基本的な定義方法については説明しません。
ロジックフローサンプルデータ
以下のロジックフローサンプルデータをダウンロードし、実際の動作確認などにご活用ください。
IM-LogicDesignerサンプルデータ: im_logicdesigner-data_113665
定義例
- フローの入力値を条件に利用する。
- 定数値を条件に利用する。
- 変数値を条件に利用する。
- 暗黙的な変数(セッションプロパティ/アカウントコンテキスト/ユーザコンテキスト)を条件に利用する。
- 他のタスクの出力値を条件に利用する。
- 繰り返しを行う要素/繰り返し回数(item/index)を利用する。
各定義例について、それぞれ紹介していきます。
1. フローの入力値を条件に利用する。
1-1. 定義方法
ロジックフローに入力値として定義した値を条件(EL式)に利用する場合、以下の形式で定義を行います。
1 |
$input.XXX |
$inputはIM-LogicDesignerが初めから定義しているフローの入力値の親(root)となる暗黙的な変数となります。
XXXの部分には、ロジックフローの入力値から実際に利用したい値の名称を指定します。
1-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
今回のフローでは「入力値に定義された文字列が"IM-LD"で始まっている場合にのみ」入力されたメッセージをログとして出力します。
この「入力値に定義された文字列が"IM-LD"で始まっている場合にのみ」を表す条件(EL式)の定義は以下のとおりになります。
1 |
${$input.message.startsWith("IM-LD")} |
この定義は具体的には以下のような構成になっています。
- 入力値の親(root)を表す暗黙的な変数
- 対象とする入力値
- 条件となる構文(真偽値を返却)
2. 定数値を条件に利用する。
2-1. 定義方法
ロジックフローに定数値として定義した値を条件(EL式)に利用する場合、以下の形式で定義を行います。
1 |
$const.XXX |
$constはIM-LogicDesignerが初めから定義しているフローの定数値の親(root)となる暗黙的な変数となります。
XXXの部分には、ロジックフローの定数値に定義された値の中から実際に利用したい定数値の名称を指定します。
2-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
今回のフローでは「入力値に定義された文字列の中に、定数値(TARGET_WORD)が含まれている場合にのみ」入力されたメッセージをログとして出力します。
この「入力値に定義された文字列の中に、定数値(TARGET_WORD)が含まれている場合にのみ」を表す条件(EL式)の定義は以下のとおりになります。
1 |
${$input.message.contains($const.TARGET_WORD)} |
この定義は具体的には以下のような構成になっています。
- 定数値の親(root)を表す暗黙的な変数
- 対象とする定数値
- 条件となる構文(真偽値を返却)
3. 変数値を条件に利用する。
3-1. 定義方法
ロジックフローの変数値を条件に利用する場合、以下の形式で定義を行います。
1 |
$variable.XXX |
$variableはIM-LogicDesignerが初めから定義しているフローの変数値の親(root)となる暗黙的な変数となります。
XXXの部分には、実際のロジックフローの変数値として定義された値の名称を指定します。
3-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
フロー
今回のフローでは、「2. 定数値を条件に利用する。」で実装した内容と同等の処理を、変数を用いて行っています。
変更が加わった箇所は、定数値で定義された文字列を事前に変数に代入する処理を行っている点です。
EL式の定義は以下のとおりになります。
1 |
${$input.message.contains($variable.targetWord)} |
この定義は具体的には以下のような構成になっています。
- 変数値の親(root)を表す暗黙的な変数
- 対象とする変数値
- 条件となる構文(真偽値を返却)
4. 暗黙的な変数(セッションプロパティ/アカウントコンテキスト/ユーザコンテキスト)を条件に利用する。
4-1. 定義方法
ロジックフローでセッションプロパティ/アカウントコンテキスト/ユーザコンテキストといったIM-LogicDesignerが提供している暗黙的な変数を条件に利用する場合、以下の形式で定義を行います。
- セッションプロパティ
1 |
$session_properties.XXX |
- アカウントコンテキスト
1 |
$account_context.XXX |
- ユーザコンテキスト
1 |
$user_context.XXX |
$session_properties/$account_context/$user_contextはIM-LogicDesignerが初めから定義している暗黙的な変数値の親(root)となる暗黙的な変数となります。
XXXの部分には、暗黙的な変数値が保持している値の名称を指定します。
4-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
フロー例
今回のフローでは「ユーザコンテキストから取得されるユーザコードが aoyagi
だった場合」その旨を表すログメッセージを出力します。
(ユーザコンテキストから取得できる値を可変とするため、予め入力で与えられたユーザコードでユーザ切り替えを行うタスクを配置しています)
この「ユーザコンテキストから取得されるユーザコードが aoyagi
だった場合」を表す条件(EL式)の定義は以下のとおりになります。
1 |
${$user_context.userProfile.userCd.equals("aoyagi")} |
この定義は具体的には以下のような構成になっています。
- 暗黙的な変数値(ユーザコンテキスト)の親(root)を表す変数
- 対象とする変数値
- 条件となる構文(真偽値を返却)
5. 他のエレメントの出力値を条件に利用する。
5-1. 定義方法
他のエレメントの出力値を条件に利用する場合、以下の形式で定義を行います。
1 |
(element_ailias).XXX |
(element_ailias)は利用したいエレメントに定義したエイリアスを指定します。
エレメントのエイリアスには他の変数とは異なり、$ が先頭につかないことに注意してください。
XXXの部分には、対象とするエレメントの出力値として定義された値の名称を指定します。
5-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
今回のフローでは「アカウント情報を取得し、そこから取得されるユーザコードが ueda
だった場合」その旨を表すログメッセージを出力します。
この「アカウント情報を取得し、そこから取得されるユーザコードが ueda
だった場合」を表す条件(EL式)の定義は以下のとおりになります。
1 |
${im_getUedaInfo.userCd.equals("ueda")} |
この定義は具体的には以下のような構成になっています。
- 利用したいエレメントに定義したエイリアス
- 対象とする変数値
- 条件となる構文(真偽値を返却)
このEL式では ueda
のアカウント情報を取得するエレメントのエイリアスを指定しています。
これをもう片方の aoyagi
のアカウント情報を取得するエレメントのエイリアス(以下参照)に変更した場合を考えます。
1 |
${im_getAoyagiInfo.userCd.equals("ueda")} |
この変更によって、参照するエレメントが変更され、ログの出力が行われなくなります。
6. 繰り返しを行う要素/繰り返し回数(item/index)を利用する。
6-1. 定義方法
繰り返しを行う要素(item)を条件に利用する場合、以下の形式で定義を行います。
1 |
im_startLoop1.item |
また、繰り返し回数(index)場合は以下の形式で定義を行います。
(なお、繰り返し回数(index)から取得できる値は1から始まる(1-indexed)ことに留意してください)
1 |
im_startLoop1.index |
6-2. 定義例
実際の定義例をサンプルのフローとともに確認します。
フロー例
今回のフローでは「繰り返し回数が5回未満、かつ、対象要素の文字列の長さが3である場合」繰り返し処理を継続すると条件づけています。
この「繰り返し回数が5回未満、かつ、対象要素の文字列の長さが3である場合」を表す条件(EL式)の定義は以下のとおりになります。
1 |
${im_startLoop1.index < 5 && im_startLoop1.item.length() == 3} |
この定義は具体的には以下のような構成になっています。
- 利用する「繰り返し」制御要素に定義したエイリアス
- 対象とする値
a. 現在の繰り返しの要素番号
b. 現在の繰り返しの要素 - 条件となる構文 (真偽値を返却)
a. 要素番号が5未満の場合
b. 要素(文字列)の長さが3である場合
おわりに
これまでの説明で、以下の要素を利用すること簡単に目的のEL式を定義することが分かりました。
- IM-LogicDesignerではロジックフロー内のエレメントの持つ値を簡単にEL式に利用出来ます。
$input
や$const
のような事前に定義された便利な変数が存在します。
最後に、intra-mart Accel Platform 2016 Summer(Nirvana)ではこうしたEL式の定義をサポートするための機能を提供予定です。より使いやすくなるIM-LogicDesignerにご期待ください。