Business Central でのビジネスプロセスの設計

Red Hat Process Automation Manager 7.8

Red Hat Customer Content Services

概要

このドキュメントでは、Red Hat Process Automation Manager 7.8 でビジネスプロセスを設計するための概念とオプションについて説明します。

前書き

ビジネスプロセス開発者は、Red Hat Process Automation Manager の Business Central を使用して、特定のビジネス要件を満たすビジネスプロセスを設計できます。このドキュメントでは、ビジネスプロセスと、Red Hat Process Automation Manager のプロセスデザイナーを使用してビジネスプロセスを作成するための概念とオプションについて説明します。また、Red Hat Process Automation Manager の BPMN2 要素についても説明しています。BPMN2 の詳細については、Business Process Model and Notation Version 2.0 仕様を参照してください。

前提条件

第1章 ビジネスプロセス

ビジネスプロセスとは、一連の手順の実行すべき順番を説明し、事前定義済みのノードや接続で構成されるダイアグラムのことです。各ノードは、プロセス内の手順 1 つを表し、接続はノード間の移動の方法を指定します。

典型的なビジネスプロセスは、以下のコンポーネントで構成されています。

  • プロセスの名前、インポート、変数などのグローバル要素で構成されるヘッダーセクション
  • プロセスの一部であるすべての異なるノードを含むノードセクション
  • これらのノードを相互にリンクしてフローチャートを作成する接続セクション

図1.1 ビジネスプロセス

This image shows the steps of "self evaluation" through the project manager and HR manager.

Red Hat Process Automation Manager には、レガシーのプロセスデザイナーと、ビジネスプロセスダイアグラムを作成するための新しいプロセスデザイナーが含まれています。新しいプロセスデザイナーのレイアウトと機能セットは改善されており、開発が続けられています。レガシーのプロセスデザイナーのすべての機能が新しいプロセスデザイナーに完全に実装されるまで、お客様は両方のデザイナーを Business Central で使用できます。

注記

Business Central のレガシーのプロセスデザイナーは、Red Hat Process Automation Manager 7.8.0 で非推奨になりました。これは、Red Hat Process Automation Manager の今後のリリースでは削除される予定です。そのため、レガシーのプロセスデザイナーには新しい機能拡張や機能は追加されません。新しいプロセスデザイナーを使用する場合は、お使いのプロセスを新しいデザイナーに移行し始め、新しいプロセスデザイナーですべての新規プロセスを作成してください。新規デザイナーへの移行に関する詳細は、『Business Central におけるプロジェクトの管理』を参照してください。

第2章 Business Process Modeling and Notation バージョン 2.0

Business Process Modeling and Notation バージョン 2.0 (BPMN2) 仕様は、ビジネスプロセスを描画表現するための標準や要素の実行セマンティクスの定義、XML 形式でのプロセス定義を行うときに使用する Object Management Group (OMG) 仕様です。

プロセスは、そのプロセス定義によって定義または決定されます。プロセスはナレッジベースに存在し、ID で 識別されます。

表2.1 一般的なプロセスプロパティー

ラベル説明

Name

プロセスの名前を入力します。

Documentation

プロセスについて記述します。このフィールドのテキストはプロセスドキュメントに含まれます (該当する場合)。

ID

このプロセスの識別子 (orderItems など) を入力します。

Package

Red Hat Process Automation Manager プロジェクトにおけるこのプロセスのパッケージの場所を入力します (例: org.acme)。

ProcessType

プロセスがパブリックかプライベートかを指定します (現在サポートされていません)。

Version

プロセスのアーティファクトバージョンを入力します。

Ad hoc

このプロセスがアドホックサブプロセスである場合は、このオプションを選択します。

Process Instance Description

プロセスの目的の説明を入力します。

Imports

クリックして インポート ウィンドウを開き、プロセスに必要なデータタイプクラスを追加します。

Executable

このオプションを選択して、プロセスを Red Hat Process Automation Manager プロジェクトの実行可能な部分にします。

SLA Due Date

サービスレベルアグリーメント (SLA) の有効期限の日付を入力します。

Process Variables

プロセスのプロセス変数を追加します。プロセス変数は、特定のプロセスインスタンス内で表示されます。プロセス変数はプロセスの作成時に初期化され、プロセスの完了時に破棄されます。変数タグは、変数の動作をより詳細に制御します。たとえば、変数が required または readonly としてタグ付けされているかどうかなどを細かく制御します。変数タグの詳細は『Business Central でのビジネスプロセスの設計』を参照してください。

Metadata Attributes

メタデータ属性が存在する場合に何らかのアクションを実装するリスナーなど、カスタムイベントリスナーに使用するカスタムメタデータ属性の名前と値を追加します。

Global Variables

プロセスにグローバル変数を追加します。グローバル変数は、プロジェクトのすべてのプロセスインスタンスとアセットに表示されます。グローバル変数は通常、ビジネスルールおよび制約によって使用され、ルールまたは制約によって動的に作成されます。

プロセスは、モデル化した要素のセットを格納するコンテナーの役割を果たします。プロセスには、フローオブジェクトおよびフローを使用してビジネスプロセスの実行ワークフローまたはパーツを指定する要素が含まれます。プロセスごとに、独自の BPMN2 のダイアグラムが割り当てられます。Red Hat Process Automation Manager には、BPMN2 ダイアグラムを作成するための新規プロセスデザイナーのほか、.bpmn2 拡張を使用して以前の BPMN2 ダイアグラムを開くレガシープロセスデザイナーが含まれます。新規プロセスデザイナーでは、レイアウトと機能セットが向上され、今後も開発が続けられる予定です。デフォルトでは、新規ダイアグラムは新規プロセスデザイナーで作成されます。

2.1. BPMN2 向けの Red Hat Process Automation Manager サポート

Red Hat Process Automation Manager では、BPMN 2.0 標準を使用して、ビジネスプロセスのモデル化が可能です。Red Hat Process Automation Manager を使用してこれらのビジネスプロセスを実行、管理、監視することができます。包括的な BPMN 2.0 仕様には、コレオグラフィーやコラボレーションなどの項目の表現方法に関する詳細が含まれます。ただし、Red Hat Process Automation Manager は、実行可能なプロセスの指定に使用可能な仕様の一部のみを使用します。これには、BPMN2 仕様の共通の実行可能なサブクラスに定義されているほぼすべての要素および属性だけでなく、追加の要素や属性も含まれます。

以下の表は、BPMN2 要素がレガシーのプロセスデザイナーでサポートされているか、レガシーおよび新規プロセスデザイナーでサポートされているか、またはサポートされていないかを示すアイコン一覧を示しています。

表2.2 サポートの状態を示すアイコン

キー説明

grn check

レガシーおよび新規プロセスデザイナーでのサポート

grn star

レガシーのプロセスデザイナーでのみサポート

bk x

サポートなし

アイコンのない要素は、BPMN2 仕様には存在しません。

表2.3 BPMN2 の Catch イベント

要素名始端中間

なし

grn check

 

メッセージ

grn check

grn check

タイマー

grn check

grn check

エラー

grn check

grn check

エスカレーション

grn check

grn check

取り消し

 

bk x

補正

grn check

grn check

条件

grn check

grn check

リンク

 

bk x

シグナル

grn check

grn check

多重

bk x

bk x

並列多重

bk x

bk x

表2.4 BPMN2 送出および中断なしイベント

要素名送出 中断なし 
 

終端

中間

始端

中間

なし

grn check

   

メッセージ

grn check

grn check

grn check

grn check

タイマー

  

grn check

grn check

エラー

grn check

   

エスカレーション

grn check

grn check

grn check

grn check

取り消し

bk x

bk x

 

bk x

補正

grn check

grn check

  

条件

  

grn check

grn check

リンク

 

bk x

  

シグナル

grn check

grn check

grn check

grn check

中断

grn check

   

多重

bk x

bk x

bk x

bk x

並列多重

  

bk x

bk x

表2.5 BPMN2 要素

要素タイプ要素対応

タスク

ビジネスルール

grn check

 

スクリプト

grn check

 

ユーザータスク

grn check

 

サービスタスク

grn check

複数のインスタンスサブプロセスを含むサブプロセス

埋め込み

grn check

 

アドホック

grn check

 

再利用可能

grn check

 

イベント

grn check

ゲートウェイ

包含的

grn check

 

排他的

grn check

 

並列

grn check

 

イベントベース

grn check

 

コンプレックス

bk x

接続オブジェクト

シーケンスフロー

grn check

 

関連フロー

grn check

スイムレーン

スイムレーン

grn check

アーティファクト

グループ

grn star

 

テキストのアノテーション

grn check

BPMN2 の背景およびアプリケーションに関する詳細は、OMG Business Process Model and Notation (BPMN) Version 2.0 を参照してください。

第3章 プロセスデザイナーでの BPMN2 イベント

イベントとは、ビジネスプロセスに発生する内容のことです。BPMN2 では、3 つのイベントカテゴリーをサポートします。

  • 始端
  • 終端
  • 中間

開始イベントはイベントトリガーをキャッチし、終了イベントはイベントトリガーをスローします。中間イベントは、イベントトリガーをキャッチおよびスローできます。

以下のビジネスプロセスダイアグラムでは、イベントの例を紹介します。 events

この例では、以下のイベントが発生します。

  • シグナルを受信すると、ATM カード挿入のシグナル開始イベントがトリガーされます。
  • タイムアウトの中間イベントは、タイマートリガーをもとにした割り込みイベントです。つまり、タイマーイベントがトリガーされると、暗証番号待ちのサブプロセスがキャンセルされるという意味です。
  • プロセスへの入力に応じて、Validate User Pin タスクに関連付けられた終了イベント、または Inform User of Timeout タスクに関連付けられた終了イベントが、プロセスを終了します。

3.1. 開始イベント

開始イベントを使用して、ビジネスプロセスの始端を示します。開始イベントには、受信シーケンスフローを割り当てることができず、外向きシーケンスフローだけを割り当てる必要があります。「なし (none)」開始イベントは、トップレベルプロセス、埋め込みサブプロセス、呼び出し可能サブプロセス、イベントサブプロセスで使用できます。

「なし (none)」開始イベントの例外を除けば、開始イベントはすべてキャッチイベントです。たとえば、シグナルの開始イベントは、参照のシグナル (イベントトリガー) を受信した場合にのみプロセスを開始します。イベントサブプロセスの開始イベントを割り込みまたは割り込みなしイベントに設定できます。イベントサブプロセスに対する割り込みありの開始イベントでは、包含プロセスまたは親プロセスの実行を停止または中断します。割り込みなしの開始イベントは、包含プロセスまたは親プロセスの実行を停止したり、中断したりしません。

表3.1 開始イベント

開始イベントタイプトップレベルサブプロセス 
  

割り込み

割り込みなし

なし

bpmn start node

  

条件

bpmn conditional start

bpmn conditional start

bpmn conditional non interrupt

補正

bpmn compensation start

bpmn compensation start

 

エラー

 

bpmn error start

 

エスカレーション

bpmn escalation start

bpmn escalation start

bpmn escalation non interrupt

メッセージ

bpmn message node

bpmn message node

bpmn message non interrupt

シグナル

bpmn signal start

bpmn signal start

bpmn signal non interrupt

タイマー

bpmn timer start

bpmn timer start

bpmn timer non interrupt

なし

「なし」開始イベントは、トリガー条件のない開始イベントです。プロセスまたはサブプロセスには、「なし」開始イベントを最大 1 つ含めることができます。このイベントは、デフォルトでプロセスまたはサブプロセスの開始によりトリガーされ、外向きフローがすぐに実行されます。

サブプロセスで「なし」開始イベントを使用すると、親プロセスからサブプロセスに、プロセスフローの実行が移動し、「なし」開始イベントがトリガーされます。これは、トークン (プロセスフローの内の現在の場所) が親プロセスからサブプロセスのアクティビティーに渡され、サブプロセスの「なし」開始イベントが独自のトークンを生成します。

条件

条件付きの開始イベントは、ブール型の条件定義を含む開始イベントです。条件が最初に false と評価され、次に true に評価された場合に実行がトリガーされます。プロセスの実行は、開始イベントがインスタンス化された後に条件が true と評価された場合にのみ開始されます。

プロセスには、複数の条件開始イベントを含めることができます。

補正

補正開始イベントは、補正中間イベントのターゲットアクティビティーとして、サブプロセスを使用した場合に、補正イベントのサブプロセスを開始するのに使用します。

エラー

プロセスまたはサブプロセスには、複数のエラー開始イベントを含めることができます。特定の ErrorRef プロパティーを含むエラーオブジェクトを受信した場合に、この開始イベントがトリガーされます。エラーオブジェクトは、エラーの終了イベントで生成可能です。これは、プロセスの終端が不正であることを示します。エラーの開始イベントが含まれるプロセスインスタンスは、該当するエラーオブジェクトの受信後に実行が開始されます。エラー開始イベントは、エラーオブジェクトの受信直後に実行されて、外向きフローが実行されます。

エスカレーション

エスカレーション開始イベントは、特定のエスカレーションコードを含むエスカレーションによりトリガーされる開始イベントです。プロセスには、複数のエスカレーション開始イベントを含めることができます。エスカレーション開始イベントが含まれるプロセスインスタンスは、定義されているエスカレーションオブジェクトを受信すると、実行を開始します。プロセスがインスタンス化され、直後にエスカレーション開始イベントが実行され、外向きフローが実行されます。

メッセージ

プロセスまたはイベントのサブプロセスには、複数の「メッセージ」開始イベントを含めることができます。これらのイベントは、通常特定のメッセージによりトリガーされます。「メッセージ」開始イベントが含まれるプロセスインスタンスの実行は、該当のメセージを受信した後に、このイベントからのみ開始されます。メッセージの受信後に、プロセスはインスタンス化され、「メッセージ」開始イベントが即座に実行されます (外向きフローが実行されます)。

メッセージは、要素なしなど、任意の数のプロセスおよびプロセス要素により消費可能であるため、1 つのメッセージで複数の「メッセージ」開始イベントをトリガーできるので、複数のプロセスがインスタンス化されます。

シグナル

シグナル開始イベントは、特定のシグナルコードを含むシグナルによりトリガーされます。プロセスには、複数のシグナル開始イベントを含むことができます。シグナル開始イベントは、インスタンスが該当のシグナルを受信した後にのみ、プロセスインスタンス内で実行を開始します。その後に、シグナル開始イベントが実行され、外向きフローが実行されます。

