EL式を用いて、任意の分岐条件式を定義することが可能です。
条件式が true と評価されれば、指定の遷移先に処理が進みます。評価結果が false となる場合(評価エラーが発生する、nullになってしまう場合なども false 扱い)は、条件不一致として遷移しません。
1. EL式として利用可能な値
EL式には、下記の値が利用可能です。
- アプリやプロセス情報 (プロセス属性)
- データ項目
※ ガイドパネル / 掲示板型は対応しておりません。 - 以下のものは利用できません。 バリデーションエラーとなります。
- システム定数: ${var[applicationRoot]}
- アプリ設定変数: ${var[param1]}
2. EL式で利用可能な演算子
EL式では、下記の演算子が利用可能です。
- 比較演算子
- 「==」、「!=」、「>」、「>=」、「 <」、「 <=」
- 数値型や、日付型 / 日時型 にも利用可能です。
- 比較演算子の左辺と右辺は同じ型である必要があります。
特に日付型の種類が違うもの(年月日/年月/年/日付)同士の比較や、日付型と日時型の単純比較などは、評価結果が false になるため、ご注意ください。
- 数値演算子
- 「+」、「-」、「*」、「/」、「%」
- 文字型データ項目同士の数値演算子は機能しません。少なくともどちらか一方が、または両方が数値型データ項目であることが求められます。
3. EL式による条件の記述サンプル
3-1. ワークフローの変数を利用した条件
| 評価式 | 式の内容 |
|---|---|
| processInstanceDebug == true | デバッグプロセスの場合に指定された遷移先に処理が進む |
| processInstanceTitle == 'The Title.' | プロセスの件名 が "The Title." と等しい |
| processInstanceId <= 20000 | プロセスID が 20000以下 |
| processInstanceInitQuserName?.startsWith('Jack') == true | プロセス開始ユーザの名前が "Jack" で始まる |
| processInstanceInitQuser?.getId() == 22 | プロセス開始ユーザのIDが 22 と等しい |
| processInstanceInitQgroupName?.endsWith('Customer') == true | プロセス開始組織の名前が "Customer" で終わる |
| processInstanceInitQgroup?.getEmail() == 'customer@example.com' | プロセス開始組織のE-mailが "customer@example.com" と等しい |
| processInstanceStartDatetime?.toString() == #q_datetime?.toString() | プロセス開始日時が 日時型データ項目「q_datatime」の値と等しい |
| processInstanceStartDatetime == #q_datetime |
[注意]
|
| processInstanceSequenceNumber >= 10 | プロセス連番が 10以上 |
| processModelInfoId == 123 | アプリIDが 123 と等しい |
| processModelInfoName.contains('Satisfaction') == true | アプリ名に 「Satisfaction」 を含む |
3-2. データ項目を利用した条件
| 評価式 | 式の内容 |
|---|---|
| #q_string0?.contains('consultation') == true | 文字列型データ項目「q_string0」の値が "consultation" を含む |
| #q_string0 == null | 文字列型データ項目「q_string0」が未入力 |
| #q_string0 != null | 文字列型データ項目「q_string0」に値が入力されている |
| #q_numeric1 <= 999 | 数値型データ項目「q_numeric1」の値が 999以下 |
| #q_radio2?.get(0)?.value == '3' | 選択型(ラジオボタン)データ項目「q_radio2」で選択された項目の選択肢IDの値が "3" と等しい |
| #q_checkbox3?.?[value == 'b']?.size() == 1 | 選択型(チェックボックス)データ項目「q_checkbox3」で選択された項目のうち、選択肢IDが "b" のものが選択されている |
| #q_select != null && {‘選択肢の値1’, ‘選択肢の値2’}.contains(#q_select.get(0).value) | 選択型データ項目で、'選択肢の値1' か '選択肢の値2' のいずれかの選択肢が選択されている |
| #q_ymd4 == #q_ymd5 | 日付型(年月日)データ項目「q_ymd4」の値が、「q_ymd5」の値と等しい |
| #q_ym6 < #q_ym7 | 日付型(年月)データ項目「q_ym6」の値が、データ項目「q_ym7」の値より小さい |
| #q_datetime8 >= #q_datetime9 | 日時型データ項目「q_datetime8」の値が、データ項目「q_datetime9」の値以上 |
| #q_file10 == null | ファイル型データ項目「q_file10」にファイルが未添付 |
| #q_file10?.size() > 1 | ファイル型データ項目「q_file10」のファイル添付数が 1個を超える |
| #q_user11?.id == 10 | ユーザ型データ項目「q_user11」のユーザのIDが 10 と等しい |
| #q_user11?.getEmail() == 'SouthPole@example.com' | ユーザ型データ項目「q_user11」のユーザのE-mailが 'SouthPole@example.com' と等しい |
| #q_table12?.get(1, 2) == 'Apple' | テーブル型データ項目「q_table12」の 2行3列目(サブデータ項目:文字列型)の値が 'Apple' と等しい |
| #q_organization13?.getId() == 15 | 組織型データ項目「q_organization13」の組織のID が 15 と等しい |
Appendix
-
単一条件だけではなく、複数の条件項目を組み合わせることも可能です。
processInstanceInitQuserName?.startsWith('Jack') == true && processInstanceInitQgroup?.getEmail() == 'customer@example.com' && #q_string0?.contains('consultation') == true && #q_radio2?.get(0)?.value == '3' && #q_datetime8 >= #q_datetime9 && #q_organization13?.getId() == 15
- 演算結果が null になってしまう場合も、「true でない (false)」扱いになるため、非推奨です。
-
次のような記述で、「#q_string」が未入力(null)の場合、EL式の評価結果も null となり、条件式の演算結果は false となります。
(非推奨) #q_string?.startsWith('test') -
EL式の null 評価を避けるため、下記の記述を推奨します。
#q_string?.startsWith('test') == true
-
- 同様に、「!」演算子も評価エラーを誘発する可能性があるため、非推奨です。
-
次のような記述で、「#q_string」が未入力(null)の場合、EL式の評価結果は !null で評価エラーとなり、条件式の演算結果は false となります。
(非推奨) !#q_string?.startsWith('test') -
EL式の !null 評価エラーを避けるため、下記の記述を推奨します。
#q_string?.startsWith('test') == falseまたは
#q_string?.startsWith('test') != true
-
- 利用可能なデータ項目の型は、次のリファレンスを参照してください。
- データ項目
- ガイドパネル / 掲示板型は対応しておりません。
- 各データ項目に対するEL式の利用方法は、下記リファレンスも参考にしてください。
コメント
0件のコメント
サインインしてコメントを残してください。