EL式を利用して文字列を出力する際の設定書式です。[データ更新]の文字型データ項目への代入や[メッセージ送信中間イベント(メール)]のメール本文等の設定、各工程の設定値をセットする際に利用されます。「データ項目の参照」「アプリやプロセス情報の参照」を利用可能です。また、フォーマット関数を利用して出力書式を指定したり、JSON/XML のエスケープやハッシュ値を計算する関数も利用可能です。
BPMNアイコン:[データ更新]、[メッセージ送信中間イベント(メール)]、など
ワークフローの変数を参照する
ワークフロー基盤
アプリケーションルートURL(システム変数)
設定書式 | 出力される文字列 |
---|---|
${var[applicationRoot]} | https://example.questetra.net/ |
アプリ
アプリID
設定書式 | 出力される文字列 |
---|---|
#{processModelInfoId} | 12 |
アプリ名
#{processModelInfoName} | 問合対応フロー |
プロセス
プロセスID
設定書式 | 出力される文字列 |
---|---|
#{processInstanceId} | 12345 |
p#{processInstanceId} | p12345 |
#{#sformat('%d', processInstanceId)} | 12345 |
#{#sformat('%04d', processInstanceId)} | 12345 |
#{#sformat('%06d', processInstanceId)} | 012345 |
プロセス連番
#{processInstanceSequenceNumber} | 67890 |
#{#sformat('%06d', processInstanceSequenceNumber)} | 067890 |
xyz#{#sformat('%06d', processInstanceSequenceNumber)} | xyz067890 |
プロセス開始日時
#{processInstanceStartDatetime} | 2020-03-14 09:45 |
#{#dateFormatter.format('yyyy年MM月dd日 HH時mm分 (E) Z', processInstanceStartDatetime)} | 2020年03月14日 09時45分 (水) +0900 |
#{#dateFormatter.format('yy年M月', processInstanceStartDatetime)} | 20年3月 |
プロセス開始ユーザ
#{processInstanceInitQuserName} | SUZUKI Ichiro |
#{processInstanceInitQuser?.getEmail()} | suzuki@example.com |
プロセス開始組織
#{processInstanceInitQgroupName} | Sales |
#{processInstanceInitQgroup?.getEmail()} | sales@example.com |
親プロセス ID
#{parentProcessInstanceId} | 1234 |
- 同一ワークフロー基盤 から送信された HTTP リクエストにより[メッセージ開始イベント(HTTP/Webhook)]から開始されたプロセスで利用可能
データ項目を参照する
文字型
設定書式 | 出力される文字列 |
---|---|
#{#q_string} | ABC, def |
数値型
#{#q_numeric} | 12,345.67 |
#{#sformat("%1.1f", #q_numeric)} | 12345.7 |
#{#sformat("%1.1f", #q_numeric - 45)} | 12300.7 |
- 小数点表記はデータ項目の設定に従って出力されます
- 接頭/接尾文字は出力されません
- 演算結果を出力させるように設定することも可能です
選択型
#{#q_select_radio} | Brazil |
#{#q_select_radio?.![value]} | br(選択肢のID) |
#{#q_select_check} | Japan, Brazil(選択された選択肢の表示ラベル) |
#{#q_select_check?.![value]} | ja, br(選択された選択肢のID) |
#{#q_select_check?.get(1)} | Brazil (ふたつめの選択肢の表示ラベル) |
#{#q_select_check?.get(0)?.value} | ja(ひとつめの選択肢のID) |
- 選択型データ項目(チェックボックス)で複数選択肢が出力される際、区切り文字(デリミタ)は「,(カンマ)」
日付型/日時型
#{#q_date} |
2020-03-14 (日付型 Y/M/D) |
#{#q_datetime} | 2020-03-14 23:45 (日時型) |
#{#q_datetime.addHours(9)} | 2020-03-15 08:45(9時間後) |
#{#q_datetime.addDays(#q_num.intValue())} | 2020-03-24(数値型データ項目(q_num)の値を参照) |
#{#dateFormatter.format('yyyy年MM月dd日', #q_datetime)} | 2020年03月14日 |
- データ項目のサブタイプ設定に従う
ファイル型
#{#q_file} | ((ファイル名)) |
#{#q_file?.![contentType]} | ((Content-Type の一覧)) |
#{#q_file?.get(0)?.getCharset()} | ((先頭ファイルの Content-Type のうち charset パートの値)) |
#{#q_file?.get(1)?.length} | ((2番目のファイルのサイズ)) |
- 複数ファイルの場合は、「, (カンマ)」区切り
ユーザ型
#{#q_user} | SUZUKI Ichiro <suzuki@example.com> |
#{#q_user?.name} or #{#q_user?.getName()} |
SUZUKI Ichiro |
#{#q_user?.id} or #{#q_user?.getId()} |
13 (ユーザID) |
#{#q_user?.email} or #{#q_user?.getEmail()} |
suzuki@example.com |
#{#q_quser?.isDeletedInFuture()} | true/false ([削除予定]フラグの有無) |
組織型
#{#q_org} | Sales <sales@example.com> |
#{#q_org?.name} or #{#q_org?.getName()} |
Sales |
#{#q_org?.id} or #{#q_org?.getId()} |
5 (組織ID) |
#{#q_org?.email} or #{#q_org?.getEmail()} |
sales@example.com |
#{#q_org?.isDeletedInFuture()} | true/false ([削除予定]フラグの有無) |
テーブル型
#{#q_table} | 2 row(s) |
#{#q_table?.getSummary()?.get('price')} | 300 |
#{#q_table?.get(0, 2)} | キャッシュ |
#{#q_table?.getObject(0, 2)?.getDisplay()} | キャッシュ |
#{#q_table?.getObject(0, 'kind')?.display} | 交通費 |
#{#q_table?.rows?.![#this['name'] + '|' + #this['price']]} | りんご|100, みかん|200 |
掲示板型
#{#q_discussion} | ------- [2020-02-07 13:29] <NAKAMURA Haruko> Hello, Good-bye (単一行への代入はエラーになります) |
ガイドパネル型
(参照不可) | (表示専用) |
関数を利用した高度な出力
#{#escaper.escapeEcmaScript(#q_script_data)} | ((JavaScript エスケープされた文字列)) |
#{#escaper.escapeJson(#q_json_data)} | ((Json エスケープされた文字列)) |
#{#escaper.escapeXml(#q_xml_data)} | ((XML エスケープされた文字列)) |
#{#escaper.escapeHtml(#q_html_data)} | ((HTML エスケープされた文字列)) |
#{#sha256(processInstanceTitle)} | ((ハッシュ文字列)) |
#{#randomString(12)} | pJBAzTDft8wT ((英数12文字: [0-9a-zA-Z]{12})) |
#{#joiner.join(#q_select_check, '<br>')} | 二番<br>三番 ((チェックボックスのラベルを連結子とともに出力)) |
#{#joiner.join(#q_select_check?.![value + ':' + display], '<li>', '</li>')} | <li>2:二番</li><li>3:三番</li> ((チェックボックスのID:ラベルを接頭文字・接尾文字とともに出力)) |
#{#joiner.join(#q_select_check, '<li>', '</li>', '<br>')} |
<li>二番</li><br><li>三番</li> |
#{ #joiner.join( #q_table?.rows?.![ #this['name'] + '|' + #this['price'] ], #NL) } |
りんご|100 みかん|200 ((テーブル型データのセルを連結出力)) |
#{ #joiner.join( #q_table?.rows?.![ #joiner.join(cols, ' | ') ], #NL) } |
交通費:タクシー|4300|キャッシュ 交通費:飛行機|15000|クレジットカード ((テーブル型データのセルの値を連結出力)) |
#{#joiner.splitJoin(#q_string_multiple, '<br>')} |
複数行テキストを<br>1行ずつ取得し<br>指定した連結子で結合して<br>出力します。 |
#{#joiner.splitJoin(#q_string_multiple, '<li>', '</li>')} |
<li>複数行テキストを</li><li>1行ずつ取得し</li><li>指定した連結子で結合して</li><li>出力します。</li> |
#{#joiner.splitJoin(#q_string_multiple, '<li>', '</li>', #NL)} |
<li>複数行テキストを</li> |
- "#escapeEcmaScript()" は "#escaper.escapeEcmaScript()" と同様に動作します
- "#escapeXml()" は "#escaper.escapeXml()" と同様に動作します
Formatter を利用した高度な出力
"#sformat()" にて "java.lang.String" を、"#dateFormatter" にて "com.questetra.bpms.core.event.scripttask.DateFormatWrapper" を、それぞれ利用できます。 たとえば、数値型データを文字列として出力させる際、EL式内に「書式指定子」(フォーマット指定子)を利用すれば様々なフォーマットに変換出力させることが可能です。 基本的な指定方法は『{パディング文字}{文字列全体の表示幅}.{小数点以下の表示幅}f』です。 幅揃え文字(パディング文字)を指定すれば、"文字列全体の表示幅" に満たない出力桁数となる場合に、パディング文字が挿入されます。
設定書式 | 参照される値 | 出力される文字列 |
---|---|---|
USD #{#sformat("%.2f", #q_numExample)} †四捨五入 |
123456 | USD 123456.00 |
123456.78 | USD 123456.78 | |
123456.789012 | USD 123456.79 | |
1 | USD 1.00 | |
-1 | USD -1.00 | |
-1.234 | USD -1.23 | |
USD #{#sformat("%.2f", ( #q_numExample - 0.005 ) )} †正の切り捨て |
123456.789012 | USD 123456.78 |
1 | USD 1.00 | |
-1 | USD -1.01 †挙動に注意 |
|
-1.234 | USD -1.24 †挙動に注意 |
|
JPY #{#sformat("% 4.0f", #q_numExample)} | 123456.78 | JPY 123457 †2 spaces |
1 | JPY 1 †4 spaces |
|
-1.234 | JPY -1 †3 spaces |
|
JPY #{#sformat("%,4.0f", #q_numExample)} †桁区切り文字の挿入 |
123456.78 | JPY 123,457 |
1 | JPY 1 †4 spaces |
|
INVOICE-#{#sformat("%04.0f", #q_numExample)} †ゼロパディング |
123456 | INVOICE-123456 |
123456.78 | INVOICE-123457 | |
1 | INVOICE-0001 | |
-1 | INVOICE--001 | |
-1.234 | INVOICE--001 | |
Chg: #{#sformat("%+.2f", #q_numExample)} †正符号の付与 |
123456.789012 | Chg: +123456.79 |
-1.234 | Chg: -1.23 | |
#{#dateFormatter.format('yyyy-MM-dd HH:mmZ', #q_datetime)} | 2021-04-12 09:45 | 2021-04-12 09:45+0900 |
#{#dateFormatter.format('GMT-0900', 'yyyy年MM月dd日 HH時mm分Z', #q_datetime)} | 2021-04-12 09:45 | 2021年04月11日 15時45分-0900 |
- 数値データ(引数)が "processInstanceId" や "processInstanceSequenceNumber" といった整数型で固定されている形式の場合は、conversion文字は「f」ではなく「d」となり、基本的な指定方法は『{文字列全体の表示幅}d』となります。
- 小数点出力等の書式については、基盤のロケール設定に依存します。
- https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/util/Formatter.html
- https://docs.oracle.com/javase/jp/11/docs/api/java.base/java/text/SimpleDateFormat.html
- "#format()" にて "java.text.SimpleDateFormat" の利用も可能です
Notes
- 変数に使用されるEL式は、SpEL (Spring Expression Language) の実装にしたがっています
- 複数のEL式を活用した書式も設定可能です
- 例)「プロセスIDは#{processInstanceId}です。プロセス連番は#{processInstanceSequenceNumber}です」と設定すれば、「プロセスIDは12345です。プロセス連番は67890です」という値が代入されます
- 単一行の文字型データ項目に、複数行のデータを代入しようとした場合など、矛盾が生じた際にはエラーとなります
- [データ更新]では、設定書式として何も設定しない場合、「空」が代入されます(データが消去されます)
コメント
0件のコメント
記事コメントは受け付けていません。