タイマー

タイマー開始イベントは、タイミングのメカニズムを含む開始イベントです。プロセスには、複数のタイマー開始イベントを含めることができます。タイマー開始イベントは、タイミングのメカニズムが適用された後に、プロセスの開始時にトリガーされます。

サブプロセスでタイマー開始イベントを使用すると、プロセスフローの実行が親プロセスからサブプロセスに移動し、タイマー開始イベントがトリガーされます。親サブプロセスアクティビティーからトークンを取得し、サブプロセスのタイマー開始イベントがトリガーされ、タイマーがトリガーされるまで待機します。タイミングの定義で指定した時間が経過したら、外向きフローが実行されます。

3.2. 中間イベント

中間イベントは、ビジネスプロセスのフローを駆動します。中間イベントは、ビジネスプロセスの実行中にイベントをキャッチまたはスローするときに使用します。中間イベントは、開始イベントと終了イベントの間に配置され、サブプロセス、人間のタスクなどのアクティビティーの境界にキャッチイベントとして使用することもできます。境界キャッチイベントは、割り込みまたは割り込みなしとして設定できます。割り込みありの境界キャッチイベントは、バインドされているアクティビティーを取り消しますが、割り込みなしのイベントは取り消しません。

中間イベントは、プロセス実行時に発生する特定の状況を処理します。このような状況が中間イベントのトリガーになります。プロセスには、外向きフローを 1 つ含む中間イベントを、アクティビティーの境界に配置できます。

アクティビティーの実行時にイベントが発生した場合には、このイベントにより、外向きフローへの実行がトリガーされます。1 つのアクティビティーに、複数の境界中間イベントが含まれる可能性があります。境界中間イベントで、アクティビティーから必要な動作によって、以下のいずれかの中間イベントタイプを使用できる点に注意してください。

  • 割り込みあり: アクティビティーの実行は中断され、中間イベントの実行がトリガーされます。
  • 割り込みなし: 中間イベントがトリガーされ、アクティビティーの実行が続行されます。

表3.2 中間イベント

中間イベントタイプキャッチ境界 送出
  

割り込み

割り込みなし

 

メッセージ

bpmn intermediate message

bpmn intermediate message

bpmn message noninterrupt

bpmn message throwing

タイマー

bpmn intermediate timer

bpmn intermediate timer

bpmn timer noninterrupt

 

エラー

 

bpmn intermediate error

  

シグナル

bpmn intermediate signal

bpmn intermediate signal

bpmn signal noninterrupt

bpmn signal throwing

条件

bpmn intermediate conditional

bpmn intermediate conditional

bpmn conditional noninterrupt

 

補正

bpmn intermediate catch

bpmn intermediate catch

 

bpmn intermediate compensation throwing

エスカレーション

bpmn intermediate escalation

bpmn intermediate escalation

bpmn intermediate escalation non interrupting

bpmn intermediate escalation throwing

メッセージ

メッセージの中間イベントは、メッセージオブジェクトを管理可能にする中間イベントです。以下のイベントのいずれかを使用します。

  • スローメッセージの中間イベントでは、定義したプロパティーをもとにメッセージオブジェクトを作成します。
  • キャッチメッセージの中間イベントは、定義したプロパティーを使用してメッセージオブジェクトがないかリッスンします。

タイマー

タイマー中間イベントでは、ワークフローの実行を遅延させたり、定期的にトリガーしたりできます。このイベントは、指定した期間が経過したら 1 回または複数回、トリガーできるタイマーを表します。タイマー中間イベントがトリガーされたら、タイマー条件 (定義した時間) がチェックされ、外向きフローが実行されます。タイマー中間イベントがプロセスワークフローに配置されている場合には、内向きフローが 1 つと、外向きフローが 1 つ含まれます。内向きフローがイベントに移動すると、これが実行されます。タイマー中間イベントがアクティビティー境界に配置されている場合には、アクティビティーの実行と同時に、この実行がトリガーされます。

包含のプロセスインスタンスを完了するか、中断するなど、タイマー要素がキャンセルされると、タイマーがキャンセルされます。

条件

条件の中間イベントは、ブール型の条件がトリガーとして含まれる中間イベントです。このイベントは、条件で true と判断され、外向きフローが実行された場合に、さらにワークフロー実行をトリガーします。

このイベントは、Expression プロパティーを定義する必要があります。条件の中間イベントがプロセスワークフローに配置されている場合は、内向きフロー 1 つ、外向きフロー 1 つが含まれ、内向きフローがイベントに移動したときに、実行が開始されます。条件の中間イベントがアクティビティー境界に配置されている場合には、アクティビティーの実行時に、この実行がトリガーされます。イベントが割り込みなしの場合には、条件が true の場合は継続して、このイベントがトリガーされます。

シグナル

シグナルの中間イベントでは、シグナルオブジェクトを生成または消費できます。以下のオプションのいずれかを使用してください。

  • スローシグナルの中間イベントは、定義したプロパティーをもとにシグナルオブジェクトを生成します。
  • キャッチシグナルの中間イベントは、定義したプロパティーを使用してシグナルオブジェクトがないかリッスンします。

エラー

エラーの中間イベントは、アクティビティー境界でのみ使用可能な中間イベントです。このイベントでは、プロセスが、該当するアクティビティー内のエラー終了イベントに反応できるようになります。このアクティビティーは、アトミックであってはいけません。アクティビティーが、エラー終了イベントで完了し、対応の ErrorCode プロパティーでエラーオブジェクトを生成した場合には、エラーの中間イベントがこのエラーオブジェクトをキャッチして、実行が外向きフローに進みます。

補正

補正中間イベントは、トランザクションサブプロセスのアクティビティーに接続されている境界イベントです。補正終了イベントまたはキャンセル終了イベントで、このイベントを終了できます。補正中間イベントは、補正アクティビティーに接続されているフローと関連付ける必要があります。

境界補正の仲介イベントに関連付けられているアクティビティーは、トランザクションサブプロセスが補正終了イベントで終了した場合に実行されます。この実行は、対応のフローで続行されます。

エスカレーション

エスカレーション中間イベントは、エスカレーションオブジェクトを生成または消費できる中間イベントです。イベント要素が実行すべきアクションに合わせて、以下のオプションのいずれかを使用する必要があります。

  • スローエスカレーションの中間イベントは、定義したプロパティーをもとにエスカレーションオブジェクトを生成します。
  • キャッチエスカレーションの中間イベントは、定義したプロパティーを使用してエスカレーションオブジェクトがないかリッスンします。

3.3. 終了イベント

終了イベントは、ビジネスプロセスの終了に使用します。終了イベントには、外向きのシーケンスフローが何も含まれない場合があります。また、ビジネスプロセスに複数の終了イベントが存在する場合があります。「なし」終了イベントおよび中断終了イベント以外の終了イベントはすべてスローイベントです。

終了イベントは、ビジネスプロセスの完了を示します。終了イベントは、特定のワークフローを終了するノードです。このイベントには、1 つまたは複数の内向きシーケンスフローがあり、外向きフローはありません。

プロセスには最低でも 1 つの終了イベントが含まれている必要があります。

ランタイム中は、終了イベントでプロセスワークフローを終了します。終了イベントは、そのイベントに到達したワークフローのみ終了できます。終了イベントタイプによってはプロセスインスタンス内の全ワークフローを終了できます。

表3.3 終了イベント

なし

「なし」終了イベントは、他に特別な動作がプロセスの終端に関連付けられていないことを示します。

メッセージ

フローがメッセージの終了イベントに入ると、このフローは終了し、終了イベントがプロパティーに定義されているようにメッセージを生成します。

シグナル

スローシグナルの終了イベントは、プロセスまたはサブプロセスフローの終了に使用します。実行フローがこの要素に入ると、実行フローが終了し、SignalRef プロパティーで特定されたシグナルを生成します。

エラー

スローエラーの終了イベントは、内向きワークフローを完了します。つまり、内向きのトークンを消費し、エラーオブジェクトを生成します。プロセスまたはサブプロセスで他に実行されているワークフローは、影響を受けません。

補正

補正終了イベントは、トランザクションのサブプロセスを終了し、サブプロセスアクティビティーに接続されている補正中間イベントで定義した補正をトリガーするのに使用します。

エスカレーション

エスカレーション終了イベントは、内向きワークフローを終了します。これは、内向きのトークンを消費して、プロパティーに定義されているようにエスカレーションシグナルを生成し、エスカレーションプロセスをトリガーします。

中断

中断終了イベントは、指定したプロセスインスタンス内の全実行フローを終了します。実行中のアクティビティーはキャンセルされます。サブプロセスインスタンスは、中断終了イベントに到達した場合は中断されます。

第4章 Business Central でのビジネスプロセスの作成

プロセスデザイナーは、Red Hat Process Automation Manager のプロセスモデラーです。モデラーの出力は、BPMN 2.0 プロセス定義ファイルです。この定義は、定義に基づいてプロセスインスタンスを作成する Red Hat Process Automation Manager プロセスエンジンの入力として使用されます。

このセクションの手順では、簡単なビジネスプロセスを作成する方法の概要を説明します。より詳細なビジネスプロセスの例については、『ビジネスプロセスの使用ガイド』を参照してください。

前提条件

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. プロジェクト名をクリックして、プロジェクトのアセットリストを開きます。
  3. Add Asset → Business Process の順にクリックします。
  4. Create new Business Process ウィザードで、以下の値を入力します。

    • Business Process: 新しいビジネスプロセス名
    • Package: 新しいビジネスプロセスのパッケージの場所 (例: com.myspace.myProject)
  5. OK をクリックしてプロセスデザイナーを開きます。
  6. 右上隅の Diagram properties diagram properties アイコンをクリックし、プロセスデータや変数などのビジネスプロセスプロパティー情報を追加します。

    1. スクロールダウンして、Process Data を展開します。
    2. Process Variables の横にある btn plus をクリックして、ビジネスプロセスで使用するプロセス変数を定義します。

    表4.1 一般的なプロセスプロパティー

    ラベル説明

    Name

    プロセスの名前を入力します。

    Documentation

    プロセスについて記述します。このフィールドのテキストはプロセスドキュメントに含まれます (該当する場合)。

    ID

    このプロセスの識別子 (orderItems など) を入力します。

    Package

    Red Hat Process Automation Manager プロジェクトでのこのプロセスのパッケージの場所を入力します (例: org.acme)。

    ProcessType

    プロセスがパブリックであるかプライベートであるかを指定します (該当しない場合は null を指定)。

    Version

    プロセスのアーティファクトバージョンを入力します。

    Ad hoc

    このプロセスがアドホックサブプロセスである場合は、このオプションを選択します。

    Process Instance Description

    プロセスの目的の説明を入力します。

    Imports

    クリックして Imports ウィンドウを開き、プロセスに必要なデータオブジェクトクラスを追加します。

    Executable

    このオプションを選択して、プロセスを Red Hat Process Automation Manager プロジェクトの実行可能な部分にします。

    SLA Due Date

    サービスレベルアグリーメント (SLA) の有効期限の日付を入力します。

    Process Variables

    プロセスのプロセス変数を追加します。プロセス変数は、特定のプロセスインスタンス内で表示されます。プロセス変数はプロセスの作成時に初期化され、プロセスの完了時に破棄されます。変数 タグ は、変数の動作をより細かく制御します。たとえば、変数が required または readonly かどうかなどを詳細に制御します。変数タグの詳細は「5章変数」を参照してください。

    Metadata Attributes

    メタデータ属性が存在する場合に何らかのアクションを実装するリスナーなど、カスタムイベントリスナーに使用するカスタムメタデータ属性の名前と値を追加します。

    Global Variables

    プロセスにグローバル変数を追加します。グローバル変数は、プロジェクトのすべてのプロセスインスタンスとアセットに表示されます。グローバル変数は通常、ビジネスルールおよび制約によって使用され、ルールまたは制約によって動的に作成されます。

    Metadata Attributes エントリーは、新しい metaData 拡張を BPMN ダイアグラムに有効化するという点で Process Variables タグに似ています。ただし、プロセス変数タグは、特定の変数が required または readonly かどうかなど、特定のプロセス変数の動作を変更しますが、メタデータ属性はプロセス全体の動作を変更する key-value 定義になります。

    たとえば、BPMN プロセスの以下のカスタムメタデータ属性 riskLevel および値 low は、プロセスを開始するためのカスタムイベントリスナーに対応します。

    図4.1 BPMN モデラーのメタデータ属性と値の例

    Image of custom metadata attribute and value

    BPMN ファイルのメタデータ属性と値の例

    <bpmn2:process id="approvals" name="approvals" isExecutable="true" processType="Public">
      <bpmn2:extensionElements>
        <tns:metaData name="riskLevel">
          <tns:metaValue><![CDATA[low]]></tns:metaValue>
        </tns:metaData>
      </bpmn2:extensionElements>

    メタデータ値を持つイベントリスナーの例

    public class MyListener implements ProcessEventListener {
        ...
        @Override
        public void beforeProcessStarted(ProcessStartedEvent event) {
            Map < String, Object > metadata = event.getProcessInstance().getProcess().getMetaData();
            if (metadata.containsKey("low")) {
                // Implement some action for that metadata attribute
            }
        }
    }

  7. プロセスデザイナーキャンバスで、左側のツールバーを使用して BPMN コンポーネントをドラッグアンドドロップし、ビジネスプロセスロジック、接続、イベント、タスク、またはその他の要素を定義します。
  8. ビジネスプロセスのすべてのコンポーネントを追加して定義した後に、Save をクリックし、完了したビジネスプロセスを保存します。

4.1. プロセスデザイナーでの BPMN2 タスク

タスクは、プロセスモデルに定義されている自動アクティビティーで、プロセスフロー内で最小の作業単位です。BPMN 2 仕様に定義されているタスクタイプで、Red Hat Process Automation Manager のプロセスデザイナーパレットで利用できるのは以下のとおりです。

  • ビジネスルールタスク
  • スクリプトタスク
  • ユーザータスク
  • サービスタスク
  • タスクなし

表4.2 タスク

ビジネスルールタスク

bpmn business rule task

スクリプトタスク

bpmn script task

ユーザータスク

bpmn user task

サービスタスク

bpmn service task

タスクなし

bpmn none task

