1.6.4 プロセスデータの利用方法
ここではプロセスデータの指定方法および記述形式と,単一型プロセスデータの場合とリスト型プロセスデータの場合のアクセス方法を説明します。
プロセスデータの指定方法および記述形式
案件を特定する情報とプロセスデータキー名を次のどれかに指定すると,プロセスデータ値にアクセスできます。
-
BPMNビジネスプロセス定義のシーケンスフローに設定する分岐条件(condition)
-
BPMNビジネスプロセス定義のマルチインスタンスに設定する繰り返し回数(loopCardinality)および完了条件(completionCondition)
-
BPMNビジネスプロセス定義のタイマーイベントに設定するタイマールール
-
BPMNビジネスプロセス定義のアドホック・サブプロセスに設定する完了条件(completionCondition)
-
BPMNビジネスプロセス定義のユーザタスクに設定する作業者
-
アプリケーション呼び出し情報ファイル
-
コールアクティビティ情報ファイル
-
REST APIのリクエストボディ
-
BPMN連携ライブラリのJava APIの引数
案件を特定する情報の指定方法は,機能によって異なります。また,機能によっては,対象の案件が自明な場合は,案件を特定する情報を省略できるときがあります。
単一型プロセスデータへの参照アクセス
単一型プロセスデータにアクセスするためのプロセスデータキー名に使用できる文字列を次に示します。
-
プロセスデータ値が文字列型の場合:
$S<ProcessDataName>
-
プロセスデータ値が数値型の場合:
$N<ProcessDataName>
<ProcessDataName>には,英大文字,英小文字,または数字だけから構成される文字列を指定してください。ただし,"IW"から始まる文字列は指定しないでください。
案件IDが"100"の案件のプロセスデータにアクセスする例を次の図に示します。
- [説明]
-
- ■パラメタ(1)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$SApplicant"を指定することで,文字列型プロセスデータテーブルの行(ProcessInstanceID="100",ProcessDataName="Applicant")が特定されます。対応するプロセスデータ値(ProcessDataValue)は"A01"です。
- ■パラメタ(2)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$NPrice"を指定することで,数値型プロセスデータテーブルの行(ProcessInstanceID="100",ProcessDataName="Price")が特定されます。対応するプロセスデータ値(ProcessDataValue)は"50000"です。
単一型プロセスデータ値の更新処理の例
プロセスデータを登録する際に,案件IDおよびプロセスデータキー名が同一のプロセスデータがすでに存在していた場合は,値を更新します(既存のプロセスデータ値を上書きします)。
単一型プロセスデータにアクセスするためのプロセスデータキー名に使用できる文字列については「単一型プロセスデータへの参照アクセス」を参照してください。
案件IDが"100"の案件のリスト型プロセスデータを更新する例を次の図に示します。
- [説明]
-
■パラメタ(1)を指定してアクセスした場合
案件ID(ProcessInstanceID)が"100"で,文字列型プロセスデータ名(ProcessDataValue)が"Approval"のプロセスデータが存在するため,プロセスデータ値"Y"を"N"に更新します。
■パラメタ(2)を指定してアクセスした場合
案件IDが"100"で,文字列型プロセスデータ名が"Comment"のプロセスデータが存在しないため,プロセスデータ値が"rejected"のプロセスデータを登録します。
リスト型プロセスデータの全要素への参照アクセス
リスト型プロセスデータにアクセスするためのプロセスデータキー名に使用できる文字列を次に示します。
-
プロセスデータ値が文字列型の場合:
$S<ProcessDataName>{}
-
プロセスデータ値が数値型の場合:
$N<ProcessDataName>{}
<ProcessDataName>には,英大文字,英小文字,または数字だけから構成される文字列を指定してください。ただし,"IW"から始まる文字列は指定しないでください。
案件IDが"100"の案件のプロセスデータにアクセスする例を次の図に示します。
- [説明]
-
- ■パラメタ(1)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$SApplicant{}"を指定することで,文字列型プロセスデータテーブルの3行が特定されます。対応するプロセスデータ値(ProcessDataValue)は,"A011","A012"および"A013"です。
なお,ワーク管理データベース内に保存されたリスト型プロセスデータは,ProcessDataNameの末尾に"{<番号>}"が付与されています。リスト型プロセスデータの全要素に参照アクセスする際は,番号(リスト内識別子)を意識する必要はありません。
- ■パラメタ(2)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$NPrice{}"を指定することで,数値型プロセスデータテーブルの2行が特定されます。対応するプロセスデータ値(ProcessDataValue)は,"50000"および"30000"です。
なお,プロセスデータ名のリスト内識別子が連番ではない場合,存在するプロセスデータ値だけを取得します。
リスト型プロセスデータ値の全要素の更新処理の例
プロセスデータを登録する際に,案件IDおよびプロセスデータキー名が同一のプロセスデータがすでに存在していた場合は,値を更新します(既存のプロセスデータ値を上書きします)。
リスト型プロセスデータにアクセスするためのプロセスデータキー名に使用できる文字列については「リスト型プロセスデータの全要素への参照アクセス」を参照してください。
案件IDが"100"の案件のリスト型プロセスデータを更新する例を次の図に示します。
- [説明]
-
■パラメタ(1)を指定してアクセスした場合
案件IDに"100",プロセスデータキー名に"$SApplicant{}"を指定することで,文字列型プロセスデータテーブルの3行が特定されます。更新するリスト型プロセスデータの要素数は2のため,すでに存在する行(ProcessDataNameが"Applicant{1}"および"Applicant{2}")は更新され,不要になった行(ProcessDataNameが"Applicant{3}")は削除されます。
■パラメタ(2)を指定してアクセスした場合
案件IDが"100",プロセスデータキー名が"$SComment{}"に対応するリスト型プロセスデータが存在しないため,プロセスデータ値が"rejected",および"approved"のプロセスデータが登録されます。
なお,ProcessDataNameの"{}"内には,追加対象リストの先頭のデータから順番に,各プロセスデータ値を識別するための番号(リスト内識別子)が自動的に付与されます。そのため,この例のProcessDataNameは"Comment{1}",および"Comment{2}"となります。
リスト型プロセスデータの1要素への参照アクセス
リスト型プロセスデータの1要素を特定する文字列をプロセスデータキー名に付与することで,単一型プロセスデータへのアクセスと同様の方法で,リスト型プロセスデータの1要素へアクセスできます。
リスト型プロセスデータの1要素にアクセスするためのプロセスデータキー名に使用できる文字列を次に示します。
-
プロセスデータ値が文字列型の場合:
$S<ProcessDataName>{<リスト内識別子>}
-
プロセスデータ値が数値型の場合:
$N<ProcessDataName>{<リスト内識別子>}
<ProcessDataName>には,英大文字,英小文字,または数字だけから構成される文字列を指定してください。ただし,"IW"から始まる文字列は指定しないでください。
リスト内識別子の範囲は1から2,147,483,647の整数です。
案件IDが"100"の案件のリスト型プロセスデータの1要素にアクセスする例を次の図に示します。
- [説明]
-
- ■パラメタ(1)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$SApplicant{2}"を指定することで,文字列型プロセスデータテーブルの行(ProcessInstanceID="100",ProcessDataName="Applicant{2}")が特定されます。対応するプロセスデータ値(ProcessDataValue)は"A012"です。
- ■パラメタ(2)を指定してアクセスした場合
-
案件IDに"100",プロセスデータキー名に"$NPrice{3}"を指定することで,数値型プロセスデータテーブルの行(ProcessInstanceID="100",ProcessDataName="Price{3}")が特定されます。対応するプロセスデータ値(ProcessDataValue)は"30000"です。
リスト型プロセスデータの1要素の更新処理の例
リスト型プロセスデータの1要素を特定する文字列をプロセスデータキー名に付与することで,単一型プロセスデータへのアクセスと同様の方法で,リスト型プロセスデータの1要素にアクセスできます。
リスト型プロセスデータの1要素にアクセスするためのプロセスデータキー名に使用できる文字列については「リスト型プロセスデータの1要素への参照アクセス」を参照してください。
リスト内識別子の範囲は1から2,147,483,647の整数です。
案件IDが"100"の案件のリスト型プロセスデータの1要素を更新する例を次の図に示します。
- [説明]
-
■パラメタ(1)を指定してアクセスした場合
案件ID(ProcessInstanceID)が"100"で,文字列型プロセスデータ名(ProcessDataName)が"Applicant{2}"のプロセスデータが存在するため,プロセスデータ値"A012"を"A012A"に更新します。
■パラメタ(2)を指定してアクセスした場合
案件IDが"100"で,文字列型プロセスデータ名が"Comment{2}"のプロセスデータが存在しないため,プロセスデータ値が"approved"のプロセスデータを登録します。
BPMNビジネスプロセス定義の分岐条件でのプロセスデータの使用例
[説明]
-
BPMNビジネスプロセス定義で,シーケンスフローに分岐条件の評価式(condition)を定義します。
評価式には,XPath式を記述してください。次の図では,プロセスデータキー名が"$SApproval"の値を取得しています。XPathの評価時にプロセスデータ値に置き換えられるため,XPath式"'Y'='Y'"として評価され,評価結果は「真」となります。
図1‒86 BPMNビジネスプロセス定義の分岐条件でのプロセスデータの使用例 - 重要
変数と定数だけを使用していて,boolean値を返す比較演算子を使用している評価式だけ記述できます。
分岐条件に記述できるXPath式に関する規則は,W3Cで規定されているXML Path Language (XPath) Version 1.0に準拠します。また,XPathの仕様で規定されているXPath関数に加えて,XPath拡張関数を記述できます。XPath拡張関数の仕様については,「14. XPath拡張関数リファレンス 」を参照してください。
サブプロセス(マルチインスタンス)内に定義された分岐条件では,リスト型プロセスデータの1要素を参照および更新するように記述できます。サブプロセス(マルチインスタンス)内に定義された分岐条件でのプロセスデータの使用方法については,「マルチインスタンスでの作業実行時のプロセスデータ使用例(サブプロセスの場合)」を参照してください。
主な規則は次のとおりです。
-
ロケーションパスは使用できません。
-
CSCIWの組み込み変数は使用できません。
例えば,"$SApproval=CSCIWPICreato"や"$SApproval=@PICreator"のように記述しても,CSCIWで保持する値には置換されません。
-
条件式は,<SYSTEMID>_CONDITION_JAVA_DEFテーブルのExParameterカラムで定義したバイト数(デフォルト2,000バイト)以内で指定してください。
-
命名規則に従わないプロセスデータキー名は使用できません。なお,リスト型プロセスデータの全要素を示すプロセスデータキー名は変数として使用できません。
-
- ヒント
-
記述できるXpath式の例
-
concat($SWCO,"/",$SCSCIW,"/",$SESB) = 'WCO/CSCIW/ESB'
$SWCO='WCO',$SCSCIW='CSCIW',$ESB='ESB'の場合,結果は「真」になります。
-
substring-before($SYMD, "/") = '2016'
$SYMD='2016/12/31'の場合,結果は「真」になります。
-
$NTANKA * $NKAZU{3} > 2000000
$NTANKA=1000000かつ$NKAZU{3}=3の場合,「真」になります。
-
$NCustomerIDList{MIIndex}=1000000
分岐条件のマルチインスタンスインデクス=3,かつ$NCustomerIDList{3}=1000000の場合,結果は「真」になります。
記述できないXpath式の例
-
$SAcount$SApproval='hitachiYes'
プロセスデータキー名を連結する記述はできません。
-
'123'$SApproval='123Y'および123$SApproval='123Y'
文字列と連結したプロセスデータキー名は使用できません。
-
$SApproval{}='123Y'
リスト型プロセスデータの全要素を示すプロセスデータキー名は記述できません。この場合,リスト型と文字列型の比較になるため,結果は「偽」になります。
-
マルチインスタンス定義でのプロセスデータ使用例
マルチインスタンス定義でのプロセスデータの使用例を次の図で説明します。
- [説明]
-
BPMNビジネスプロセス定義のマルチインスタンス定義では,図の上方で示すように,実行種別(sequential),繰り返し回数を示す数式(loopCardinality)および完了条件の評価式(completionCondition)の3つの属性を定義します。この中で,繰り返し回数を示す数式(loopCardinality)および完了条件の評価式(completionCondition)にプロセスデータキー名を使用できます。
数式(loopCardinality)と評価式(completionCondition)にはXPath式を指定します。この例では,プロセスデータキー名($NPrice{})に対応するプロセスデータの要素数をデータベースから取得するため,数式(loopCardinality)の評価結果は'3'となります。
- 重要
数式(loopCardinality)にXPath拡張関数のcsciw:list-sizeを定義する場合,リスト内識別子に欠番があるリスト型プロセスデータは引数として指定できません。
数式(loopCardinality)と評価式(completionCondition)には,XPath式のすべての文法を記述できるわけではありません(例えば,ロケーションパスは記述できません)。数式(loopCardinality)には,変数と定数だけを使用していて,数値を返す演算子による数式だけを記述できます。
評価式(completionCondition)には,変数と定数だけを使用していて,boolean値を返す比較演算子を使用している評価式だけを記述できます。記述の仕様は分岐条件に記述する評価式と同じです。詳細については「BPMNビジネスプロセス定義の分岐条件でのプロセスデータの使用例」を参照してください。
- ヒント
-
記述できる数式(loopCardinality)の例と,注意事項を示します。
-
$NTANKA * 2
$NTANKA=1000000の場合,結果は「2000000」になります。
-
csciw:list-size('$SCOUNT{}')
$SCOUNT{}が示すリスト型プロセスデータ内の要素の数が「8」の場合,結果は「8」になります。
- 注意
-
評価結果がboolean値の場合,例外が発生します。
評価結果がint値の範囲外の場合,int値に丸めた値となります。なお,小数点以下を含む値の場合,小数点以下を切り捨てます。
-
マルチインスタンスでの作業実行時のプロセスデータ使用例(サービスタスク / ビジネスルールタスク / コールアクティビティの場合)
マルチインスタンスが定義されたサービスタスク,ビジネスルールタスク,またはコールアクティビティから生成された作業では,あらかじめ登録されたリスト型プロセスデータの1要素を取得し,新たにリスト型プロセスデータに1要素を登録できます。マルチインスタンスが定義されたサービスタスク,ビジネスルールタスク,またはコールアクティビティでのリスト型プロセスデータの各要素の受け渡しについては,アプリケーション呼び出し情報ファイルまたはコールアクティビティ情報ファイルに定義します。
シーケンシャルマルチインスタンスが定義されたサービスタスク,ビジネスルールタスク,またはコールアクティビティでの作業実行時の,プロセスデータの使用例を説明します。
- [説明]
-
マルチインスタンスが定義されたサービスタスクによって,CSCIWの作業が逐次に生成され,それぞれの作業にマルチインスタンスインデクスが付与されます。また,シーケンシャルマルチインスタンスの場合,生成した作業の順にマルチインスタンスインデクスが1から割り当てられます。リスト型プロセスデータの1要素を参照および更新するようにアプリケーション呼び出し情報ファイルに記述することで,作業ごとに異なるプロセスデータ要素にアクセスします。この例では,作業1(マルチインスタンスインデクス=1)はInputData{1}を取得してOutputData{1}を登録します。作業2(マルチインスタンスインデクス=2)はInputData{2}を取得してOutputData{2}を登録します。作業3(マルチインスタンスインデクス=3)はInputData{3}を取得してOutputData{3}を登録します。{}内の番号をリスト内識別子と呼びます。
このように,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。それぞれの作業が参照するリスト型プロセスデータのリスト内識別子と,作業が登録するリスト型プロセスデータのリスト内識別子は同一になります。
なお,アプリケーション呼び出し情報ファイルへのプロセスデータキー名の記述方法については,「15.3.14 RESTアプリケーションの呼び出しの場合にファイルに指定する内容」を参照してください。
次に,パラレルマルチインスタンスが定義されたサービスタスク,ビジネスルールタスク,またはコールアクティビティでの作業実行時の,プロセスデータの使用例を説明します。
- [説明]
-
マルチインスタンスが定義されたサービスタスクによって,CSCIWの作業が並列に生成され,それぞれの作業にマルチインスタンスインデクスが付与されます。また,パラレルマルチインスタンスの場合,生成した作業の順にマルチインスタンスインデクスが1から割り当てられます。ただし,作業が同時に生成されるため,各作業にどのリスト内識別子が割り当てられるかは不定です。リスト型プロセスデータの1要素を参照および更新するようにアプリケーション呼び出し情報ファイルに記述することで,作業ごとに異なるプロセスデータ要素にアクセスします。この例では,作業X(マルチインスタンスインデクス=1)はInputData{1}を取得してOutputData{1}を登録します。作業Y(マルチインスタンスインデクス=2)はInputData{2}を取得してOutputData{2}を登録します。作業Z(マルチインスタンスインデクス=3)はInputData{3}を取得してOutputData{3}を登録します。{}内の番号をリスト内識別子と呼びます。
このように,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。それぞれの作業が参照するリスト型プロセスデータのリスト内識別子と,作業が登録するリスト型プロセスデータのリスト内識別子は同一になります。
- ヒント
-
プロセスデータテーブルの詳細については,「付録A.1 テーブル定義」の「(3) <SYSTEMID>_PROCESS_DATA_Sの内容」および「(4) <SYSTEMID>_PROCESS_DATA_Nの内容」を参照してください。
マルチインスタンスでの作業実行時のプロセスデータ使用例(サブプロセスの場合)
サブプロセス(マルチインスタンス)内の定義によって,プロセスデータを使って次の操作ができます。
サブプロセス内の定義 |
操作 |
---|---|
サービスタスク |
サービスタスク,ビジネスルールタスク,またはコールアクティビティにマルチインスタンスが定義された場合と同様に,リスト型プロセスデータの1要素を参照または更新できます。 |
ビジネスルールタスク |
|
コールアクティビティ |
|
排他ゲートウェイ |
リスト型プロセスデータの1要素を参照し,分岐条件を評価できます。 |
スロー(メッセージ) |
リスト型プロセスデータの1要素を参照または更新できます。 |
終了(メッセージ) |
|
終了(エラー) |
|
キャッチ(タイマー) |
リスト型プロセスデータの1要素を参照し,タイムアウト期限や待機時間を設定できます。 |
境界中断(タイマー) |
|
境界非中断(タイマー) |
|
イベント・サブプロセス中断開始(タイマー) |
|
イベント・サブプロセス非中断開始(タイマー) |
|
ユーザタスク |
リスト型プロセスデータの1要素を参照し,ユーザタスクの作業者を割り当てることができます。 |
アドホック・サブプロセス |
リスト型プロセスデータの1要素を参照し,完了条件を評価できます。 |
シーケンシャルマルチインスタンスが定義されたサブプロセス実行時の,プロセスデータの使用例を説明します。
- [説明]
-
シーケンシャルマルチインスタンスが定義されたサブプロセスによって,サブプロセスが1件ずつ生成され,逐次に遷移します。それぞれのサブプロセス内に定義されたCSCIWの作業と分岐条件には,マルチインスタンスインデクスが付与されます。
シーケンシャルマルチインスタンスの場合,マルチインスタンスインデクスは生成したサブプロセスの順に1から割り当てられます。例えば,1回目に遷移したサブプロセス内に定義されたCSCIWの作業および分岐条件のマルチインスタンスインデクスは,1になります。
BPMN要素ごとの動作を次の表で説明します。
BPMN要素 |
動作 |
---|---|
サービスタスク |
アプリケーション呼び出し情報ファイルまたはコールアクティビティ情報ファイルに,リスト型プロセスデータの1要素を参照や更新をするように記述すると,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
ビジネスルールタスク |
|
コールアクティビティ |
|
排他ゲートウェイ |
排他ゲートウェイの出力シーケンスフローの評価式にリスト型プロセスデータの1要素を参照するように記述すると,それぞれの評価式では,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
スロー(メッセージ) |
アプリケーション呼び出し情報ファイルにリスト型プロセスデータの1要素を参照または更新するように記述すると,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
終了(メッセージ) |
|
終了(エラー) |
|
キャッチ(タイマー) |
BPMNエディタで,タイマールールにリスト型プロセスデータの1要素を参照するように設定すると,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
境界中断(タイマー) |
|
境界非中断(タイマー) |
|
イベント・サブプロセス中断開始(タイマー) |
|
イベント・サブプロセス非中断開始(タイマー) |
|
ユーザタスク |
BPMNエディタで,ユーザタスクの作業者にリスト型プロセスデータの1要素を参照するように設定すると,それぞれの作業は,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
アドホック・サブプロセス |
アドホック・サブプロセスの完了条件にリスト型プロセスデータの1要素を参照するように記述すると,それぞれのアドホック・サブプロセスの完了条件では,割り当てられたマルチインスタンスインデクスに対応したリスト型プロセスデータのリスト内識別子を参照します。 |
次に,パラレルマルチインスタンスが定義されたサブプロセスでの作業実行時の,プロセスデータの使用例を説明します。
- [説明]
-
パラレルマルチインスタンスが定義されたサブプロセスでは,サブプロセスが同時に生成され,並列に遷移します。また,パラレルマルチインスタンスの場合,マルチインスタンスインデクスが1から割り当てられます。ただし,サブプロセスが同時に生成されるため,各サブプロセスにどのマルチインスタンスインデクスが割り当てられるかは不定です。それ以外については,シーケンシャルマルチインスタンスの場合と同じです。
マルチインスタンスの場合の検索時のプロセスデータ使用例
マルチインスタンスの場合の検索時の,プロセスデータの使用例を説明します。
- [説明]
-
マルチインスタンスが定義されたサブプロセスによって,リスト型プロセスデータの要素数分のインスタンスが生成されます。マルチインスタンスで生成された各インスタンスのフローノードID(BPMN要素のid属性値),およびフローノード名(BPMN要素のname属性値)は同一になります。
BPMN連携ライブラリによって,指定したリスト型プロセスデータのプロセスデータ値に対応するマルチインスタンスインデクスを取得し,取得したマルチインスタンスインデクスに対応したインスタンス(フローノード)が検索できます。