jBPM 4.4:Execution Serviceサービス
4185 ワード
最新の流れの例--ByKey
以下は、フロー定義のための新しいフロー例を起動する最も簡単であり、最も一般的な方法である.
keyがICLの流れで新バージョンを展開すると、startProcess Instance ByKeyメソッドが自動的に最新の展開に切り替わります.
元々起動されていたプロセスは、起動時刻のバージョンで実行されますか?
指定フローバージョン--ById
言い換えれば、特定のバージョンに従ってフローを起動したいなら、フロー定義のid起動フローの例を使用することができる.以下の通りです
キーを使う
このkeyはプロcessのkeyではなく、起動するinstanceのkeyである.このkeyはユーザが実行する時に定義され、「業務key」として参照されることがある.一つの業務keyは、フロー定義されたすべてのバージョンの範囲内で唯一でなければならない.通常、業務の流れの分野でこのようなkeyを見つけやすいです.例えば、注文IDとか保険番号とか.
ユーザー定義のキーが提供されていない場合、データベースはキーをキーとします.このようにして、以下のようにIDを得ることができる.
ユーザー定義のkeyが一番いいです.特にあなたのアプリケーションコードの中で、このようなキーを見つけるのは難しくないです.ユーザー定義のkeyを提供します.流れのidを組み合わせることができます.流れの変数に基づく検索を実行するのではなく、そのような方法は資源を消費しすぎます.
変数を使う
新しいフロー例が起動されると、オブジェクトパラメータのセットが提供されます.これらのパラメータをvariables変数に入れて、フローチャートの作成と起動時に使用することができます.
スタートinstanceをまとめてみます.
instanceを起動するには、processdefinitionの情報を知る必要があります.processdefinitionは2つの方法で取得できます. ByKey:ProcessKeyを通じて、このProcessの最新バージョン を起動します. ById: ProcessのIDにより、このProcessの特定のバージョン が起動される.
その他のパラメータ:残りはInstanceを起動する時、フローに2つのパラメータを与えることもできます. InstancerKey:このinstance Keyは、フロー全体で定義されたすべてのバージョンの中で唯一でなければならない.ユーザーが提供してくれないなら、システムも自分で生成する. Map表:起動フロー時に与えられる変数情報
実行待ちの流れ
1つの
場合によっては、stateに到達する実行は、フローチャート自体である.しかし、これはいつもの状況ではないです.タイマーと同期の場合、フローはツリー形を実行するルートノードである.ですから、私たちはあなたのsignalが正しい流れの中で働いていることを確認しなければなりません.
正しい実行を得るためのより良い方法は、state活動にイベントモニターを割り当てることです.
ここでは、プロセスIDを取得するために任意の(あまり推奨されていない)方式があり、フローが
説明:
上記の段落は、よく見ていませんでしたが、Instanceの処理を後から知る必要があります.jPDLを理解してから、実際の例を作成する時も含めて、改めて理解します.
以下は、フロー定義のための新しいフロー例を起動する最も簡単であり、最も一般的な方法である.
ProcessInstance processInstance = executionService.startProcessInstanceByKey("ICL");
上のserviceの方法は、キーがICLの最新バージョンのフロー定義を検索して、最新のフロー定義でフロー例を起動します.keyがICLの流れで新バージョンを展開すると、startProcess Instance ByKeyメソッドが自動的に最新の展開に切り替わります.
元々起動されていたプロセスは、起動時刻のバージョンで実行されますか?
指定フローバージョン--ById
言い換えれば、特定のバージョンに従ってフローを起動したいなら、フロー定義のid起動フローの例を使用することができる.以下の通りです
ProcessInstance processInstance =
executionService.startProcessInstanceById("ICL-1");
キーを使う
このkeyはプロcessのkeyではなく、起動するinstanceのkeyである.このkeyはユーザが実行する時に定義され、「業務key」として参照されることがある.一つの業務keyは、フロー定義されたすべてのバージョンの範囲内で唯一でなければならない.通常、業務の流れの分野でこのようなkeyを見つけやすいです.例えば、注文IDとか保険番号とか.
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("ICL", "CL92837");
// 2 :
// processkey, key process
// key(instance key)
keyは、プロセスのインスタンスのidを作成するために使用されてもよく、フォーマットは{process-key}、{execution-id}である.したがって、上のコードはICL.C 92837のフローを作成します.ユーザー定義のキーが提供されていない場合、データベースはキーをキーとします.このようにして、以下のようにIDを得ることができる.
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("ICL");
String pid = processInstance.getId();
ユーザー定義のkeyが一番いいです.特にあなたのアプリケーションコードの中で、このようなキーを見つけるのは難しくないです.ユーザー定義のkeyを提供します.流れのidを組み合わせることができます.流れの変数に基づく検索を実行するのではなく、そのような方法は資源を消費しすぎます.
変数を使う
新しいフロー例が起動されると、オブジェクトパラメータのセットが提供されます.これらのパラメータをvariables変数に入れて、フローチャートの作成と起動時に使用することができます.
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("customer", "John Doe");
variables.put("type", "Accident");
variables.put("amount", new Float(763.74));
ProcessInstance processInstance =
executionService.startProcessInstanceByKey("ICL", variables);
スタートinstanceをまとめてみます.
instanceを起動するには、processdefinitionの情報を知る必要があります.processdefinitionは2つの方法で取得できます.
その他のパラメータ:残りはInstanceを起動する時、フローに2つのパラメータを与えることもできます.
実行待ちの流れ
1つの
state
を使用して活動すると、実行(またはフロー例)は、stateに到達すると、signal(外部トリガとも呼ばれる)が現れるまで待機する.signalExecution
方法はこのような場合に用いることができる.実行は、ID(文字列)を実行することによって参照されます.場合によっては、stateに到達する実行は、フローチャート自体である.しかし、これはいつもの状況ではないです.タイマーと同期の場合、フローはツリー形を実行するルートノードである.ですから、私たちはあなたのsignalが正しい流れの中で働いていることを確認しなければなりません.
正しい実行を得るためのより良い方法は、state活動にイベントモニターを割り当てることです.
<state name="wait">
<on event="start">
<event-listener class="org.jbpm.examples.StartExternalWork" />
</on>
...
</state>
イベントモニターStartExternalWork
では、それらの追加的な完了が必要な部分を実行することができます.このイベントモニターでは、execution.getId()
を通じて、適切なプロセスIDが得られます.そのプロセスidは、追加の作業が完了すると、signalに提供するために必要となります.executionService.signalExecutionById(executionId);
ここでは、プロセスIDを取得するために任意の(あまり推奨されていない)方式があり、フローが
state
に達したとき.このような方法でのみ実行IDが得られます.どのjBPM APIが起動したかを知っていれば、プロセスはstate
の活動に入ります.// assume that we know that after the next call
// the process instance will arrive in state external work
ProcessInstance processInstance =
executionService.startProcessInstanceById(processDefinitionId);
// or ProcessInstance processInstance =
// executionService.signalProcessInstanceById(executionId);
Execution execution = processInstance.findActiveExecutionIn("external work");
String executionId = execution.getId();
上の解決方法と応用ロジックの連絡(あまり)を注意してください.説明:
上記の段落は、よく見ていませんでしたが、Instanceの処理を後から知る必要があります.jPDLを理解してから、実際の例を作成する時も含めて、改めて理解します.