さらに、BPMN2 仕様では、カスタムタスクの作成が可能になります。Red Hat Process Automation Manager には、以下の事前定義済みのカスタムタスクが含まれます。

  • REST サービスタスク: リモートの RESTful サービスの呼び出しに使用します。
  • メールサービスタスク: メールの送信に使用します。
  • ログサービスタスク: メッセージのログ記録に使用します。
  • Java サービスタスク: Java コードの呼び出しに使用します。
  • WebService サービスタスク: リモートの WebService コールの呼び出しに使用します。
  • DecisionTask タスク: DMN ダイアグラム実行に使用します。

ビジネスルールタスク

ビジネスルールタスクは、DMN モデルまたはルールフローグループを使用して、意思決定を行う方法を定義します。

bpmn business rule task

プロセスが DMN モデルで定義したビジネスルールタスクに到達したら、プロセスエンジンが、入力された内容を使用して DMN モデルを実行します。

プロセスがルールフローグループで定義したビジネスルールタスクに到達したら、プロセスエンジンは、定義済みのルールフローグループでルールを実行開始します。ルールフローグループにアクティブなルールがない場合には、実行は次の要素に移動します。ルールフローグループの実行中は、アクティブなルールフローグループに所属するアクティベーションは、他のルールで変更されるので、新たにアジェンダに追加できます。

スクリプトタスク

スクリプトタスクは、プロセス実行中に実行されるスクリプトを表します。

bpmn script task

関連付けられたスクリプトは、プロセス変数やグローバル変数にアクセスできます。スクリプトタスクを使用する前に以下の一覧をレビューしてください。

  • プロセスでは詳細にわたる実装の内容は回避してください。スクリプトタスクは、変数の操作に使用できますが、より複雑な操作をモデル化する場合にサービスタスクの使用を検討してください。
  • 即座にスクリプトを実行するようにしてください。すぐに実行しない場合には、非同期サービスタスクを使用してください。
  • スクリプトタスクを使用して外部のサービスの問い合わせを回避してください。サービスタスクを使用して、外部サービスとの通信をモデル化します。
  • スクリプトで例外がスローされないようにしてください。ランタイムの例外はスクリプト内などで、キャッチし、管理するか、プロセス内で処理できるシグナルまたはエラーに変換する必要があります。

実行中にスクリプトタスクに到達したら、スクリプトが実行され、外向きフローに移動します。

ユーザータスク

ユーザータスクは、システムで自動的に実行できないプロセスワークフローに含まれるタスクなので、ユーザー (人間)、つまり、アクターの介入が必要です。

bpmn user task

実行時に、ユーザータスク要素は、1 つ以上のアクターのタスク一覧に表示されるタスクとしてインスタンス化されます。ユーザータスク要素で Groups 属性が定義されている場合に、このユーザータスク要素は、グループに所属する全ユーザー一覧に表示されます。このグループに所属するメンバーは誰でもタスクをクレームできます。

タスクがクレームされると、他のユーザーのタスク一覧からこのタスクは消失します。

ユーザータスクは、ドメイン固有のタスクとして実装され、カスタムタスクのベースとして機能します。

サービスタスク

サービスタスクは、人間の介入を必要としないタスクです。これらは、外部のソフトウェアサービスによって自動的に完了します。

bpmn service task

タスクなし

アクティベーション時に完了するタスクはありません。これは概念モデルのみです。「なし」タスクは、ITシステムによって実際に実行されることはありません。

bpmn none task

4.1.1. ビジネスルールタスクの作成

ビジネスルールタスクは、Decision Model and Notation (DMN) モデルまたはルールフローグループを使用して意思決定を行うために使用されます。

手順

  1. ビジネスプロセスを作成します。
  2. プロセスデザイナーで、ツールパレットから Activities ツールを選択します。
  3. Business Rule を選択します。
  4. プロセスデザイナーキャンバスの空白エリアをクリックします。
  5. 必要に応じて、画面の右上隅で、Properties アイコンをクリックします。
  6. 必要に応じて、以下の表に一覧表示されているタスク情報を追加または定義します。

    表4.3 ビジネスルールタスクのパラメーター

    ラベル説明

    Name

    ビジネスルールタスクの名前。

    Rule Language

    タスクの出力言語。Decision Model and Notation (DMN) または Drools (DRL) を選択します。

    Rule Flow Group

    このビジネスタスクに関連付けられたルールフローグループ。一覧からルールフローグループを選択するか、新しいルールフローグループを指定します。

    On Entry Action

    タスクの開始時のアクションを指定する Java、JavaScript、または MVEL スクリプト。

    On Exit Action

    タスクの終了時にアクションを指定する Java、JavaScript、または MVEL スクリプト。

    Is Async

    このタスクを非同期で呼び出す必要がある場合に選択します。外部サービスによって実行されるタスクなど、タスクを瞬時に実行できない場合は、タスクを非同期にします。

    Adhoc Autostart

    これが自動的に開始される必要があるアドホックタスクである場合に選択します。Adhoc Autostart を使用すると、プロセスまたはケースインスタンスが作成されたときに、開始タスクによって開始されるのではなく、タスクが自動的に開始されます。多くの場合、ケース管理で使用されます。

    SLA Due Date

    サービスレベルアグリーメント (SLA) の有効期限の日付。

    Assignments

    クリックしてローカル変数を追加します。

  7. Save をクリックします。

4.1.2. スクリプトタスクの作成

スクリプトタスクは、Java、JavaScript、または MVEL で記述されたコードを実行するために使用されます。これらには、スクリプトタスクのアクションを指定するコードスニペットが含まれています。スクリプトにグローバル変数とプロセス変数を含めることができます。

Java、JavaScript、および MVEL でアクションスクリプトを作成できます。MVEL は有効な Java コードをすべて受け入れ、さらにパラメーターのネストされたアクセスをサポートすることに留意してください。たとえば、Java 呼び出し person.getName() に相当する MVEL は、person.name です。MVEL は Java に対して他の改善も提供し、MVEL 式は一般にビジネスユーザーにとってより便利です。

手順

  1. ビジネスプロセスを作成します。
  2. プロセスデザイナーで、ツールパレットから Activities ツールを選択します。
  3. Script を選択します。
  4. プロセスデザイナーキャンバスの空白エリアをクリックします。
  5. 必要に応じて、画面の右上隅で、Properties アイコンをクリックします。
  6. 必要に応じて、以下の表に一覧表示されているタスク情報を追加または定義します。

    表4.4 スクリプトタスクのパラメーター

    ラベル説明

    Name

    ビジネスルールタスクの名前。

    Documentation

    タスクの説明を入力します。このフィールドのテキストは、プロセスのドキュメントに含まれています。プロセスデザイナーキャンバスの左上にある Documentation タブをクリックして、プロセスドキュメントを表示します。

    Script

    タスクによって実行されるスクリプトを Java、JavaScript、または MVEL で入力し、スクリプトタイプを選択します。

    Is Async

    このタスクを非同期で呼び出す必要がある場合に選択します。外部サービスによって実行されるタスクなど、タスクを瞬時に実行できない場合は、タスクを非同期にします。

    Adhoc Autostart

    これが自動的に開始される必要があるアドホックタスクである場合に選択します。Adhoc Autostart を使用すると、プロセスまたはケースインスタンスが作成されたときに、開始タスクによって開始されるのではなく、タスクが自動的に開始されます。多くの場合、ケース管理で使用されます。

  7. Save をクリックします。

4.1.3. ユーザータスクの作成

ユーザータスクは、ビジネスプロセスに人間が行うアクションをインプットとして追加するために使用します。

手順

  1. ビジネスプロセスを作成します。
  2. プロセスデザイナーで、ツールパレットから Activities ツールを選択します。
  3. User を選択します。
  4. ビジネスルールをプロセスデザイナーキャンバスにドラッグアンドドロップするか、キャンバスの空白エリアをクリックします。
  5. 必要に応じて、画面の右上隅で、Properties アイコンをクリックします。
  6. 必要に応じて、以下の表に一覧表示されているタスク情報を追加または定義します。

    表4.5 ユーザータスクパラメーター

    ラベル説明

    Name

    ビジネスルールタスクの表示名。

    Documentation

    タスクの説明を入力します。このフィールドのテキストは、プロセスのドキュメントに含まれています。プロセスデザイナーキャンバスの左上にある Documentation タブをクリックして、プロセスドキュメントを表示します。

    Task Name

    ヒューマンタスクの名前。

    Subject

    タスクの件名を入力します。

    Actors

    ヒューマンタスクの実行を担当するアクター。Add をクリックして行を追加し、一覧からアクターを選択するか、New をクリックして新しいアクターを追加します。

    Groups

    ヒューマンタスクの実行を担当するグループ。Add をクリックして行を追加し、一覧からグループを選択するか、New をクリックして新しいグループを追加します。

    Assignments

    このタスクのローカル変数。Task Data I/O ウィンドウをクリックして開き、必要に応じてデータの入力と出力を追加します。

    Reassignments

    別のアクターを指定して、このタスクを完了します。

    Notifications

    クリックして、タスクに関連付けられた通知を指定します。

    Is Async

    このタスクを非同期で呼び出す必要がある場合に選択します。外部サービスによって実行されるタスクなど、タスクを瞬時に実行できない場合は、タスクを非同期にします。

    Skippable

    このタスクが必須ではない場合に選択します。

    Priority

    タスクの優先度を指定します。

    Description

    ヒューマンタスクの説明を入力します。

    Created By

    このタスクを作成したユーザー。

    Adhoc Autostart

    これが自動的に開始される必要があるアドホックタスクである場合に選択します。Adhoc Autostart を使用すると、プロセスまたはケースインスタンスが作成されたときに、開始タスクによって開始されるのではなく、タスクが自動的に開始されます。多くの場合、ケース管理で使用されます。

    Multiple Instance

    このタスクに複数のインスタンスがある場合に選択します。

    On Entry Action

    タスクの開始時のアクションを指定する Java、JavaScript、または MVEL スクリプト。

    On Exit Action

    タスクの終了時にアクションを指定する Java、JavaScript、または MVEL スクリプト。

    Content

    スクリプトのコンテンツ。

    SLA Due Date

    サービスレベルアグリーメント (SLA) の有効期限の日付。

  7. Save をクリックします。

4.1.4. サービスタスクの作成

サービスタスクは、プロセス外で実行されるプロセスの一部であるタスクですが、ヒューマンタスクではありません。サービスタスクの例には、これらのタスクがシステムによって実行されたときに電子メールを送信し、メッセージを記録することが含まれます。サービスタスクに関連付けられているパラメーター (入力) と結果 (出力) を定義できます。サービスタスクには、内向きの接続 1 つと外向きの接続 1 つが必要です。

手順

  1. ビジネスプロセスを作成します。
  2. プロセスデザイナーで、ツールパレットから Activities ツールを選択します。
  3. Service Task を選択します。
  4. プロセスデザイナーキャンバスの空白エリアをクリックします。
  5. 必要に応じて、画面の右上隅で、Properties アイコンをクリックします。
  6. 必要に応じて、以下の表に一覧表示されているタスク情報を追加または定義します。

    表4.6 サービスタスクパラメーター

    ラベル説明

    Name

    サービスタスクの名前。

    Documentation

    タスクの説明を入力します。このフィールドのテキストは、プロセスのドキュメントに含まれています。プロセスデザイナーキャンバスの左上にある Documentation タブをクリックして、プロセスドキュメントを表示します。

    Implementation

    タスクが Java で実装されているのか、または Web サービスであるのかを指定します。

    Interface

    org.xyz.HelloWorld など、スクリプトの実装に使用されるクラス。

    Operation

    sayHello() など、インターフェースによって呼び出されるメソッド。

    Assignments

    クリックしてローカル変数を追加します。

    Adhoc Autostart

    これが自動的に開始される必要があるアドホックタスクである場合に選択します。Adhoc Autostart を使用すると、プロセスまたはケースインスタンスが作成されたときに、開始タスクによって開始されるのではなく、タスクが自動的に開始されます。多くの場合、ケース管理で使用されます。

    Is Async

    このタスクを非同期で呼び出す必要がある場合に選択します。外部サービスによって実行されるタスクなど、タスクを瞬時に実行できない場合は、タスクを非同期にします。

    Is Multiple Instance

    このタスクに複数のインスタンスがある場合に選択します。

    On Entry Action

    タスクの開始時のアクションを指定する Java、JavaScript、または MVEL スクリプト。

    On Exit Action

    タスクの終了時にアクションを指定する Java、JavaScript、または MVEL スクリプト。

    SLA Due Date

    サービスレベルアグリーメント (SLA) の有効期限の日付。

  7. Save をクリックします。

4.2. ビジネスプロセスのコピーの作成

Business Central でビジネスプロセスのコピーを作成し、必要に応じてコピーしたプロセスを変更できます。

手順

  1. ビジネスプロセスデザイナーで、右上のツールバーの Copy をクリックします。
  2. Make a Copy ウィンドウで、コピーしたビジネスプロセスの新しい名前を入力し、ターゲットパッケージを選択して、オプションでコメントを追加します。
  3. Make a Copy をクリックします。
  4. 必要に応じてコピーしたビジネスプロセスを変更し、Save をクリックして、更新されたビジネスプロセスを保存します。

4.3. 要素のサイズを変更し、ズーム機能を使用したビジネスプロセスの表示

ビジネスプロセスの個々の要素のサイズを変更し、ズームインまたはズームアウトして、ビジネスプロセスの表示を変更できます。

手順

  1. ビジネスプロセスデザイナーで、要素を選択し、要素の右下隅にある赤い点をクリックします。
  2. 赤い点をドラッグして、要素のサイズを変更します。

    図4.2 要素のサイズ変更

    Resizing an element
  3. ズームインまたはズームアウトしてダイアグラム全体を表示するには、キャンバスの右下にあるプラス記号またはマイナス記号をクリックします。

    図4.3 ビジネスプロセスの拡大または縮小

    Zooming to view the entire diagram

4.4. Business Central でのプロセスドキュメントの生成

Business Central のプロセスデザイナーでは、プロセス定義のレポートを表示し、出力できます。プロセスドキュメントには、コンポーネント、データ、プロセスの視覚的なフローが簡単に出力して共有できるように PDF 形式でまとめられています。

手順

  1. Business Central で、ビジネスプロセスが含まれるプロジェクトに移動し、プロセスを選択します。
  2. プロセスデザイナーの Documentation タブでプロセスファイルの概要を表示し、画面の右上隅の Print をクリックして PDF レポートを出力します。

    図4.4 プロセスドキュメントの生成

    Project-level service task settings

4.5. プロセスデザイナー内の BPMN2 サブプロセス

サブプロセスは、複数のノードが含まれるアクティビティーです。サブプロセスにメインのプロセスの一部を埋め込むことができます。また、サブプロセスには変数定義を追加できます。これらの変数は、サブプロセス内の全ノードにアクセスできます。

サブプロセスには、内向きの接続と外向きの接続を 1 つずつ含める必要があります。サブプロセス内の中断終了イベントは、サブプロセスインスタンスを終了しますが、親プロセスインスタンスを自動的に終了することはありません。サブプロセスからアクティブな要素がなくなると、サブプロセスが終了します。

Red Hat Process Automation Manager では、以下のサブプロセスのタイプがサポートされます。

  • 埋め込みのサブプロセス。親プロセス実行の一部で、親プロセスのデータを共有します。
  • アドホックサブプロセス。厳密な要素実行の順番はありません。
  • 再利用可能なサブプロセス。親プロセスから独立しています。
  • イベントサブプロセス。開始イベントまたはタイマーでのみトリガーされます。
  • マルチインスタンスのサブプロセス

以下の例では、発注のサブプロセスは、その注文を受けるのに十分な在庫があるかを確認し、注文できた場合に在庫情報を更新します。注文の可否により、メインのプロセス経由で、顧客に通知が行きます。

subprocess

埋め込みサブプロセス

埋め込みサブプロセスは、プロセスの一部をカプセル化します。このサブプロセスには、開始イベントと、最低でも 1 つの終了イベントが含まれている必要があります。この要素を使用して、このコンテナー内の全要素にアクセスできるローカルのサブプロセス変数を定義できます。

アドホックサブプロセス

アドホックサブプロセスまたはプロセスには、埋め込みの内部アクティビティーが複数含まれ、通常のプロセスルーティングに比べて、より柔軟な順番で実行することを目的としています。通常のプロセスとは違い、アドホックサブプロセスには、開始イベントから終了イベントまでといった、完全な体系化された BPMN2 ダイアグラムの説明は含まれません。代わりに、アクティビティー、シーケンスフロー、ゲートウェイ、中間イベントのみが含まれます。また、アドホックサブプロセスには、データオブジェクトやデータの関連付けも含めることができます。アドホックサブプロセス内のアクティビティーでは、内向きおよび外向きのシーケンスフローを含める必要はありませんが、その中に含まれているアクティビティー間のシーケンスフローを指定できます。このサブプロセスを使用する場合には、シーケンスフローで、通常のプロセスと同じように順序の制約が課されます。意味をもたせるには、中間イベントに外向きのシーケンスフローを設定して、アドホックプロセスがアクティブな間は複数回トリガーできるようにします。

再利用可能なサブプロセス

再利用可能なサブプロセスは、親プロセス内で縮小表示されます。再利用可能なサブプロセスを設定するには、再利用可能なサブプロセスを選択し、 diagram properties をクリックして Implementation/Execution を展開します。以下のプロパティーを設定します。

  • 呼び出された要素: アクティビティーにより呼び出してインスタンス化するサブプロセスの ID。
  • 独立: 選択されている場合には、サブプロセスが独立プロセスとして開始されます。選択されていない場合には、親プロセスが中断されると、アクティブなサブプロセスが取り消されます。
  • 親の強制終了: この項目が選択されていて、呼び出したプロセスインスタンスの実行中にエラーが発生した場合には、再利用可能な従属サブプロセスで、親プロセスを中断できます。たとえば、サブプロセスを呼び出そうとしてエラーが発生した時や、サブプロセスインスタンスを中断する時などです。このプロパティーは、Independent プロパティーが選択されている時しか、表示されません。以下のルールが適用されます。

    • 再利用可能なサブプロセスが独立している場合に、親の強制終了 は使用できません。
    • 再利用可能なサブプロセスが独立していない場合 (従属してい場合) は、親の強制終了 を使用できます。
  • 完了するまで待機: 選択されている場合には、呼び出されたサブプロセスインスタンスが終了されるまで、指定の 終了時アクション は実行されません。親プロセスの実行は、終了時アクション が完了するまで継続されます。このプロパティーはデフォルトで選択されています (true に設定されています)。
  • 非同期: タスクを非同期で呼び出して、すぐに実行できないようにする場合に選択します。
  • 複数インスタンス: サブプロセス要素を指定の回数実行する場合に選択します。選択されている場合には、以下のオプションを使用できます。

    • MI 実行モード: 複数インスタンスを並行して実行するか、順次実行するかを指定します。Sequential に設定されている場合には、以前のインスタンスが完了するまで新規インスタンスは作成されません。
    • MI コレクション入力: 新規インスタンスを作成する要素コレクションを表現する変数を選択します。サブプロセスは、コレクションのサイズと同じ回数だけ、インスタンス化されます。
    • MI データ入力: コレクションで、選択された要素が含まれる変数名を指定します。この変数は、コレクション内の要素にアクセスする時に使用します。
    • MI コレクション出力: マルチインスタンスノードの出力を収集する要素コレクションを表現する任意の変数。
    • MI データ出力: MI コレクション出力 プロパティーで選択した出力コレクションに追加する変数名を指定します。
    • MI 完了条件 (mvel): 指定した複数のインスタンスノードを完了できるかどうかを確認するために、完了済みのインスタンスを評価する MVEL 式。true と評価された場合には、残りのインスタンスはすべて取り消されます。
  • 開始時アクション: タスクの開始時のアクションを指定する Java または MVEL スクリプト。
  • 終了時アクション: タスクの終了時のアクションを指定する Java または MVEL スクリプト。
  • SLA 期日: サービスレベルアグリーメント (SLA) の有効期限の日付。

図4.5 再利用可能なサブプロセスのプロパティー

A screenshot of Subprocess properties

イベントサブプロセス

イベントサブプロセスは、開始イベントがトリガーされるとアクティブになります。親プロセスのコンテキストを中断するか、並行して実行できます。

外向きまたは内向きの接続では、イベントまたはタイマーがサブプロセスをトリガーできます。サブプロセスは、通常のコントロールフローの一部ではありません。自己完結型ではありますが、バインドされているプロセスのコンテキストで実行されます。

プロセスフロー内のイベントサブプロセスを使用して、主なプロセスフロー外で発生するイベントを処理します。たとえば、飛行機の予約時には、以下の 2 つのイベントが発生する可能性があります。

  • 予約の取り消し (割り込み)
  • 予約ステータスの確認 (割り込みなし)

イベントのサブプロセスを使用して、これらのイベント両方をモデル化します。

マルチインスタンスサブプロセス

マルチインスタンスサブプロセスは、実行がトリガーされると、複数回インスタンス化されます。インスタンスが順次作成されます。新しいサブプロセスインスタンスは、前のインスタンスが完了した後にのみ作成されます。

マルチインスタンスサブプロセスには、内向きの接続 1 つと、外向きの接続 1 つが含まれます。

4.6. プロセスデザイナーでの BPMN2 ゲートウェイ

ゲートウェイは、ゲートメカニズムと呼ばれる条件セットを使用して、ワークフロー内にブランチを作成するか、ワークフロー内のブランチを同期するのに使用します。BPMN2 は、2 種類のゲートウェイをサポートします。

  • 収束ゲートウェイ。複数のフローを 1 つにマージします。
  • 分岐ゲートウェイ。1 つのフローを複数のフローに分割します。

1 つのゲートウェイに、複数の内向きと外向きフローを割り当てることはできません。

以下のビジネスプロセスダイアグラムで、XOR ゲートウェイは、条件が True と評価された内向きフローのみを評価します。 gateway

この例では、顧客の詳細がユーザーにより検証され、ユーザーが承認できるようにプロセスが割り当てられます。承認されると、承認通知がユーザーに送信されます。要求イベントが却下された場合には、却下通知がユーザーに送信されます。

表4.7 ゲートウェイ要素

要素タイプアイコン

排他的論理和 (XOR)

bpmn gateway exclusive

包含的

bpmn gateway inclusive

並列

bpmn gateway parallel

イベント

bpmn gateway event

排他的

排他的な分岐ゲートウェイでは、最初の内向きフローで条件が True と評価されたもののみが選択されます。収束ゲートウェイでは、トリガーされた内向きのフローごとに、次のノードがトリガーされます。

このゲートウェイは、1 つだけ外向きフローをトリガーします。フローの条件が True と評価されタナカで、優先順位が 最も低い 数字が選択されます。

重要

実行時に、最低でも 1 つの外向きフローが True と評価されるようにしてください。そうでないと、プロセスインスタンスは、ランタイムの例外で中断されます。

収束ゲートウェイでは、ワークフローブランチが、ゲートウェイに到達すると同時に外向きフローに進むことができます。内向きフローの 1 つがゲートウェイをトリガーすると、ワークフローはゲートウェイの外向きフローに進みます。複数の内向きフローからトリガーされた場合には、トリガーごとに次のノードをトリガーします。

包含的

包含的な分岐ゲートウェイでは、内向きフローが選択され、さらに True と評価された外向きフローすべてが選択されます。優先順位の数値が低い接続は、数値が高い接続よりも先にトリガーされます。優先順位は評価されますが、BPMN2 仕様では優先順位の順番は保証されません。ワークフローで priority 属性に依存しないようにしてください。

重要

実行時に、最低でも 1 つの外向きフローが True と評価されるようにしてください。そうでないと、プロセスインスタンスは、ランタイムの例外で中断されます。

包含的な収束ゲートウェイでは、包含的な分岐ゲートウェイでこれまでに作成された内向きフローすべてがマージされます。これは、包含ゲートウェイブランチの同期エントリーポイントとして機能します。

並列

並列ゲートウェイを使用して、並列フローを同期し、作成します。並列の分岐ゲートウェイでは、内向きフローが選択されると同時に、外向きフローもすべて選択されます。収束並列ゲートウェイでは、ゲートウェイは、内向きのフローがすべて到達するまで待機してからでないと、外向きフローをトリガーしません。

イベント

イベントベースのゲートウェイは分岐のみで、データをもとにした排他的ゲートウェイ (プロセスデータに反応) とは対照的に、発生する可能性のあるイベントに反応できます。発生したイベントをもとに、外向きフローに移動します。1 度に実行できる外向きフローは 1 つとなっています。ゲートウェイは、イベントベースのゲートウェイに接続されている中間イベントが発生した場合にのみ、プロセスがインスタンス化される、開始イベントとして機能する可能性があります。

4.7. プロセスデザイナーでの BPMN2 接続オブジェクト

接続オブジェクトは、BPMN2 要素 2 つの間の関連性を作成します。接続オブジェクトが転送された場合には、関連付けは順番に行われ、プロセスのインスタンス内で、要素の 1 つが他の要素よりも先に即座に実行されることを指定します。接続オブジェクトは、関連付けられているプロセス要素の上、下、右、左側で開始、終了できます。OMG BPMN2 仕様では、プロセスの動作を簡単に理解して従うことができるように、接続オブジェクトを独断で配置できます。

BPMN2 は主に、2 種類の接続オブジェクトをサポートします。

  • シーケンスフロー: プロセスの要素を接続し、インスタンス内でこれらの要素を実行する順番を定義します。
  • 関連付けフロー: 実行セマンティクスなしでプロセスの要素を接続します。関連付けフローは転送できません。できる場合は、単方向となっています。
注記

新しいプロセスデザイナーは、転送されない関連付けフローのみをサポートします。レガシーのデザイナーは、一方向と単方向のフローをサポートしています。

4.8. プロセスデザイナーでの BPMN2 ユーザータスクのライフサイクル

プロセスインスタンスの実行時にユーザータスク要素をトリガーしてユーザータスクを作成できます。プロセスインスタンスは、関連のあるユーザータスクが完了した場合か、中断した場合にのみ実行が継続されます。ユーザータスクのライフサイクルは以下のようになります。

  • プロセスインスタンスがユーザータスク要素に入ると、ユーザータスクは Created ステージに入ります。
  • Created は一時的なステージで、ユーザータスクはすぐに Ready ステージに入ります。タスクを実行可能な全アクターのタスク一覧に、タスクは表示されます。
  • アクターがユーザータスクをクレームすると、タスクは Reserved になります。
注記

ユーザータスクに、利用可能なアクターが 1 つある場合には、タスクは作成されるとそのアクターに割り当てられます。

  • ユーザータスクをクレームしたアクターが実行を開始すると、ユーザータスクのステータスは InProgress に変更されます。
  • アクターがユーザータスクを完了したら、実行の結果に応じて、ステータスが Completed または Failed に変わります。

以下のように、他にもライフサイクルメソッドが複数あります。

  • ユーザータスクが別のアクターに割り当てられるように、ユーザータスクを委任または転送する。
  • ユーザータスクを呼び出す。ユーザータスクが 1 つのアクターによりクレームされなくなりますが、このユーザータスクを実行できるアクターすべてが利用できます。
  • ユーザータスクを一時停止して再開する。
  • 進行中のユーザータスクを停止する。
  • タスクの実行が一時停止されたユーザータスクをスキップする。

ユーザータスクのライフサイクルに関する詳細は、Web Services Human Task を参照してください。

4.9. プロセスデザイナーでの BPMN2 タスクパーミッションのマトリックス

ユーザータスクのパーミッションマトリックスは、特定のユーザーロールで可能なアクションをまとめています。ユーザーロールは以下のとおりです。

  • 潜在的な所有者: タスク (以前にクレームされた後に解放、転送されたタスク) をクレーム可能なユーザー。ステータスが Ready のタスクはクレーム可能で、潜在的な所有者はタスクの実際の所有者になります。
  • 実際の所有者: タスクをクレームし、タスクが完了するか、失敗するまで進めるユーザー。
  • ビジネス管理者: ステータスを変更して、タスクのライフサイクルのどの時点にでもタスクを進めることができるスーパーユーザー。

以下のパーミッションマトリックスは、タスクの変更操作すべての承認を表します。

  • + は、ユーザーロールが指定の操作を実行できることを表します。
  • - は、ユーザーロールが指定の操作を実行できないか、操作がユーザーのロールと一致しないことを表します。

表4.8 主な操作のパーミッションマトリックス

操作潜在的な所有者実際の所有者ビジネス管理者

アクティベート

-

-

+

クレーム

+

-

+

完了

-

+

+

権限委譲

+

+

+

失敗

-

+

+

進む

+

+

+

ノミネート

-

-

+

リリース

-

+

+

削除

-

-

+

再開

+

+

+

スキップ

+

+

+

開始

+

+

+

停止

-

+

+

一時停止

+

+

+

4.10. プロセスデザイナーでの BPMN2 スイムレーン

スイムレーンは、1 つのグループまたはユーザーに関連のあるタスクを視覚的にグループ化するプロセス要素です。スイムレーンとユーザータスクを組み合わせて使用し、人間による複数のタスクを同じアクターに割り当てます。ランタイム時に、スイムレーンは、同じプロセスインスタンス内で、タスクを自動的にクレームするか、そのレーンで別のタスクを完了したユーザーに割り当てます。スイムレーンで最初のタスクが作成され、タスクにアクター ID が指定されている場合には、アクター ID がそのスイムレーンの他の全タスクにも割り当てられます。レーンとは、プロセス内のサブパーティションのことで、プロセス要素をグループ化し、共通のパラメーターを定義できます。

以下の例では、アナリストには 2 つのユーザータスクが割り当てられています。 swimlane

Update Customer Details と Resolve Customer Issue のタスクの Group フィールドには analyst の値が割り当てられています。プロセスが開始されて、Update Customer Details タスクがアナリストユーザーによりクレームされるか、開始されるか、完了されると、Resolve Customer Issue タスクがクレームされて、最初のタスクを完了したユーザーに割り当てられます。ただし、Update Customer Details タスクにアナリストグループが割り当てられていて、2 番目のタスクにユーザーやグループが割り当てられていない場合に、プロセスは最初のタスク完了後に停止します。

第5章 変数

変数には、実行時に使用されるデータが格納されます。プロセスデザイナーは、3 種類の変数を使用します。

グローバル変数

グローバル変数は、特定のセッションのすべてのプロセスインスタンスとアセットに表示されます。これらは、主にビジネスルールおよび制約によって使用されることを目的としており、ルールまたは制約によって動的に作成されます。

プロセス変数

プロセス変数は、BPMN2 定義ファイルのプロパティーとして定義され、プロセスインスタンス内で表示されます。プロセスの作成時に初期化され、プロセスの完了時に破棄されます。

ローカル変数

ローカル変数は、アクティビティーなどの特定のプロセス要素に関連付けられ、その中で使用できます。要素コンテキストが初期化されると、ローカル変数は初期化されます。つまり、実行ワークフローがノードに入り、onEntry アクションの実行が終了した場合に初期化されます (該当する場合)。要素コンテキストが破棄されると、ローカル変数は破棄されます。つまり、実行ワークフローが要素を離れる場合に破棄されます。

プロセス、サブプロセス、またはタスクなどの要素は、独自のコンテキストと親コンテキストの変数にのみアクセスできます。要素は、要素の子要素で定義された変数にアクセスできません。したがって、実行時に要素が変数へのアクセスを必要とする場合、独自のコンテキストが最初に検索されます。

変数が要素のコンテキストで直接見つからない場合、直接の親コンテキストが検索されます。検索は、プロセスコンテキストに到達するまで続行されます。グローバル変数の場合、検索はセッションコンテナーで直接実行されます。

変数が見つからない場合、読み取りアクセス要求は null を返し、書き込みアクセスはエラーメッセージを生成して、プロセスは実行を継続します。変数は ID に基づいて検索されます。

5.1. 変数タグ

変数の動作をより細かく制御するには、BPMN プロセスファイルでプロセス変数とローカル変数にタグ付けすることができます。タグは、特定の変数にメタデータとして追加する単純な文字列値です。

Red Hat Process Automation Manager は、プロセス変数とローカル変数の以下のタグをサポートします。

  • required: プロセスインスタンスを開始するための要件として変数を設定します。要件である変数なしでプロセスインスタンスが起動すると、Red Hat Process Automation Manager は VariableViolationException エラーを生成します。
  • readonly: 変数が情報提供のみを目的としており、設定できるのはプロセスインスタンスの実行中に 1 回のみであることを示します。readonly 変数の値がいずれかの時点で変更されると、Red Hat Process Automation Manager は VariableViolationException エラーを生成します。
  • restricted: VariableGuardProcessEventListener で使用される特別なタグで、必要かつ既存のロールに基づいて変数を変更する権限が付与されていることを示します。

    VariableGuardProcessEventListener は、DefaultProcessEventListener から拡張されたもので、2 つの異なるコンストラクターをサポートします。

    • VariableGuardProcessEventListener

      public VariableGuardProcessEventListener(String requiredRole, IdentityProvider identityProvider) {
          this("restricted", requiredRole, identityProvider);
      }
    • VariableGuardProcessEventListener

      public VariableGuardProcessEventListener(String tag, String requiredRole, IdentityProvider identityProvider) {
          this.tag = tag;
          this.requiredRole = requiredRole;
          this.identityProvider = identityProvider;
      }

      したがって、以下の例に示すように、許可されたロール名とユーザーロールを返す ID プロバイダーを使用して、イベントリスナーをセッションに追加する必要があります。

      ksession.addEventListener(new VariableGuardProcessEventListener("AdminRole", myIdentityProvider));

    上記の例では、VariableGuardProcessEventListener メソッドは、変数がセキュリティー制約タグ (restricted) でタグ付けされているかどうかを確認します。ユーザーに必要なロールがない場合、Red Hat Process Automation Manager は VariableViolationException エラーを生成します。

注記

Business Central UI に表示される変数タグ (internalinputoutputbusiness-relevanttracked など) は、Red Hat Process Automation Manager ではサポートされません。

タグは、![CDATA[TAG_NAME]] 形式で定義されたタグ値を使用し、customTags メタデータプロパティーとして BPMN プロセスソースファイルに直接追加できます。

たとえば、以下の BPMN プロセスは、required タグを approver プロセス変数に適用します。

図5.1 BPMN モデラーでタグ付けされた変数の例

Image of variable tags in BPMN modeler

BPMN ファイルでタグ付けされた変数の例

<bpmn2:property id="approver" itemSubjectRef="ItemDefinition_9" name="approver">
  <bpmn2:extensionElements>
    <tns:metaData name="customTags">
      <tns:metaValue><![CDATA[required]]></tns:metaValue>
    </tns:metaData>
  </bpmn2:extensionElements>
</bpmn2:property>

必要に応じて、変数に複数のタグを使用できます。BPMN ファイルでカスタム変数タグを定義して、Red Hat Process Automation Manager プロセスイベントリスナーが変数データを利用できるようにすることも可能です。カスタムタグは、標準の変数タグのように Red Hat Process Automation Manager のランタイムに影響を与えることはせず、情報提供のみを目的としています。カスタム変数タグは、標準の Red Hat Process Automation Manager 変数タグに使用する場合と同じ customTags メタデータプロパティー形式で定義します。

5.2. グローバル変数の定義

グローバル変数はナレッジセッションに存在し、アクセスが可能で、そのセッションのすべてのアセットで共有されます。これらはナレッジベースの特定のセッションに属し、エンジンに情報を渡すために使用されます。すべてのグローバル変数は、その ID とアイテムサブジェクト参照を定義します。ID は変数名として機能し、プロセス定義内で一意である必要があります。アイテムサブジェクト参照は、変数が保存するデータタイプを定義します。

重要

ルールは、ファクトが挿入されたときに評価されます。したがって、ファクトパターンを制約するためにグローバル変数を使用していて、グローバルが設定されていない場合、システムは NullPointerException を返します。

グローバル変数は、変数定義を持つプロセスがセッションに追加されるとき、またはセッションがパラメーターとしてグローバルで初期化されるときに初期化されます。

グローバル変数の値は通常、割り当て中に変更できます。これは、プロセス変数とアクティビティー変数間のマッピングです。続いてグローバル変数は、ローカルアクティビティーコンテキスト、ローカルアクティビティー変数、または子コンテキストから変数への直接呼び出しによって関連付けられます。

前提条件

  • Business Central でプロジェクトを作成済みである。これにはビジネスプロセスアセットが 1 つ以上含まれます。

手順

  1. ビジネスプロセスアセットを開きます。
  2. プロセスデザイナーキャンバスの空白エリアをクリックします。
  3. 画面の右上にある Properties アイコンをクリックして、Properties パネルを開きます。
  4. 必要に応じて、Process セクションを展開します。
  5. Global Variables のサブセクションで、プラスアイコンをクリックします。
  6. Name ボックスに変数の名前を入力します。
  7. Data Type メニューからデータタイプを選択します。

5.3. プロセス変数の定義

プロセス変数は、BPMN2 定義ファイルのプロパティーとして定義され、プロセスインスタンス内で表示されます。プロセスの作成時に初期化され、プロセスの完了時に破棄されます。

プロセス変数は、プロセスコンテキストに存在する変数であり、そのプロセスまたはその子要素からアクセスできます。プロセス変数は特定のプロセスインスタンスに属し、他のプロセスインスタンスからアクセスすることはできません。すべてのプロセス変数は、その ID とアイテムサブジェクト参照を定義します。ID は変数名として機能し、プロセス定義内で一意である必要があります。アイテムサブジェクト参照は、変数が保存するデータタイプを定義します。

プロセス変数は、プロセスインスタンスの作成時に初期化されます。それらの値は、グローバル変数がローカルアクティビティーコンテキスト、ローカルアクティビティー変数に関連付けられている場合に、割り当てを使用するプロセスアクティビティーによって、または子コンテキストから変数への直接呼び出しによって変更できます。

プロセス変数は、ローカル変数にマッピングする必要があることに注意してください。

前提条件

  • Business Central でプロジェクトを作成済みである。これにはビジネスプロセスアセットが 1 つ以上含まれます。

手順

  1. ビジネスプロセスアセットを開きます。
  2. プロセスデザイナーキャンバスの空白エリアをクリックします。
  3. 画面の右上にある Properties アイコンをクリックして、Properties パネルを開きます。
  4. 必要に応じて、Process Data セクションを展開します。
  5. Process Variables サブセクションで、プラスアイコンをクリックします。
  6. Name ボックスに変数の名前を入力します。
  7. Data Type メニューからデータタイプを選択します。

5.4. ローカル変数の定義

ローカル変数は、アクティビティーなどのプロセス要素内で使用できます。要素コンテキストが初期化されると、ローカル変数は初期化されます。つまり、実行ワークフローがノードに入り、onEntry アクションの実行が終了した場合に初期化されます (該当する場合)。要素コンテキストが破棄されると、ローカル変数は破棄されます。つまり、実行ワークフローが要素を離れる場合に破棄されます。

ローカル変数の値は、グローバル変数またはプロセス変数にマッピングできます。これにより、ローカル変数を収容する親要素の相対的な独立性を維持できます。このような分離は、技術的な例外の防止に役立つ場合があります。

ローカル変数は、プロセスの子要素コンテキストに存在する変数であり、このコンテキスト内からのみアクセスできます。ローカル変数は、プロセスの特定の要素に属します。

スクリプトタスクを除くタスクの場合、Assignments プロパティーの Data Input Assignments および Data Output Assignments を定義できます。Data Input Assignments は、Task に入る変数を定義し、タスクの実行に必要な入力データを提供します。Data Output Assignments は、実行後の Task のコンテキストを参照して、出力データを取得できます。

ユーザータスクは、ユーザータスクを実行しているアクターに関連するデータを提示します。さらに、ユーザータスクは、実行に関連する結果データを提供するようにアクターに要求します。

データを要求および提供するには、タスクフォームを使用し、Data Input Assignment パラメーターのデータを変数にマッピングします。データを出力として保持する場合は、Data Output Assignment パラメーターでユーザーが提供したデータをマッピングします。

前提条件

  • Business Central でプロジェクトを作成済みである。プロジェクトには、スクリプトタスクではないタスクが 1 つ以上あるビジネスプロセスアセットが 1 つ以上含まれます。

手順

  1. ビジネスプロセスアセットを開きます。
  2. スクリプトタスクではないタスクを選択します。
  3. 画面の右上にある Properties アイコンをクリックして、Properties パネルを開きます。
  4. Assignments サブセクションの下のボックスをクリックします。Task Data I/O ダイアログボックスが開きます。
  5. Data Inputs and Assignments または Data Outputs and Assignments の横にある Add をクリックします。
  6. Name ボックスにローカル変数の名前を入力します。
  7. Data Type メニューからデータタイプを選択します。
  8. ソースまたはターゲットを選択してから、Save をクリックします。

第6章 Business Central でのビジネスプロセスのデプロイ

Business Central でビジネスプロセスを設計したら、Business Central でプロジェクトをビルドおよびデプロイして、KIE Server でプロセスを使用できるようにします。

前提条件

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. デプロイするプロジェクトをクリックします。
  3. Deploy をクリックします。

    注記

    Build & Install オプションを選択してプロジェクトをビルドし、KJAR ファイルを KIE Server にデプロイせずに設定済みの Maven リポジトリーに公開することもできます。開発環境では、Deploy をクリックすると、ビルドされた KJAR ファイルを KIE Server に、(該当する場合) 実行中のインスタンスを停止せずにデプロイできます。または Redeploy をクリックして、ビルドされた KJAR ファイルをデプロイしてすべてのインスタンスを置き換えることもできます。ビルドされた KJAR ファイルを次回にデプロイまたは再デプロイすると、以前のデプロイメントユニット (KIE コンテナー) が同じターゲット KIE Server で自動的に更新されます。実稼働環境では Redeploy オプションは無効になっており、Deploy をクリックして、ビルドされた KJAR ファイルを KIE Server 上の新規デプロイメントユニット (KIE コンテナー) にデプロイすることのみが可能です。

    KIE Server の環境モードを設定するには、org.kie.server.mode システムプロパティーを org.kie.server.mode=development または org.kie.server.mode=production に設定します。Business Central でそれぞれのプロジェクトのデプロイメント動作を設定するには、プロジェクトの SettingsGeneral SettingsVersion に移動し、Development Mode オプションを選択します。デフォルトでは、KIE Server および Business Central のすべての新規プロジェクトは開発モードになっています。Development Mode をオンにしたプロジェクトをデプロイしたり、実稼働モードになっている KIE Server に手動で SNAPSHOT バージョンの接尾辞を追加したプロジェクトをデプロイしたりすることはできません。

    プロジェクトのデプロイメントに関する詳細を確認するには、画面の上部にあるデプロイメントバナーの View deployment details か、Deploy のドロップダウンメニューをクリックします。このオプションを使用すると、MenuDeployExecution Servers ページに移動します。

第7章 Business Central でのビジネスプロセスの実行

ビジネスプロセスを含むプロジェクトをビルドおよびデプロイした後、ビジネスプロセスに定義された機能を実行できます。

例として、この手順では Business Central の Mortgage_Process のサンプル例を使用します。このシナリオでは、住宅ローンブローカーとして、住宅ローン申請書にデータを入力します。MortgageApprovalProcess ビジネスプロセスが実行し、プロジェクトで定義しておいたデシジョンルールに基づいて、申請者が条件に合った頭金を提示したかどうかを判断します。ビジネスプロセスは、ルールのテストを終了するか、続行するために申請者が頭金を増額することを依頼します。申請書がビジネスルールのテストをパスしたら、銀行の承認者が申請書を見直し、ローンを承認または却下します。

前提条件

手順

  1. Business Central で、MenuProjects に移動して、スペースを選択します。デフォルトのスペースは MySpace です。
  2. ウィンドウの右上隅にある Add Project の横の矢印をクリックし、Try Samples を選択します。
  3. Mortgage_Process サンプルを選択し、OK をクリックします。
  4. プロジェクトページで、Mortgage_Process を選択します。
  5. Mortgage_Process ページで、Build をクリックします。
  6. プロジェクトがビルドされたら、Deploy をクリックします。
  7. MenuManageProcess Definitions の順にクリックします。
  8. MortgageApprovalProcess 行の任意の場所をクリックし、プロセスの詳細を表示します。
  9. Diagram タブをクリックし、エディターでビジネスプロセスダイアグラムを表示します。
  10. New Process Instance をクリックすると Application フォームが開き、以下の値をフォームフィールドに入力します。

    • Down Payment: 30000
    • Years of amortization: 10
    • Name: Ivo
    • Annual Income: 60000
    • SSN: 123456789
    • Age of property: 8
    • Address of property: Brno
    • Locale: Rural
    • Property Sale Price: 50000
  11. Submit をクリックして、新しいプロセスインスタンスを開始します。プロセスインスタンスを開始すると、Instance Details ビューが開きます。
  12. Diagram タブをクリックして、プロセスダイアグラムのプロセスフローを表示します。各タスクを通過した時のプロセスの状態が強調表示されます。
  13. MenuManageTasks をクリックします。

    この例では、対応するタスクで作業しているユーザーは、以下のグループのメンバーです。

    • approver: Qualify タスクの場合
    • broker: Correct Data タスクおよび Increase Down Payment タスクの場合
    • manager: Final Approval タスクの場合
  14. 承認者として、Qualify タスク情報を確認し、Claim をクリックしてから Start をクリックしてタスクを開始します。続いて、Is mortgage application in limit? を選択し、Complete をクリックしてタスクフローを完了します。
  15. Tasks ページで、Final Approval 行の任意の場所をクリックし、Final Approval タスクを開きます。
  16. Claim をクリックして、タスクの担当をクレームし、Complete をクリックして、ローンの承認プロセスを終了します。
注記

Save ボタンおよび Release ボタンは、承認プロセスを中断したり、(フィールド値を待っている場合は) インスタンスを保存したり、別のユーザーが修正するタスクを解除したりするために使用します。

第8章 ログファイルの管理

Red Hat Process Automation Managerは、必要なメンテナンス、削除されるランタイムデータを管理します。以下に例を示します。

  • プロセスインタンスデータ。プロセスインスタンスの完了時に削除されます。
  • ワークアイテムデータ。ワークアイテムの完了時に削除されます。
  • タスクインスタンスデータ。指定のタスクが所属するプロセスの完了時に削除されます。

自動的に初期ょされないランタイムデータには、選択したランタイムストラテジーを基にしたセッション情報データが含まれます。

  • シングルトンストラテジー を使用して、セッション情報のランタイムデータが自動的に削除されないようにします。
  • リクエスト別のストラテジー を使用することで、要求が終了した時点で自動的に削除できます。
  • プロセス別のインスタンス は、プロセスインスタンスが完了または中断されたセッションにマッピングされると、自動的に削除されます。

Red Hat Process Automation Manager には、監査データテーブルが含まれており、プロセスインスタンスを追跡できます。この監査データテーブルの管理および維持の方法として、ジョブのクリーンアップを 自動 で行う方法と、手動 で行う方法の 2 種類があります。

8.1. 自動クリーンアップジョブの設定

Business Central では自動クリーンアップジョブを設定できます。

手順

  1. Business Central で、Deploy > Jobs に移動します。
  2. New Job をクリックします。
  3. Type のテキストフィールドに、名前、期日、時間、以下のコマンドを入力します。

    org.jbpm.executor.commands.LogCleanupCommand
  4. parameters を使用する場合には Add Parameter をクリックして、キーセクションにパラメーターを、値のセクションにパラメーター値を入力します。
  5. Create をクリックして、ジョブ作成ウィザードを終了します。

自動クリーンアップジョブが正常に作成されました。

8.2. 手動クリーンアップ

手動クリーンアップを実行するには、監査 API を使用できます。監査 API は、以下のエリアに分類されます。

表8.1 監査 API エリア

名前説明

プロセス監査

これは、jbpm-audit モジュールでアクセス可能なプロセス、ノード、変数ログをクリーンアップするのに使用します。

たとえば、org.jbpm.process.audit.JPAAuditLogService のようにモジュールにアクセスできます。

タスク監査

これは、jbpm-human-task-audit モジュールでアクセス可能なタスクやイベントをクリーンアップするのに使用します。

たとえば、org.jbpm.services.task.audit.service.TaskJPAAuditService のように、モジュールにアクセスできます。

エグゼキュータージョブ

これは、jbpm-executor モジュールでアクセス可能なエグゼキュータージョブおよびエラーのクリーンアップに使用します。

たとえば、org.jbpm.executor.impl.jpa.ExecutorJPAAuditService のようにモジュールにアクセスできます。

8.3. データベースからのログの削除

LogCleanupCommand エグゼキューターコマンドを使用して、データベースの領域を使用するデータをクリーンアップします。LogCleanupCommand は、自動ですべてのデータをクリーンアップするロジックと、選択したデータをクリーンアップするロジックで構成されます。

LogCleanupCommand コマンドと合わせて使用可能な設定オプションが複数あります。

表8.2 LogCleanupCommand パラメーターテーブル

名前説明排他的

SkipProcessLog

コマンドの実行時に、プロセスおよびノードインスタンス、プロセス変数ログのクリーンアップをスキップするかどうかを指定します。デフォルト値は false です。

いいえ、他のパラメーターと併用します。

SkipTaskLog

タスク監査およびイベントログのクリーンアップをスキップするかどうかを指定します。デフォルトは false です。

いいえ、他のパラメーターと併用します。

SkipExecutorLog

Red Hat Process Automation Manager エグゼキューターのエントリー消去をスキップするかどうかを指定します。デフォルト値は false です。

いいえ、他のパラメーターと併用します。

SingleRun

ジョブルーチンを 1 回だけ実行するかどうかを指定します。デフォルト値は false です。

いいえ、他のパラメーターと併用します。

NextRun

次のジョブの実行をスケジュールします。デフォルト値は、24h です。

たとえば、12時間ごとにジョブを実行するには、12h と指定します。SingleRuntrue にされており、SingleRunNextRun 両方が設定されていない場合は、このスケジュールは無視されます。両方が設定されている場合には、NextRun のスケジュールが優先されます。正確な日付を設定するには、ISO 形式を使用できます。

いいえ、他のパラメーターと併用します。

OlderThan

指定の日付より古いログを削除します。日付の形式は、YYYY-MM-DD です。通常、このパラメーターは単一のジョブ実行に使用します。

はい。OlderThanPeriod パラメーターと併用しません。

OlderThanPeriod

指定のタイマー式より古いログを削除します。たとえば、30 日が経過したログを削除するには、30d を設定します。

はい。OlderThan パラメーターと併用しません。

ForProcess

削除するログのプロセス定義 ID を指定します。

いいえ、他のパラメーターと併用します。

ForDeployment

削除するログのデプロイメント ID を指定します。

いいえ、他のパラメーターと併用します。

EmfName

削除操作の実行に使用する永続性ユニット名。

該当なし

注記

LogCleanupCommand では、プロセスインスタンス、タスクインスタンス、またはエグゼキュータジョブの実行など、アクテイブなインスタンスは削除されません。

第9章 Business Central でのプロセス定義とプロセスインスタンス

プロセス定義は、Business Process Model and Notation (BPMN) 2.0 ファイルであり、プロセスとその BPMN ダイアグラムのコンテナーとして機能します。プロセス定義には、関連するサブプロセスや、選択した定義に参加しているユーザーとグループの数など、ビジネスプロセスに関する利用可能な情報がすべて表示されます。

プロセス定義は、プロセス定義が使用するインポートされたプロセスの import エントリー、および relationship エントリーも定義します。

プロセス定義の BPMN2 ソース

<definitions id="Definition"
               targetNamespace="http://www.jboss.org/drools"
               typeLanguage="http://www.java.com/javaTypes"
               expressionLanguage="http://www.mvel.org/2.0"
               xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"Rule Task
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
               xmlns:g="http://www.jboss.org/drools/flow/gpd"
               xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
               xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
               xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
               xmlns:tns="http://www.jboss.org/drools">

    <process>
      PROCESS
    </process>

    <bpmndi:BPMNDiagram>
     BPMN DIAGRAM DEFINITION
    </bpmndi:BPMNDiagram>

    </definitions>

ビジネスプロセスを含むプロジェクトを作成し、設定してデプロイした後に、Business Central の MenuManageProcess Definitions ですべてのプロセス定義の一覧を確認できます。右上隅のリフレッシュボタンをクリックすれば、デプロイしたプロセス定義の一覧をいつでもリフレッシュできます。

プロセス定義の一覧には、プラットフォームにデプロイした利用可能なすべてのプロセス定義が表示されます。各プロセス定義をクリックすると、対応するプロセス定義の詳細が表示されます。そのプロセスに関連するサブプロセスが存在するかどうか、プロセス定義にユーザーおよびグループがいくつ存在するかなど、プロセス定義の情報が表示されます。プロセス定義に関する詳細ページの Diagram タブには、プロセス定義の BPMN2 ベースのダイアグラムが含まれます。

選択したプロセス定義内からそれぞれ、右上隅の New Process Instance ボタンをクリックして、プロセス定義用の新規プロセスインスタンスを起動できます。利用可能なプロセス定義から起動したプロセスインスタンスは、MenuManageProcess Instances に一覧表示されます。

Manage ドロップダウンメニュー (Process DefinitionProcess InstancesTasksJobs および Execution Errors) と MenuTrackTask Inbox で、全ユーザーのデフォルトページネーションオプションを定義することも可能です。

Business Central でのプロセスおよびタスクの管理に関する詳細は『Business Central でのビジネスプロセスの管理と監視』を参照してください。

9.1. プロセス定義ページからのプロセスインスタンスの開始

MenuManageProcess Definitions からプロセスインスタンスを起動できます。これは、複数のプロジェクトやプロセス定義を同時に使用する環境で、有用です。

前提条件

  • Business Central に、プロセス定義が設定されたプロジェクトがデプロイされている。

手順

  1. Business Central で MenuManageProcess Definitions に移動します。
  2. 一覧から、新しいプロセスインスタンスを開始するプロセス定義を選択します。定義の詳細ページが開きます。
  3. 右上隅の New Process Instance をクリックし、新しいプロセスインスタンスを開始します。
  4. プロセスインスタンスに必要な情報を提供します。
  5. Submit をクリックして、プロセスインスタンスを作成します。
  6. MenuManageProcess Instances で新規プロセスインスタンスを表示します。

9.2. プロセスインスタンスページからプロセスインスタンスの開始

MenuManageProcess Instances で、新規プロセスインスタンスを作成するか、実行中のプロセスインスタンスの全リストを表示することができます。

前提条件

  • Business Central に、プロセス定義が設定されたプロジェクトがデプロイされている。

手順

  1. Business Central で、MenuManageProcess Instances に移動します。
  2. 右上隅の New Process Instance をクリックし、ドロップダウンリストから新しいプロセスインスタンスを開始するプロセス定義を選択します。
  3. 新しいプロセスインスタンスを開始するために必要な情報を入力します。
  4. Start をクリックして、プロセスインスタンスを作成します。

    Manage Process Instances 一覧に新しいプロセスインスタンスが表示されます。

9.3. XML でのプロセス定義

BPMN 2.0 仕様を使用して、XML 形式でプロセスを直接作成できます。これらの XML プロセスの構文は、BPMN 2.0 XML スキーマ定義を使用して定義されます。

プロセス XML ファイルは、以下のコアセクションで構成されます。

  • process: これは、さまざまなノードとそのプロパティーの定義を含むプロセス XML の最上部になります。プロセス XML ファイルは、1 つの <process> 要素で構成されます。この要素には、プロセスに関連するパラメーター (そのタイプ、名前、ID、およびパッケージ名) が含まれ、3 つのサブセクションで構成されます。つまり、変数、グローバル、インポート、レーンなどのプロセスレベル情報が定義されるヘッダーセクション、プロセス内の各ノードを定義するノードセクション、およびプロセス内のすべてのノード間の接続を含む接続セクションの 3 つです。
  • BPMNDiagram: これは、ノードの場所など、すべての描画情報を含むプロセス XML ファイルの下の部分になります。ノードセクションには、各ノードの特定の要素が含まれ、そのノードタイプのさまざまなパラメーターとサブ要素を定義します。

以下のプロセス XML ファイルのフラグメントは、開始イベント、"Hello World" をコンソールに出力するスクリプトタスク、および終了イベントを含むシンプルなプロセスを示しています。

<?xml version="1.0" encoding="UTF-8"?>

<definitions
  id="Definition"
  targetNamespace="http://www.jboss.org/drools"
  typeLanguage="http://www.java.com/javaTypes"
  expressionLanguage="http://www.mvel.org/2.0"
  xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
  xmlns:g="http://www.jboss.org/drools/flow/gpd"
  xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
  xmlns:dc="http://www.omg.org/spec/DD/20100524/DC"
  xmlns:di="http://www.omg.org/spec/DD/20100524/DI"
  xmlns:tns="http://www.jboss.org/drools">

  <process processType="Private" isExecutable="true" id="com.sample.hello" name="Hello Process">
    <!-- nodes -->
    <startEvent id="_1" name="Start" />

    <scriptTask id="_2" name="Hello">
      <script>System.out.println("Hello World");</script>
    </scriptTask>

    <endEvent id="_3" name="End" >
      <terminateEventDefinition/>
    </endEvent>

    <!-- connections -->

    <sequenceFlow id="_1-_2" sourceRef="_1" targetRef="_2" />
    <sequenceFlow id="_2-_3" sourceRef="_2" targetRef="_3" />
  </process>

  <bpmndi:BPMNDiagram>
    <bpmndi:BPMNPlane bpmnElement="com.sample.hello" >

      <bpmndi:BPMNShape bpmnElement="_1" >
        <dc:Bounds x="16" y="16" width="48" height="48" />
      </bpmndi:BPMNShape>

      <bpmndi:BPMNShape bpmnElement="_2" >
        <dc:Bounds x="96" y="16" width="80" height="48" />
      </bpmndi:BPMNShape>

      <bpmndi:BPMNShape bpmnElement="_3" >
        <dc:Bounds x="208" y="16" width="48" height="48" />
      </bpmndi:BPMNShape>

      <bpmndi:BPMNEdge bpmnElement="_1-_2" >
        <di:waypoint x="40" y="40" />
        <di:waypoint x="136" y="40" />
      </bpmndi:BPMNEdge>

      <bpmndi:BPMNEdge bpmnElement="_2-_3" >
        <di:waypoint x="136" y="40" />
        <di:waypoint x="232" y="40" />
      </bpmndi:BPMNEdge>

    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>

</definitions>

第10章 Business Central のフォーム

フォームは、HTML として定義されたページのレイアウト定義であり、プロセスおよびタスクのインスタンス化の間にユーザーにダイアログウィンドウとして表示されます。タスクフォームはプロセスとタスクインスタンスの両方の実行のためにユーザーからデータを取得しますが、プロセスフォームはプロセス変数から入力と出力を受け取ります。

入力は、Data Input Assignment を使用してタスクにマッピングされ、タスク内で使用できます。タスクが完了すると、データは Data Output Assignment としてマッピングされ、データを親プロセスインスタンスに提供します。

10.1. Form Modeler

Red Hat Process Automation Manager は、Form Modeler と呼ばれるフォームを定義するためのカスタムエディターを提供します。Form Modeler を使用すると、コードを記述せずに、データオブジェクトのフォーム、タスクフォーム、およびプロセス開始フォームを生成できます。Form Modeler には、複数のデータタイプをバインドするためのウィジェットライブラリーと、フォームの値が変更されたときに通知を送信するコールバックメカニズムが含まれています。Form Modeler は、Bean ベースの検証を使用し、フォームフィールドの静的または動的モデルへのバインドをサポートします。

Form Modeler には以下の機能が含まれています。

  • フォームのフォームモデリングユーザーインターフェース
  • データモデルまたは Java オブジェクトからのフォーム自動生成
  • Java オブジェクトのデータバインディング
  • 公式と式
  • カスタマイズされたフォームレイアウト
  • 埋め込みフォーム

Form Modeler には、フォームを作成するためにキャンバスに配置する定義済みのフィールドタイプが付属します。

図10.1 住宅ローンの申し込みフォームの例

5011

10.2. Business Central でのプロセスフォームおよびタスクフォームの生成

プロセスをインスタンス化したときに、プロセスをインスタンス化したユーザーに表示されるビジネスプロセスからプロセスフォームを生成できます。また、ビジネスプロセスからタスクフォームを生成することもできます。このタスクフォームは、実行フローがタスクに到達すると、ユーザータスクのインスタンス化時にユーザータスクのアクターに表示されます。

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. プロジェクト名をクリックしてアセットビューを開いてから、ビジネスプロセス名をクリックします。
  3. プロセスデザイナーで、フォームを作成するプロセスタスクをクリックします (該当する場合)。
  4. 右上のツールバーで、Form Generation アイコンをクリックして、生成するフォームを選択します。

    • Generate process form: プロセス全体のフォームを生成します。これは、プロセスインスタンスの起動時にユーザーが入力する必要がある初期フォームです。
    • Generate all forms: プロセス全体およびすべてのユーザータスクのフォームを生成します。
    • Generate forms for selection: 選択したユーザータスクノードのフォームを生成します。

    図10.2 フォーム生成メニュー

    auto form create

    フォームは、プロジェクトのルートディレクトリーに作成されます。

  5. Business Central で、プロジェクトのルートディレクトリーに移動して新しいフォーム名をクリックし、Form Modeler を使用して要件に合わせてフォームをカスタマイズします。

10.3. Business Central での手動によるフォームの作成

プロジェクトアセットビューから、タスクおよびプロセスフォームを手動で作成できます。これは、ビジネスプロセスからフォームを生成することを選択せずにフォームを生成する別の方法です。たとえば、Form Modeler は外部データオブジェクトからのフォームの作成をサポートするようになりました。

手順

  1. Business Central で、MenuDesignProjects に移動して、プロジェクト名をクリックします。
  2. Add AssetForm をクリックします。
  3. Create new Form ウィンドウで、以下の情報を入力します。

    • フォーム名 (一意である必要があります)
    • パッケージ名
    • モデルタイプ: Business Process または Data Object のいずれかを選択します。

      • Business Process モデルタイプの場合、Select Process ドロップダウンメニューからビジネスプロセスを選択し、Select Form ドロップダウンメニューから作成するフォームを選択します。
      • Data Object モデルタイプの場合、Select Data Object from Project のドロップダウンメニューから、プロジェクトデータオブジェクトの 1 つを選択します。
  4. OK をクリックして、Form Modeler を開きます。
  5. Form Modeler の左側の Components ビューで、Model Fields および Form Controls メニューを展開し、必要なフィールドとフォームコントロールをキャンバスにドラッグして新しいフォームを作成します。
  6. Save をクリックして変更を保存します。

10.4. フォームまたはプロセスでのドキュメントの添付

Red Hat Process Automation Manager は、Document フォームフィールドを使用したフォームでのドキュメントの添付をサポートしています。Document フォームフィールドを使用すると、フォームまたはプロセスの一部として必要なドキュメントをアップロードできます。

フォームおよびプロセスでドキュメントの添付を有効にするには、以下の手順を実行します。

  1. ドキュメントマーシャリング戦略を設定します。
  2. ビジネスプロセスでドキュメント変数を作成します。
  3. タスクの入力と出力をドキュメント変数にマッピングします。

10.4.1. ドキュメントマーシャリング戦略の設定

プロジェクトのドキュメントマーシャリング戦略により、フォームおよびプロセスで使用するドキュメントの保存場所が決まります。Red Hat Process Automation Manager のデフォルトのドキュメントマーシャリング戦略は org.jbpm.document.marshalling.DocumentMarshallingStrategy です。この戦略では、PROJECT_HOME/docs フォルダーにドキュメントをローカルに保存する DocumentStorageServiceImpl クラスを使用します。Business Central または kie-deployment-descriptor.xml ファイルのプロジェクトに、このドキュメントマーシャリング戦略またはカスタムドキュメントマーシャリング戦略を設定できます。

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. プロジェクトを選択します。プロジェクトの Assets ウィンドウが開きます。
  3. プロジェクトの Settings タブをクリックします。

    図10.3 設定タブ

    Selecting the settings tab
  4. DeploymentsMarshalling StrategiesAdd Marshalling Strategy をクリックします。
  5. Name フィールドにドキュメントマーシャリング戦略の識別子を入力し、Resolver のドロップダウンメニューで、対応するリゾルバータイプを選択します。

    • 1 つのドキュメントの場合: ドキュメントマーシャリング戦略として org.jbpm.document.marshalling.DocumentMarshallingStrategy を入力し、リゾルバータイプを Reflection に設定します。
    • 複数のドキュメントの場合: ドキュメントマーシャリング戦略として new org.jbpm.document.marshalling.DocumentCollectionImplMarshallingStrategy(new org.jbpm.document.marshalling.DocumentMarshallingStrategy()) を入力し、リゾルバータイプを MVEL に設定します。
    • カスタムドキュメントサポートの場合: カスタムドキュメントマーシャリング戦略の識別子を入力し、関連するリゾルバータイプを選択します。
  6. Test をクリックして、デプロイメント記述子ファイルを検証します。
  7. Deploy をクリックして、更新されたプロジェクトをビルドおよびデプロイします。

    または、Business Central を使用していない場合は、PROJECT_HOME/src/main/resources/META_INF/kie-deployment-descriptor.xml (該当する場合) に移動し、必要な <marshalling-strategies> 要素を使用してデプロイメント記述子ファイルを編集します。

  8. Save をクリックします。

複数のドキュメントのドキュメントマーシャリング戦略を使用したデプロイメント記述子ファイルの例

<deployment-descriptor
    xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <persistence-unit>org.jbpm.domain</persistence-unit>
  <audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
  <audit-mode>JPA</audit-mode>
  <persistence-mode>JPA</persistence-mode>
  <runtime-strategy>SINGLETON</runtime-strategy>
  <marshalling-strategies>
    <marshalling-strategy>
      <resolver>mvel</resolver>
      <identifier>new org.jbpm.document.marshalling.DocumentCollectionImplMarshallingStrategy(new org.jbpm.document.marshalling.DocumentMarshallingStrategy());</identifier>
    </marshalling-strategy>
  </marshalling-strategies>

10.4.1.1. コンテンツ管理システム (CMS) にカスタムドキュメントマーシャリング戦略を使用する

プロジェクトのドキュメントマーシャリング戦略により、フォームおよびプロセスで使用するドキュメントの保存場所が決まります。Red Hat Process Automation Manager のデフォルトのドキュメントマーシャリング戦略は org.jbpm.document.marshalling.DocumentMarshallingStrategy です。この戦略では、PROJECT_HOME/docs フォルダーにドキュメントをローカルに保存する DocumentStorageServiceImpl クラスを使用します。集中型のコンテンツ管理システム (CMS) などのカスタムの場所にフォームおよびプロセスドキュメントを保存する場合は、カスタムドキュメントマーシャリング戦略をプロジェクトに追加します。このドキュメントマーシャリング戦略は、Business Central または kie-deployment-descriptor.xml ファイルで直接設定できます。

手順

  1. org.kie.api.marshalling.ObjectMarshallingStrategy インターフェースの実装を含むカスタムマーシャリング戦略 .java ファイルを作成します。このインターフェースを使用すると、カスタムドキュメントマーシャリング戦略に必要な変数の永続性を実装できます。

    このインターフェースの以下のメソッドは、戦略の作成に役立ちます。

    • boolean accept(Object object): 指定されたオブジェクトを戦略でマーシャリングできるかどうかを決定します。
    • byte[] marshal(Context context, ObjectOutputStream os, Object object): 指定されたオブジェクトをマーシャリングし、マーシャリングされたオブジェクトを byte[] として返します。
    • Object unmarshal(Context context, ObjectInputStream is, byte[] object, ClassLoader classloader): 受信したオブジェクトを byte[] として読み取り、マーシャリングされていないオブジェクトを返します。
    • void write(ObjectOutputStream os, Object object): 下位互換性のために提供されている marshal メソッドと同じです。
    • Object read(ObjectInputStream os): 下位互換性のために提供されている unmarshal メソッドと同じです。

    以下のコードサンプルは、コンテンツ管理相互運用サービス (CMIS) システムからデータを保存および取得するための ObjectMarshallingStrategy 実装例です。

    CMIS システムからデータを保存および取得するための実装例

    package org.jbpm.integration.cmis.impl;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.HashMap;
    
    import org.apache.chemistry.opencmis.client.api.Folder;
    import org.apache.chemistry.opencmis.client.api.Session;
    import org.apache.chemistry.opencmis.commons.data.ContentStream;
    import org.apache.commons.io.IOUtils;
    import org.drools.core.common.DroolsObjectInputStream;
    import org.jbpm.document.Document;
    import org.jbpm.integration.cmis.UpdateMode;
    
    import org.kie.api.marshalling.ObjectMarshallingStrategy;
    
    public class OpenCMISPlaceholderResolverStrategy extends OpenCMISSupport implements ObjectMarshallingStrategy {
    
    	private String user;
    	private String password;
    	private String url;
    	private String repository;
    	private String contentUrl;
    	private UpdateMode mode = UpdateMode.OVERRIDE;
    
    	public OpenCMISPlaceholderResolverStrategy(String user, String password, String url, String repository) {
    		this.user = user;
    		this.password = password;
    		this.url = url;
    		this.repository = repository;
    	}
    
    	public OpenCMISPlaceholderResolverStrategy(String user, String password, String url, String repository, UpdateMode mode) {
    		this.user = user;
    		this.password = password;
    		this.url = url;
    		this.repository = repository;
    		this.mode = mode;
    	}
    
    	   public OpenCMISPlaceholderResolverStrategy(String user, String password, String url, String repository, String contentUrl) {
    	        this.user = user;
    	        this.password = password;
    	        this.url = url;
    	        this.repository = repository;
    	        this.contentUrl = contentUrl;
    	    }
    
    	    public OpenCMISPlaceholderResolverStrategy(String user, String password, String url, String repository, String contentUrl, UpdateMode mode) {
    	        this.user = user;
    	        this.password = password;
    	        this.url = url;
    	        this.repository = repository;
    	        this.contentUrl = contentUrl;
    	        this.mode = mode;
    	    }
    
    	public boolean accept(Object object) {
    		if (object instanceof Document) {
    			return true;
    		}
    		return false;
    	}
    
    	public byte[] marshal(Context context, ObjectOutputStream os, Object object) throws IOException {
    		Document document = (Document) object;
    		Session session = getRepositorySession(user, password, url, repository);
    		try {
    			if (document.getContent() != null) {
    				String type = getType(document);
    				if (document.getIdentifier() == null || document.getIdentifier().isEmpty()) {
    					String location = getLocation(document);
    
    					Folder parent = findFolderForPath(session, location);
    					if (parent == null) {
    						parent = createFolder(session, null, location);
    					}
    					org.apache.chemistry.opencmis.client.api.Document doc = createDocument(session, parent, document.getName(), type, document.getContent());
    					document.setIdentifier(doc.getId());
    					document.addAttribute("updated", "true");
    				} else {
    					if (document.getContent() != null && "true".equals(document.getAttribute("updated"))) {
    						org.apache.chemistry.opencmis.client.api.Document doc = updateDocument(session, document.getIdentifier(), type, document.getContent(), mode);
    
    						document.setIdentifier(doc.getId());
    						document.addAttribute("updated", "false");
    					}
    				}
    			}
    			ByteArrayOutputStream buff = new ByteArrayOutputStream();
    	        ObjectOutputStream oos = new ObjectOutputStream( buff );
    	        oos.writeUTF(document.getIdentifier());
    	        oos.writeUTF(object.getClass().getCanonicalName());
    	        oos.close();
    	        return buff.toByteArray();
    		} finally {
    			session.clear();
    		}
    	}
    
    	public Object unmarshal(Context context, ObjectInputStream ois, byte[] object, ClassLoader classloader) throws IOException, ClassNotFoundException {
    		DroolsObjectInputStream is = new DroolsObjectInputStream( new ByteArrayInputStream( object ), classloader );
    		String objectId = is.readUTF();
    		String canonicalName = is.readUTF();
    		Session session = getRepositorySession(user, password, url, repository);
    		try {
    			org.apache.chemistry.opencmis.client.api.Document doc = (org.apache.chemistry.opencmis.client.api.Document) findObjectForId(session, objectId);
    			Document document = (Document) Class.forName(canonicalName).newInstance();
    			document.setAttributes(new HashMap<String, String>());
    
    			document.setIdentifier(objectId);
    			document.setName(doc.getName());
    			document.setLastModified(doc.getLastModificationDate().getTime());
    			document.setSize(doc.getContentStreamLength());
    			document.addAttribute("location", getFolderName(doc.getParents()) + getPathAsString(doc.getPaths()));
    			if (doc.getContentStream() != null && contentUrl == null) {
    				ContentStream stream = doc.getContentStream();
    				document.setContent(IOUtils.toByteArray(stream.getStream()));
    				document.addAttribute("updated", "false");
    				document.addAttribute("type", stream.getMimeType());
    			} else {
    			    document.setLink(contentUrl + document.getIdentifier());
    			}
    			return document;
    		} catch(Exception e) {
    			throw new RuntimeException("Cannot read document from CMIS", e);
    		} finally {
    			is.close();
    			session.clear();
    		}
    	}
    
    	public Context createContext() {
    		return null;
    	}
    
    	// For backward compatibility with previous serialization mechanism
    	public void write(ObjectOutputStream os, Object object) throws IOException {
    		Document document = (Document) object;
    		Session session = getRepositorySession(user, password, url, repository);
    		try {
    			if (document.getContent() != null) {
    				String type = document.getAttribute("type");
    				if (document.getIdentifier() == null) {
    					String location = document.getAttribute("location");
    
    					Folder parent = findFolderForPath(session, location);
    					if (parent == null) {
    						parent = createFolder(session, null, location);
    					}
    					org.apache.chemistry.opencmis.client.api.Document doc = createDocument(session, parent, document.getName(), type, document.getContent());
    					document.setIdentifier(doc.getId());
    					document.addAttribute("updated", "false");
    				} else {
    					if (document.getContent() != null && "true".equals(document.getAttribute("updated"))) {
    						org.apache.chemistry.opencmis.client.api.Document doc = updateDocument(session, document.getIdentifier(), type, document.getContent(), mode);
    
    						document.setIdentifier(doc.getId());
    						document.addAttribute("updated", "false");
    					}
    				}
    			}
    			ByteArrayOutputStream buff = new ByteArrayOutputStream();
    	        ObjectOutputStream oos = new ObjectOutputStream( buff );
    	        oos.writeUTF(document.getIdentifier());
    	        oos.writeUTF(object.getClass().getCanonicalName());
    	        oos.close();
    		} finally {
    			session.clear();
    		}
    	}
    
    	public Object read(ObjectInputStream os) throws IOException, ClassNotFoundException {
    		String objectId = os.readUTF();
    		String canonicalName = os.readUTF();
    		Session session = getRepositorySession(user, password, url, repository);
    		try {
    			org.apache.chemistry.opencmis.client.api.Document doc = (org.apache.chemistry.opencmis.client.api.Document) findObjectForId(session, objectId);
    			Document document = (Document) Class.forName(canonicalName).newInstance();
    
    			document.setIdentifier(objectId);
    			document.setName(doc.getName());
    			document.addAttribute("location", getFolderName(doc.getParents()) + getPathAsString(doc.getPaths()));
    			if (doc.getContentStream() != null) {
    				ContentStream stream = doc.getContentStream();
    				document.setContent(IOUtils.toByteArray(stream.getStream()));
    				document.addAttribute("updated", "false");
    				document.addAttribute("type", stream.getMimeType());
    			}
    			return document;
    		} catch(Exception e) {
    			throw new RuntimeException("Cannot read document from CMIS", e);
    		} finally {
    			session.clear();
    		}
    	}
    
    }

  2. Business Central で、MenuDesignProjects に移動します。
  3. プロジェクトの名前をクリックしてから、Settings をクリックします。

    図10.4 設定タブ

    Selecting the settings tab
  4. DeploymentsMarshalling StrategiesAdd Marshalling Strategy をクリックします。
  5. Name フィールドに、この例の org.jbpm.integration.cmis.impl.OpenCMISPlaceholderResolverStrategy のように、カスタムドキュメントマーシャリング戦略の識別子を入力します。
  6. この例の Reflection のように、Resolver ドロップダウンメニューから関連オプションを選択します。
  7. Test をクリックして、デプロイメント記述子ファイルを検証します。
  8. Deploy をクリックして、更新されたプロジェクトをビルドおよびデプロイします。

    または、Business Central を使用していない場合は、PROJECT_HOME/src/main/resources/META_INF/kie-deployment-descriptor.xml (該当する場合) に移動し、必要な <marshalling-strategies> 要素を使用してデプロイメント記述子ファイルを編集します。

    カスタムドキュメントマーシャリング戦略を使用したデプロイメント記述子ファイルの例

    <deployment-descriptor
        xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <persistence-unit>org.jbpm.domain</persistence-unit>
      <audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
      <audit-mode>JPA</audit-mode>
      <persistence-mode>JPA</persistence-mode>
      <runtime-strategy>SINGLETON</runtime-strategy>
      <marshalling-strategies>
        <marshalling-strategy>
          <resolver>reflection</resolver>
          <identifier>
            org.jbpm.integration.cmis.impl.OpenCMISPlaceholderResolverStrategy
          </identifier>
        </marshalling-strategy>
      </marshalling-strategies>

  9. カスタムの場所に保存されたドキュメントをフォームおよびプロセスに添付できるようにするには、関連するプロセスでドキュメント変数を作成し、Business Central でそのドキュメント変数にタスクの入力と出力をマッピングします。

10.4.2. ビジネスプロセスでのドキュメント変数の作成

ドキュメントマーシャリング戦略を設定したら、関連プロセスでドキュメント変数を作成して、ドキュメントをヒューマンタスクにアップロードし、Business Central の Process Instances ビューにドキュメントを表示できるようにします。

前提条件

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. プロジェクト名をクリックしてアセットビューを開き、ビジネスプロセス名をクリックします。
  3. キャンバスをクリックし、ウィンドウの右側にある diagram properties をクリックして、Diagram properties パネルを開きます。
  4. Process Data を展開し、 6176 をクリックして、以下の値を入力します。

    • Name: document
    • Custom Type: 1 つのドキュメントの場合は org.jbpm.document.Document、複数のドキュメントの場合は org.jbpm.document.DocumentCollection

10.4.3. ドキュメント変数へのタスクの入力と出力のマッピング

タスクフォーム内の添付ファイルを表示または変更する場合は、タスクの入力および出力内に割り当てを作成します。

前提条件

  • 1 つ以上のユーザータスクを持つビジネスプロセスアセットを含むプロジェクトがある。

手順

  1. Business Central で、MenuDesignProjects に移動します。
  2. プロジェクト名をクリックしてアセットビューを開き、ビジネスプロセス名をクリックします。
  3. ユーザータスクをクリックし、ウィンドウの右側にある diagram properties をクリックして Diagram properties パネルを開きます。
  4. Implementation/Execution を展開し、Assignments の横の btn assign をクリックして、Data I/O ウィンドウを開きます。
  5. Data Inputs and Assignments の横の Add をクリックして、以下の値を入力します。

    • Name: taskdoc_in
    • Data Type: 1 つのドキュメントの場合は org.jbpm.document.Document、複数のドキュメントの場合は org.jbpm.document.DocumentCollection
    • Source: document
  6. Data Outputs and Assignments の横の Add をクリックし、以下の値を入力します。

    • Name: taskdoc_out
    • Data Type: 1 つのドキュメントの場合は org.jbpm.document.Document、複数のドキュメントの場合は org.jbpm.document.DocumentCollection
    • Target: document

    Source および Target フィールドには、前に作成したプロセス変数の名前が含まれています。

  7. Save をクリックします。

第11章 詳細にわたるプロセスの概念およびタスク

11.1. ビジネスプロセスで Decision Model and Notation (DMN) サービスを呼び出す

Decision Model and Notation (DMN) を使用して、Business Central の意思決定要件ダイアグラム (DRD) でデシジョンサービスを描画を使ってモデル化し、Business Central のビジネスプロセスの一環としてそのDMN サービスを呼び出すことができます。ビジネスプロセスは、DMN サービスを識別し、DMN 入力とビジネスプロセスプロパティー間でビジネスデータをマッピングすることにより、DMN サービスと対話します。

例として、この手順では、列車の経路ロジックを定義する TrainStation プロジェクトの例を使用します。このサンプルプロジェクトには、経路決定ロジック用に Business Central で設計された以下のデータオブジェクトと DMN コンポーネントが含まれています。

Train オブジェクトの例

public class Train {

     private String departureStation;

     private String destinationStation;

     private BigDecimal railNumber;

     // Getters and setters
}

図11.1 Compute Rail DMN モデルの例

dmn execution graph

図11.2 Rail DMN デシジョンテーブルの例

dmn execution expression

図11.3 tTrain DMN データタイプの例

dmn execution data type

Business Central での DMN モデルの作成方法に関する詳細は、『DMN モデルを使用したデシジョンサービスの作成』を参照してください。

前提条件

  • 必要なすべてのデータオブジェクトと DMN モデルコンポーネントは、プロジェクトで定義済みである。

手順

  1. Business Central で、MenuDesignProjects に移動して、プロジェクト名をクリックします。
  2. DMN サービスを呼び出すビジネスプロセスアセットを選択または作成します。
  3. プロセスデザイナーで、左側のツールバーを使用して通常どおりに BPMN コンポーネントをドラッグアンドドロップし、ビジネスプロセスロジック、接続、イベント、タスク、またはその他の要素全体を定義します。
  4. ビジネスプロセスに DMN サービスを組み込むには、左側のツールバーまたは開始ノードオプションから Business Rule タスクを追加し、プロセスフローの関連する場所にタスクを挿入します。

    この例では、以下の Accept Train ビジネスプロセスは、DMN サービスを Route To Rail ノードに組み込みます。

    図11.4 DMN サービスを使用した Accept Train ビジネスプロセスの例

    dmn execution business process
  5. DMN サービスに使用するビジネスルールタスクノードを選択し、プロセスデザイナーの右上隅にある Diagram properties をクリックしてから、Implementation/Execution で、以下のフィールドを定義します。

    • Rule Language: DMN を選択します。
    • Namespace: DMN モデルファイルから一意の名前空間を入力します。例: https://www.drools.org/kie-dmn
    • Decision Name: 選択したプロセスノードで呼び出す DMN デシジョンノードの名前を入力します。例: Rail
    • DMN Model Name: DMN モデル名を入力します。例: Compute Rail

      重要

      root ノードを使用する場合には、NamespaceDMN Model Name フィールドに DMN ダイアグラムと同じ BPMN の値で構成されるようにします。

  6. Data AssignmentsAssignments 配下で、Edit アイコンをクリックし、DMN の入力および出力データを追加して、DMN サービスとプロセスデータ間のマッピングを定義します。

    この例の Route To Rail DMN サービスノードの場合、DMN モデルの入力ノードに対応する Train の入力割り当てを追加し、DMN モデルのデシジョンノードに対応する Rail の出力割り当てを追加します。Data Type は、DMN モデルでそのノードに設定したタイプに一致する必要があり、Source および Target の定義は、指定されたオブジェクトに関連する変数またはフィールドです。

    図11.5 Route To Rail DMN サービスノードの入力および出力マッピングの例

    dmn execution io mapping
  7. Save をクリックして、入力および出力データを保存します。
  8. 完了した DMN サービスの処理方法に応じて、ビジネスプロセスの残りを定義します。

    この例では、Diagram propertiesImplementation/ExecutionOn Exit Action の値が以下のコードに設定され、Route To Rail DMN サービスの完了後にレール番号を保存します。

    On Exit Action のサンプルコード

    train.setRailNumber(rail);

    レール番号が計算されない場合、プロセスは、以下の条件式で定義された No Appropriate Rail 終了エラーノードに到達します。

    図11.6 No Appropriate Rail 終了エラーノードの条件の例

    dmn execution negative condition

    レール番号が計算されると、プロセスは、以下の条件式で定義された Accept Train スクリプトタスクに到達します。

    図11.7 Accept Train スクリプトタスクノードの条件の例

    dmn execution positive condition

    Accept Train スクリプトタスクは、Diagram propertiesImplementation/ExecutionScript で以下のスクリプトも使用して、列車のルートと現在のレールに関するメッセージを出力します。

    com.myspace.trainstation.Train t =
        (com.myspace.trainstation.Train) kcontext.getVariable("train");
    System.out.println("Train from: " + t.getDepartureStation() +
                       ", to: " + t.getDestinationStation() +
                       ",  is on rail: " + t.getRailNumber());
  9. 組み込まれた DMN サービスでビジネスプロセスを定義した後、プロセスデザイナーでプロセスを保存してプロジェクトをデプロイし、対応するプロセス定義を実行して DMN サービスを呼び出します。

    この例では、 TrainStation プロジェクトをデプロイし、対応するプロセス定義を実行するときに、Accept Train プロセス定義のプロセスインスタンスフォームを開いて departure station および destination station フィールドを設定して実行をテストします。

    図11.8 Accept Train プロセス定義のプロセスインスタンスフォームの例

    dmn execution process instance form

    プロセスが実行されると、サーバーログに指定した列車のルートを示すメッセージが表示されます。

    Accept Train プロセスのサーバーログ出力の例

    Train from: Zagreb, to: Belgrade,  is on rail: 1

第12章 関連資料

付録A バージョン情報

本書の最終更新日: 2020 年 9 月 8 日 (木)

法律上の通知

Copyright © 2020 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.