本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

ビジネス・プロセス・マネジメントのための Bonita: 第 2 回 フォームと変数を構成する

BPM アプリケーションにユーザー・インターフェースを実装する

Bilal Siddiqui, Freelance consultant
Bilal Siddiqui は、電気工学エンジニア、XML コンサルタント、そして e-business の簡易化を専門とする会社、WaxSys の共同設立者でもあります。1995年にパキスタンのラホールにある University of Engineering and Technology を卒業して電子工学技術の学位を取得した後、産業用制御システムを対象としたソフトウェア・ソリューションの設計を始めました。その後、XML に転向し、C++ のプログラミング経験を生かして Web ベースや Wap ベースの XML 処理ツール、サーバー・サイドの構文解析ソリューション、そしてサービス・アプリケーションを作成しました。テクノロジー・エバンジェリストである彼が書いた技術書は、頻繁に発行されています。

概要: Java™ をベースとしたオープンソースのビジネス・プロセス・マネジメント (BPM) ツールの 1 つ、Bonita Open Solution では、Java コードを 1 行も作成することなく、ビジネス・ワークフローをモデル化、構成、実行することができます。この記事は、ホテルの宿泊予約ワークフローを Bonita を使用して設計する手順を説明する 2 回連載の第 2 回です。今回は第 1 回での作業を引き継ぎ、ワークフローに必要な変数を構成します。そしてユーザーとの対話用フォームを設計し、そのフォームをデータベースとレポート作成エンジンに接続します。すべての構成作業が完了したら、最後にこの宿泊予約プロセスの実際の動作をテストします。

このシリーズの他の記事を見る

日付:  2010年 11月 02日
レベル:  中級 この記事の原文:  英語
アクティビティー: 5053 ビュー
お気軽にご意見・ご感想をお寄せください: 


この 2 回の連載の第 1 回目の記事では、BPMN (Business Process Modeling Notation) とオープンソースの Java ワークフロー・ツールである Bonita オープン・ソリューションを紹介し、Bonita を使ってホテルの宿泊予約ワークフローを設計する作業を開始しました。連載 2 回目となるこの記事では、ワークフローのデータを格納する変数を構成し、宿泊予約ワークフローでユーザーと対話するためのフォームを設計します。その後、ワークフローを PostgreSQL データベースと JasperReports レポート作成エンジンに接続して、宿泊予約の情報をデータベースから読み取ってレポートを生成できるようにします。記事の最後では、ワークフローを実行して宿泊予約プロセスの実際の動作をテストします。

Bonita での単純なフォームの設計

Bonita を起動して、第 1 回の最後で保存した RoomBookingDiagram_1.0.proc ファイルを開いてください (このファイルは、記事に付属のソース・コードの「ダウンロード」セクションにも用意されています)。ワークフローには、「EnterRoomInformation」、「CheckRoomAvailability」、そして「BookRoom」という 3 つのアクティビティーが含まれています (図 1 を参照)。


図 1. Bonita での宿泊予約ワークフロー
Bonita での宿泊予約ワークフローのスクリーン・ショット

次のステップは、「EnterRoomInformation」アクティビティーに必要となる単純なフォームを設計することです。このフォームは図 2 のように表示されます。


図 2. 単純なデータ入力フォーム
Bonita の単純なデータ入力フォームのスクリーン・ショット

図 2 のフォームには、フォームのタイトル (EnterRoomInformation)、「Type of room required (希望の部屋タイプ)」というラベルのドロップダウン・リスト、そして「Check Room Availability (部屋の空き状況を確認)」という名前のボタンがあります。その他に、このフォームには Bonita のロゴなどのグラフィック要素もあります。これらのグラフィック要素は、Bonita の標準テンプレートにあらかじめ組み込まれているものです (Bonita ではカスタム・テンプレートを使用することもできますが、簡単のため、この記事では標準テンプレートを使用します)。

新規フォームを作成する

EnterRoomInformation」アクティビティー用のフォームを新規に作成するには、まず始めにアクティビティーをクリックして、このアクティビティーのプロパティーを「Details (詳細)」ウィンドウに表示します。「Details (詳細)」ウィンドウの「Forms (フォーム)」タブをクリックし、このタブで「Add (追加)」ボタンをクリックすると、「Create a new Form (新規フォームの作成)」ダイアログが開きます (図 3 を参照)。


図 3. 新規フォームを作成するためのダイアログ
新規データ入力フォームを作成するために使用する Bonita ダイアログのスクリーン・ショット

図 3 を見ると、「Name (名前)」フィールドには Bonita が自動的に新規フォームの名前として、「EnterRoomInformation」を設定したことがわかります。ダイアログには「Description (説明)」テキスト・ボックスもあり、ここに、フォームの説明を入力できるようになっています。このフォームには例えば、「A form showing a drop-down list so that the receptionist can choose the type of room required by the customer (フロント係がドロップダウン・リストを表示して、顧客が希望している部屋のタイプを選択するためのフォーム)」と入力することができます。

「Description (説明)」テキスト・ボックスのすぐ下には、「Add widgets based on... (基準を選択してウィジェットを追加…)」セクションがあります。このセクションには、「Select All (すべて選択)」と「Unselect All (すべて選択解除)」というラベルの 2 つのボタン、そしてボタンの下に「isRequiredRoomTypeAvailable」というラベルのチェック・ボックスがあります。デフォルトで選択されるこのチェック・ボックスは、第 1 回の「部屋の空き状況フラグをワークフローに追加する」セクションで構成した isRequiredRoomTypeAvailable 変数を表します。

フォーム設計での Bonita による変数の使用方法

第 1 回で説明したように、isRequiredRoomTypeAvailable 変数は実際にはフラグであり、「CheckRoomAvailability」アクティビティーによって設定されます。ワークフローはこのフラグの設定によって、「BookRoom」アクティビティーを実行できるか、または制御を「EnterRoomInformation」アクティビティーに戻さなければならないかどうかを判別します。

ここで設計している「EnterRoomInformation」フォームには 1 つのフィールド (「Type of room required (希望の部屋タイプ)」という名前のドロップダウン・リスト) しかないので、このフォームの設計に isRequiredRoomTypeAvailable 変数 (つまり、フラグ) は必要ないと推定することができます。そうなると、「EnterRoomInformation」フォームの「Create a new Form (新規フォームの作成)」ダイアログにはなぜ、この変数がチェック・ボックスとして示されたのか疑問に思うことでしょう。

通常、Java 言語でフォームを設計して実装する際には、フォーム内の各フィールド (テキスト・ボックスやドロップダウン・リストなど) がアプリケーション・データを格納する Java オブジェクトに関連付けられます。一般に「モデル Bean」と呼ばれるこれらのオブジェクトは主に、大抵の Java プログラマーにとってお馴染みの MVC (Model-View-Controller) アーキテクチャーで使用されます (「参考文献」を参照)。Bonita ではこれと同じ概念を使用してフィールドをプロセス変数に関連付けて、プロセス変数から直接、簡単にフォームを作成できるようにします。つまり、Bonita は単純に、ユーザーが選択する変数のそれぞれに対応したフィールドをすべて含めたデフォルト・フォームを作成します。この方法を使えば、ユーザーが必要に応じて編集および調整できるフォームを手っ取り早く用意することができます。

isRequiredRoomTypeAvailable はグローバル変数なので、宿泊予約ワークフロー全体のコンテキストでも、ワークフローの個々のアクティビティーでも有効です。さらに、記事のこれまでの作業では、ワークフローにこれ以外の変数は何も宣言していません。そのため、Bonita はこの唯一の変数を「EnterRoomInformation」フォームを作成するために使用できると見なし、フォームを設計するために使用できる変数リストに isRequiredRoomTypeAvailable グローバル変数を含めたというわけです。

この時点で「Create a new Form (新規フォームの作成)」ダイアログの一番下にある「Finish (完了)」ボタンをクリックしたとすると、Bonita は isRequiredRoomTypeAvailable 変数に対応するフィールドを組み込んだフォームを作成することになります。けれども、宿泊予約ワークフローのビジネス・ロジックからわかるように、isRequiredRoomTypeAvailable 変数は「EnterRoomInformation」フォームの設計には必要ありません。したがって、「Create a new Form (新規フォームの作成)」ダイアログの isRequiredRoomTypeAvailable 変数の隣にあるチェック・ボックスのチェックを外してから、「Finish (完了)」ボタンをクリックしてください。すると、Bonita によって空の「EnterRoomInformation」フォームが構成されます (図 4 を参照)。


図 4. 「EnterRoomInformation」アクティビティーのために新しく構成された空のフォーム
「EnterRoomInformation」アクティビティー用に新しく構成された空のフォームを表示する Bonita のスクリーン・ショット

ここで、「Type of room required (希望の部屋タイプ)」フィールドの変数を構成する必要があります。この変数には選択可能な部屋のタイプがすべて保持されるようにして、顧客が希望している部屋のタイプをフロント係が選択できるようにしなければなりません。この変数には、TypesOfRoomsAvailable という名前を付けることにします。「EnterRoomInformation」フォームの「Type of room required (希望の部屋タイプ)」フィールドは、この TypesOfRoomsAvailable 変数を使用して選択可能な各種部屋タイプを取得することになります。

選択肢のリストを格納するための変数を構成する

TypesOfRoomsAvailable 変数は、「EnterRoomInformation」フォーム以外のフォームでは必要ありません。したがって、これはローカル変数ということになります。

TypesOfRoomsAvailable 変数の作成を開始するには、Bonita のホワイトボード (設計ビュー) で「EnterRoomInformation」をクリックして、「Details (詳細)」ウィンドウに「EnterRoomInformation」アクティビティーの詳細を表示します。次に「Details (詳細)」ウィンドウの「Data (データ)」タブをクリックし、このタブに表示されている「Add (追加)」ボタンをクリックしてください。この操作によって表示されるのは、「Add a new variable (新規変数の追加)」ダイアログです。このダイアログは、第 1 回の図 9 に示したダイアログ (isRequiredRoomTypeAvailable グローバル変数を構成するために使用したダイアログ) と同様に、「Name (名前)」(必須)、「Description (説明)」、「Data type (データ型)」、「Default value (デフォルト値)」といったフィールドがあります。「Name (名前)」フィールドには「TypesOfRoomsAvailable」と入力し、「Description (説明)」テキスト・ボックスには「A variable to hold the different types of rooms available in the hotel (ホテルで選択可能な部屋のタイプを保持するための変数)」と入力します (図 5 を参照)。


図 5. 新しい変数を追加するためのダイアログ
新しい変数を追加するために使用する Bonita ダイアログのスクリーン・ショット

図 5 の「Data type (データ型)」フィールドに注目してください。第 1 回の図 9 で構成した isRequiredRoomTypeAvailable 変数には、データ型として「Boolean (ブール値)」を選択しました。isRequiredRoomTypeAvailable 変数はフラグであり、値は true または false になるからです。一方、TypesOfRoomsAvailable 変数には選択肢 (選択可能な部屋のタイプ) のリストが必要です。したがって、「Data type (データ型)」フィールドのドロップダウン・リストからは、「List of options (選択肢のリスト)」を選択します。

List of options (選択肢のリスト)」をデータ型として選択するとすぐに、「Add a new variable (新規変数の追加)」ダイアログの下の部分に 3 つのフィールド (「Name (名前)」、「Description (説明)」、「List (リスト)」) と 4 つのボタン (「Add (追加)」、「Up (上へ)」、「Down (下へ)」、「Remove (削除)」) が追加されます (図 6 を参照)。


図 6. 新規変数を追加するためのダイアログ (「List of options (選択肢のリスト)」を「Data type (データ型)」として選択した場合に追加されるフィールドが表示された状態)
Bonita で新規変数を追加するためのダイアログ (「List of options (選択肢のリスト)」を「Data type (データ型)」として選択した場合に追加されるフィールドが表示された状態) のスクリーン・ショット

Bonita がこれらのフィールドを追加する理由は、選択可能な実際の部屋のタイプがわからなければ、部屋のタイプのリストを TypesOfRoomsAvailable 変数に関連付けることができないためです。

図 6 を見るとわかるように、「Name (名前)」フィールドと「List (リスト)」フィールドには、必須フィールドであることを示すアスタリスクが付いています。これは、値のリストに名前を付けて、リストを再利用できるようにするための Bonita の機能です。この機能により、あとでこのリストを他の変数にも再利用できるようになります。

「Name (名前)」フィールドには「ListOfRoomTypes」と入力し、フィールドの説明として「These are the types of rooms available (選択可能な部屋のタイプ)」と入力します。次に、リストに実際の値を入力するために「Add (追加)」ボタンをクリックします。これによって表示される「Add an item (項目の追加)」ダイアログ (図 7 を参照) で、部屋のタイプを入力することができます (一度に 1 つの部屋タイプを入力します)。


図 7. 「Data type (データ型)」の「List of options (選択肢のリスト)」に値を追加するためのダイアログ
Bonita で「Data type (データ型)」の「List of options (選択肢のリスト)」に値を追加するためのダイアログのスクリーン・ショット

ここでは、リストに含める部屋のタイプとして 2 つだけ値を入力します。まず、「Add an item (項目の追加)」ダイアログの「Item name (項目名)」フィールドに「Single (シングル)」と入力して、「OK」をクリックしてください。すると、この値が図 6 の「Add a new variable (新規変数の追加)」ダイアログの「List (リスト)」テキスト・ボックスに表示されるはずです。もう一度「Add (追加)」ボタンをクリックして、今度は「Item name (項目名)」フィールドに「Double」と入力して「OK」をクリックします。「Add a new variable (新規変数の追加)」ダイアログで必要な作業はこれだけです。図 8 に丸で囲んで示されている「OK」ボタンをクリックしてください。


図 8. 構成が完了した TypesOfRoomsAvailable 変数
構成が完了した TypesOfRoomsAvailable 変数を示す Bonita のスクリーン・ショット

「Add a new variable (新規変数の追加)」ダイアログの一番下にある「Finish (完了)」ボタンをクリックすると、ダイアログが閉じて、「EnterRoomInformation」アクティビティーの「Data (データ)」タブに TypesOfRoomsAvailable 変数が表示されます (図 9 を参照)。


図 9. 「EnterRoomInformation」アクティビティーに追加された TypesOfRoomsAvailable 変数
「EnterRoomInformation」アクティビティーに追加された TypesOfRoomsAvailable 変数を示すスクリーン・ショット

TypesOfRoomsAvailable 変数の構成が完了したところで、今度はこの変数を使用して、「Type of room required (希望の部屋タイプ)」ドロップダウン・リストを「EnterRoomInformation」フォームに追加する作業に取り掛かります。

新規フィールドをフォームに追加する

ホワイトボードで「EnterRoomInformation」アクティビティーが選択されている状態のまま、「Details (詳細)」ウィンドウの「Forms (フォーム)」タブをクリックします。フォームのリストに表示された「EnterRoomInformation」をクリックしてから、図 10 に丸で囲んで示されている「Edit (編集)」ボタンをクリックします。


図10. Bonita でのフォームの編集
Bonita でフォームを編集する場合の操作を示すスクリーン・ショット

新規フォームを作成する」セクションで開発した空の「EnterRoomInformation」フォームがフォーム・エディター・ウィンドウに表示されます。このウィンドウの左側にはコンポーネントのパレットがあり、右側にはフォームの設計ビューがあります。フォームの設計ビューは長方形のセルに区分されています。コンポーネントのパレットで「Select (選択)」コンポーネントをクリックして、フォームの一番上のセルにドラッグしてください (図 11 を参照)。


図 11. パレットからフォームへのコンポーネントのドラッグ
コンポーネントをパレットからフォームにドラッグする操作を示すスクリーン・ショット

「Select1」というラベルの付いた新規フィールドがフォームにドロップされます (図 12 を参照)。


図 12. フォームの設計ビューにドロップされた「Select (選択)」コンポーネント
フォームの設計ビューにドロップされた「Select (選択)」コンポーネントを示す Bonita のスクリーン・ショット

Select1」フィールドをクリックして、「Details (詳細)」ウィンドウにこのフィールドのプロパティーを表示します (図 13 を参照)。


図 13. フィールドの詳細が表示された「Details (詳細)」ウィンドウ
フィールドの詳細が表示された Bonita の「Details (詳細)」ウィンドウのスクリーン・ショット

「Name (名前)」フィールドと「Show label (ラベルの表示)」フィールドには、それぞれ「RequiredRoomType」、「Type of room required」を値として入力します。これで、新規フィールドは「Type of room required (希望の部屋タイプ)」というラベルで表示されるようになります (図 14 を参照)。


図 14. ラベルが「Type of room required (希望の部屋タイプ)」に更新されたフィールド
ラベルが「Type of room required (希望の部屋タイプ)」に更新されたフィールドのスクリーン・ショット

「Type of room required (希望の部屋タイプ)」フィールドのドロップダウン・リストには、フロント係が部屋のタイプを選択できるように、選択可能な部屋のタイプを示さなければなりません。そこで次のステップとなるのが、ドロップダウン・リストに選択可能な部屋のタイプを取り込むことです。それには、「選択肢のリストを格納するための変数を構成する」セクションで構成した、TypesOfRoomsAvailable 変数を使用します。

Bonita の変数をフォーム上のフィールドに関連付ける

「Type of room required (希望の部屋タイプ)」フィールドがフォームの設計ビューで選択されている状態で、「Details (詳細)」ウィンドウの「Data (データ)」タブをクリックします。このタブには、「Available Values (使用可能な値)」、「Initial value (初期値)」、「Expression (式)」、そして「save to (保存先)」という 4 つのフィールドがあります (図 15 を参照)。これらのフォーム・フィールドを使って、変数をフィールドに関連付けます。


図 15. 変数をフィールドに関連付けるための「Data (データ)」タブ
変数をフィールドに関連付けるために使用する「Data (データ)」タブのスクリーン・ショット

「Available Values (使用可能な値)」フィールドのドロップダウン・リストをクリックし、TypesOfRoomsAvailable 変数を値として選択します。この操作により、「EnterRoomInformation」フォームの「Type of room required (希望の部屋タイプ)」フィールドのドロップダウン・リストには部屋のタイプが取り込まれることになります。

次は、「Initial value (初期値)」フィールドのドロップダウン・リストをクリックして、「Single (シングル)」を選択します。これで、「EnterRoomInformation」フォームがユーザーに表示されるときに「Type of room required (希望の部屋タイプ)」フィールドにデフォルトで選択される初期値として、「Single (シングル)」が設定されます。この時点で、「Data (データ)」タブの内容は図 16 のようになっているはずです。


図 16. デフォルトの初期値を選択した後の「RequiredRoomType」の「Data (データ)」タブ
「Type of room required (希望の部屋タイプ)」フィールドの「Data (データ)」タブを示す Bonita のスクリーン・ショット。ここには typesOfRoomsAvailable 変数と、「Initial value (初期値)」フィールドで選択されたデフォルト値が示されています。

「Data (データ)」タブの「Expression (式)」フィールドでは、「save to (保存先)」フィールドに指定された変数の値を評価するときに Bonita が使用する式を作成することができます。この機能は、ユーザーの入力を処理してから変数に保存したいという場合に役立ちます。けれども、この例ではユーザーの入力を処理する必要はないので、「Expression (式)」フィールドはデフォルト値のままにしておいてください。

ワークフローでの次のアクティビティーとなる「CheckRoomAvailability」は、ホテルの宿泊予約データベースに対して部屋の空き状況を問い合わせるクエリーを実行します。そのためには、顧客が希望している部屋のタイプをこのアクティビティーが認識していなければなりません。ユーザーの入力は、ワークフロー・レベルで定義したテキスト型の変数に格納する必要があるので、requiredRoomType という名前の変数を作成し、そのデータ型を Text に設定します。そのための手順は、「選択肢のリストを格納するための変数を構成する」セクションで説明した手順と同じです。作成した requiredRoomType 変数は、「save to (保存先)」フィールドのドロップダウン・リストに含まれるようになります。この値をドロップダウン・リストから選択すると同時に、「save to (保存先)」フィールドの左側にあるチェック・ボックスも選択された状態になります (図 17 を参照)。これは Bonita が、「save to (保存先)」フィールドにユーザーの入力を保存するための変数の名前が設定されたことを認識したからです。


図 17. 「RequiredRoomType」フィールドの「Data (データ)」タブに表示された「Expression (式)」および「save to (保存先)」フィールド
「RequiredRoomType」フィールドの「Data (データ)」タブに表示された「Expression (式)」および「save to (保存先)」フィールドのスクリーン・ショット

以上の作業で、「EnterRoomInformation」フォームのフィールドと変数を構成する作業は完了です。次は、フロント係がフォーム上で、顧客が希望している部屋のタイプを選択した後でクリックすることになるボタンを構成します。

Bonita のフォームのボタンを扱う

「次へ」ボタンと「戻る」ボタン

図 18 に示されている「Field Type (フィールド・タイプ)」フィールドのドロップダウン・リストでは「Submit Button (「送信」ボタン)」が選択されていますが、これ以外にも、「Next Button (「次へ」ボタン)」と「Previous Button (「戻る」ボタン)」という選択肢があります。「次へ」と「戻る」のようなボタンを使用するのは、1 つのフォームには収まりきらないほどの大量のデータをユーザーから収集する必要がある場合です。その場合には、データを複数のフォームに分割し、それぞれのフォーム上に「次へ」ボタンと「戻る」ボタンを構成します。前後のフォームへのナビゲートは、Bonita が内部で管理します。

Bonita に用意されているボタンのタイプは、「送信」、「次へ」、「戻る」の 3 つです。「送信」タイプのボタンは、処理対象のフォームのデータを送信します。つまり、ユーザーがこのタイプのボタンをクリックすると、フォーム・データが送信されてワークフローの次のアクティビティーが実行されることになります。「EnterRoomInformation」フォームの設計ビューを見ると、フォームの一番下に「Submit (送信)」ボタンがあるはずです。新規フォームの作成中に、Bonita はこのボタンを自動的に配置します。したがって必要な作業は、ボタンのラベルを「Submit (送信)」から「Check Room Availability (部屋の空き状況の確認)」に変更するだけでよいのです。残りの構成は、Bonita がすでに完了しています。

設計ビューで「Submit (送信)」ボタンをクリックして、「Details (詳細)」ウィンドウにボタンのプロパティーを表示してください (図 18 を参照)。


図 18. 「Submit (送信)」ボタンのプロパティーが表示された「Details (詳細)」ウィンドウ
「Submit (送信)」ボタンのプロパティーが表示された「Details (詳細)」ウィンドウのスクリーン・ショット

「Details (詳細)」ウィンドウの「Show label (ラベルの表示)」フィールドに、「Check Room Availability (部屋の空き状況の確認)」と入力します。これでボタンのラベルが変更されるので、「EnterRooomInformation」フォームの構成は完了です。


Bonita と PostgreSQL の接続

PostgreSQL の使用方法

PostgreSQL システムのセットアップ手順、そしてこのデータベースに宿泊予約ワークフローで使用するサンプル・データを取り込む手順については、記事のソース・コードのダウンロードに含まれている Readme.txt ファイルを参照してください。

CheckRoomAvailability」アクティビティーは、顧客が希望している部屋のタイプの空き状況を調べるために、ホテルの宿泊予約データベースに問い合わせを行います。この例で宿泊予約データを格納するために使用するのは、よく使われているオープンソースのデータベース、PostgreSQLです。Bonita には多数のコネクターが用意されており、これらのコネクターを構成することで Bonita を外部アプリケーションに接続できるようになります。これから、Bonita の「PostgreSQL」コネクターを使用して「CheckRoomAvailability」アクティビティーをホテルの宿泊予約データベースに接続します。

Bonita の「PostgreSQL」コネクターを構成する手順には、以下のステップがあります。

  1. 「PostgreSQL」コネクターを「CheckRoomAvailability」アクティビティーに追加します。
  2. requiredRoomType 変数を使用した SQL クエリーを作成します。
  3. SQL クエリーの出力をワークフロー・レベルの isRequiredRoomTypeAvailable 変数に保存し、後で他の BPM 要素がこの変数を使って決定を行えるようにします。

Bonita の「PostgreSQL」コネクターを構成する

ホワイトボードで「CheckRoomAvailability」アクティビティーを選択し、このアクティビティーのプロパティーを「Details (詳細)」ウィンドウに表示します。「Details (詳細)」ウィンドウで、「Connectors (コネクター)」タブをクリックします (図 19 を参照)。


図 19. 「CheckRoomAvailability」アクティビティーの「Connectors (コネクター)」タブ
「CheckRoomAvailability」アクティビティーの「Connectors (コネクター)」タブのスクリーン・ショット

「Connectors (コネクター)」タブにはまだ、「CheckRoomAvailability」アクティビティーのコネクターが 1 つもない状態です。「PostgreSQL」コネクターを追加するため、「Add (追加)」ボタンをクリックして「Select a connector (コネクターの選択)」ダイアログを開きます (図 20 を参照)。


図 20. アクティビティーへの「PostgreSQL」コネクターの追加
アクティビティーに「PostgreSQL」コネクターを追加するためのダイアログのスクリーン・ショット

「PostgreSQL」コネクターは、コネクター・リストの「Database (データベース)」項目の配下にあります。「Database (データベース)」をダブルクリックし、表示される選択肢の中から「PostgreSQL - Execute a query on a PostgreSQL DB (PostgreSQL – PostgreSQL DB でクエリーを実行)」を選択した後、「Next (次へ)」をクリックします (図 21 を参照)。


図 21. Bonita のデータベース・コネクターから選択した「PostgreSQL」データベース・コネクター
Bonita のデータベース・コネクターから選択した「PostgreSQL」データベース・コネクターを示すスクリーン・ショット

上記の操作によって、「Name the connector (コネクター名の指定)」ダイアログが表示されます (図 22 を参照)。このダイアログに、コネクターの名前と説明、そしてコネクターに起動させるイベントを入力します。


図 22. ホテルのデータベース用「PostgreSQL」コネクターのプロパティー
ホテルのデータベース用「PostgreSQL」コネクターのプロパティーを示すスクリーン・ショット

「Name (名前)」フィールドと「Description (説明)」フィールドに、それぞれ「HotelDB」、「PostgreSQL connector for the CheckRoomAvailability activity (「CheckRoomAvailability」アクティビティー用の「PostgreSQL」コネクター)」と入力します。

「Select event (イベントの選択)」フィールドでは、このコネクターが「CheckRoomAvailability」アクティビティーの開始時または終了時のどちらに必要であるかを選択することができます。宿泊予約ワークフローでの「CheckRoomAvailability」アクティビティーはデータベースに対してクエリーを実行するだけなので、コネクターをアクティビティーの開始時に起動するか、終了時に起動するかは問題になりません。したがって、「Select event (イベントの選択)」フィールドはデフォルト値のままにします。

「Name the connector (コネクター名の指定)」ダイアログの最後にあるフィールドは、「If connector fails... (コネクターで問題が発生した場合…)」です。このフィールドのドロップダウン・リストからは、データベースとの通信で問題が発生した場合に、エラーを発生させるか、問題を無視するか、のいずれかを選択することができます。簡単のため、「If connector fails... (コネクターで問題が発生した場合…)」フィールドもデフォルト値のままにしてください。したがって、データベースと接続するためのコネクターが正常に動作しない場合には、エラーが発生することになります。

Next (次へ)」ボタンをクリックすると次に表示されるのは、データベース接続情報を入力するためのダイアログです。入力する情報には、データベース名、ユーザー名、パスワード名、データベースをホストするサーバーの名前とポートが含まれます。これらの値はデータベースそれぞれのセットアップによって異なります。図 23 に示されているのは、私が使用した値です。


図 23. PostgreSQL データベース接続ダイアログ
PostgreSQL データベース接続ダイアログを示す Bonita のスクリーン・ショット

データベース接続情報の入力が終わったら、「Next (次へ)」ボタンをクリックします。

データベースからデータを読み取るための SQL クエリーを指定する

現時点で、クエリー・ダイアログが表示されているはずです (図 24 を参照)。このダイアログでは、部屋の空き状況をチェックするための SQL クエリーを入力することができます。


図 24. SQL クエリーの入力
SQL クエリーを入力するダイアログのスクリーン・ショット

ご存知のとおり、ユーザーが選択したデータを保持するのは requiredRoomType 変数です。したがって、SQL クエリーでは requiredRoomType 変数を使用して、該当するタイプの部屋の空き状況をチェックしなければなりません。「Query (クエリー)」テキスト・ボックスには、以下のクエリーを入力します。

Select "Availability" from "RoomInfo" WHERE "RoomType" = '${requiredRoomType}' AND 
    "Availability" = TRUE

このクエリーは、PostgreSQL の RoomInfo テーブルから availability 列が true となっているすべてのレコードを抽出します。

Bonita は ${requiredRoomType}requiredRoomType 変数の値を代入してから、このクエリーを実行します。例えば、フロント係がフォーム上で、顧客が希望している部屋のタイプとして「Single (シングル)」を選択したとすると、実際に実行される SQL クエリーは以下のようになります。

Select "Availability" from "RoomInfo" where "RoomType" = 'Single' AND "Availability" 
    = TRUE

このようにして Bonita では、実行時に決定される動的な SQL クエリーを作成することができます。

SQL クエリーの実行結果をワークフロー・レベルの変数に取り込む

SQL クエリーの実行結果は、第 1 回でグローバル変数として構成した isRequiredRoomTypeAvailable 変数に保存する必要があります。「Next (次へ)」ボタンをクリックすると、「Execute a query on a PostgreSQL DB (PostgreSQL DB でのクエリーの実行)」ダイアログが表示されます。ここで、SQL クエリーの実行結果を Bonita の変数に格納するように設定することができます。「Connector output (コネクター出力)」コンボ・ボックスに「rowSet.getValues().asBoolean()」と入力し、「Destination variable (宛先変数)」ドロップダウン・リストから「isRequiredRoomTypeAvailable」を選択します (図 25 を参照)。


図 25. SQL クエリーの実行結果を Bonita の変数に格納するための設定
SQL クエリーの実行結果を Bonita の変数に格納するための設定をする画面のスクリーン・ショット

この設定により、rowSet.getValues().asBoolean() メソッドは、顧客が希望しているタイプの部屋を予約できる場合には、isRequiredRoomTypeAvailable 変数の値として true を設定することになります。

以上の作業でワークフローはデータベースに接続されたので、ワークフローを構成する手順に進むことができます。ワークフローの構成手順では、顧客の情報を収集して部屋を予約するための宿泊予約フォームを設計します。手順ではまず、顧客情報を格納するための CustomerNamePhoneNumber、および BookingDate というローカル変数を定義し、続いて「Create a new form (新規フォームの作成)」画面 (図 3 を参照) で新しいフォームを設計します。そして最後にコネクターを構成し、宿泊予約情報をデータベースに送信する SQL クエリーを作成します。この一連の手順はすでに説明したとおりなので、フォームの作成は演習として皆さんにお任せすることにします。最終的な宿泊予約ワークフローは、記事のソース・コードに用意されている RoomBookingDiagram_2.0.proc ファイルに含まれています。


JasperReports と Bonita の統合

これまでの手順で、完全な宿泊予約ワークフローが構成されました。このワークフローを実行する方法を実演する前に、JasperReports と「EnterRoomInformation」アクティビティーを統合する方法を説明しておきます。Bonita と JasperReports の統合が BPM アプリケーションに役立つ理由は、ホテルの宿泊予約プロセスをはじめとする実際のシナリオでレポート作成機能が必要になることは珍しくないためです。しかも、JasperReports は最もよく使われているオープンソースのレポート作成エンジンの 1 つとして数えられています。

JasperReports を Bonita で使用する前に、まずは JasperReports をインストールする必要があります。ダウンロードおよびインストール手順については、JasperReports の Web サイトにアクセスしてください (「参考文献」を参照)。

EnterRoomInformation」アクティビティーと連動する JasperReports を構成するプロセスは、「Bonita と PostgreSQL の接続」セクションで実行した手順とよく似ています。ホワイトボードで「EnterRoomInformation」アクティビティーを選択し、「Connectors (コネクター)」タブをクリックして、このタブで「Add (追加)」をクリックします。この操作によって「Name the connector (コネクター名の指定)」ダイアログが表示されます。「Select a connector (コネクターの選択)」ダイアログでは、「Jasper」をダブルクリックし、表示される選択肢の中から「Create a Jasper Report from a database (データベースから Jasper レポートを作成)」を選択してください。「Name the connector (コネクター名の指定)」ダイアログではコネクターの名前として、「BookingSummaryReport」と入力します。

その後に表示されるダイアログは、「Database access information (データベース・アクセス情報)」です (図 26 を参照)。このダイアログに、JasperReports がデータベースに接続するために必要な情報を入力します。


図 26. JasperReports に必要なデータベース・アクセス情報の入力
JasperReports に必要なデータベース・アクセス情報を入力するためのダイアログのスクリーン・ショット

「Database driver (データベース・ドライバー)」フィールドには、「org.postgresql.Driver」と入力します。org.postgresql.Driver は JDBC ドライバーです。PostgreSQL データベースを使用する際には必ず、JDBC ドライバーが必要になります。図 26 に示されている他のフィールドの値は、私の構成に合わせて入力したものです。「JDBC URL」フィールドには「jdbc:postgresql://localhost:5432/hotelDB」と入力し、「User name (ユーザー名)」と「Password (パスワード)」のフィールドにはどちらも「postgres」と入力しました。

JasperReports を PostgreSQL などのリレーショナル・データベースに接続する方法についての詳細は、「参考文献」を参照してください。

Next (次へ)」ボタンをクリックして、「Report Settings (レポート設定)」ダイアログを開きます (図 27 を参照)。


図 27. JasperReports のレポート設定
JasperReports のレポート設定ダイアログを示す Bonita のスクリーン・ショット

このダイアログでは、JasperReports XML (JRXML) ファイルのパスを入力します。すべての JasperReports レポートは、JRXML ファイルとして設計されます。単純な宿泊予約の要約レポートとして、記事のソース・コードのダウンロードに CurrentBookingSummaryReport.jrxml ファイルを用意しておきました。このファイルを任意の場所にコピーして、「JRXML file path (JRXML ファイルのパス)」フィールドにはそのパスを入力してください。

「Output file path (出力ファイルのパス)」フィールドには、Bonita が宿泊予約要約レポートの PDF 版を保存する場所を指定します。「Output format (出力形式)」フィールドでは「PDF」を選択してください。これで「Finish (完了)」をクリックすると、宿泊予約要約レポートは Bonita に完全に統合されます。


宿泊予約ワークフローの実行

Bonita にはよく使われているオープンソースの Web サーバー、Jetty がバンドルされており、Bonita で構成した BPM アプリケーションをユーザーが簡単にテストできるようになっています。

宿泊予約ワークフローをテストする前に必要な作業として、PostgreSQL データベースをセットアップし、サンプル・データをまだデータベースに取り込んでいない場合は、この時点で取り込んでください。PostgreSQL のセットアップ手順、そしてアプリケーションをテストするために私が使用したサンプル・データを取り込む手順については、ソース・コードのダウンロードに含まれる Readme.txt ファイルを参照してください。

ソース・コードのダウンロードには、すべてのフォームおよび変数が設定された完成版の宿泊予約ワークフローが含まれる RoomBookingDiagram_2.0.proc も用意されています。Bonita のファイル・メニューからこのファイルを開き、Bonita のツールバーで「Run (実行)」をクリックすると、ワークフローが実行されます (図 28 を参照)。


図 28. Bonita のツールバー
Bonita のツールバーのスクリーン・ショット

Run (実行)」ボタンをクリックすると、Bonita は自動的に宿泊予約ワークフローを Web アーカイブ (WAR) ファイルにバンドルし、この WAR ファイルをデプロイして Jetty で実行します。Bonita はその後、Web ブラウザーで「EnterRoomInformation」フォームを開きます (図 29 を参照)。


図 29. 「EnterRoomInformation」フォーム
Web ブラウザーで開かれた「EnterRoomInformation」フォームのスクリーン・ショット

ご覧のように、「Type of room required (希望の部屋タイプ)」ドロップダウン・リストにはデフォルト値として「Single (シングル)」が選択されています。「Single (シングル)」の代わりに「Double (ダブル)」を選択して「Check Room Availability (部屋の空き状況を確認)」ボタンをクリックしてみてください。すると同じ「EnterRoomInformation」フォームが再び表示されます。これは、サンプル・データではダブル・ルームに空きがないためです。

今度は「Single (シングル)」をもう一度選択して、「Check Room Availability (部屋の空き状況を確認)」ボタンをクリックしてください。宿泊予約データベースに格納されているサンプル・データでは、シングル・ルームには空きがあって予約できることになっているので、図 30 に示す「BookRoom」フォームが表示されます。


図 30. 「BookRoom」フォーム
「BookRoom」フォームのスクリーン・ショット

前のステップで指定した場所を調べれば、「EnterRoomInformation」アクティビティーによって宿泊予約要約 JasperReports レポートの PDF 版が保存されていることも確認できるはずです。


まとめ

この 2 回の連載では Bonita を使用して、単純なホテルの宿泊予約ワークフローを BPM アプリケーションとして構成し、実行しました。また、このワークフローは 2 つの外部アプリケーションとインターフェースを取るようにもなっています。構成作業で使用したのは、一貫して Bonita のグラフィカル・ワークフローエディターとフォーム・エディターだけです。Java コードを作成する必要は一切ありませんでした。

外部アプリケーションとのインターフェースは、ほぼすべての BPM アプリケーションに必要です。実際のほとんどの BPM アプリケーションでは、複数の BPM エンジンが必要になるだけでなく、BPM 以外のアプリケーションもいくつも必要となり、そのすべてが連動しなければなりません。今のところ、BPM ツールが外部アプリケーションとインターフェースを取る方法についても、異なる BPM ツール間でインターフェースを取る方法についても、それを記述するために使用できる標準的な Java API はありません。そのため、どの BPM ツールを使用する場合にも、インターフェースを取るための何らかの仕組み (例えば Bonita のコネクター・メカニズムのようなもの) を考え出さなければなりません。標準的な Java BPM API が開発され、BPM ツールやその他のアプリケーションの機能を公開してワークフローに統合できるようにする方法がその API に規定されるようになれば、こうしたインターフェースを取る方法はシームレスなものになる可能性があります。



ダウンロード

内容ファイル名サイズダウンロード形式
BPMN, JRXML, and Readme.txt files for this articlej-bpm2.zip11KBHTTP

ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために

  • Bonita Open Solution: Bonita をダウンロードしてください。この記事では、バージョン 5.2.2 を使用しています。

  • PostgreSQL: PostgreSQL をダウンロードしてください。

  • JasperReports: JasperReports をダウンロードしてください。

議論するために

  • My developerWorks コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。

著者について

Bilal Siddiqui は、電気工学エンジニア、XML コンサルタント、そして e-business の簡易化を専門とする会社、WaxSys の共同設立者でもあります。1995年にパキスタンのラホールにある University of Engineering and Technology を卒業して電子工学技術の学位を取得した後、産業用制御システムを対象としたソフトウェア・ソリューションの設計を始めました。その後、XML に転向し、C++ のプログラミング経験を生かして Web ベースや Wap ベースの XML 処理ツール、サーバー・サイドの構文解析ソリューション、そしてサービス・アプリケーションを作成しました。テクノロジー・エバンジェリストである彼が書いた技術書は、頻繁に発行されています。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology, Open source
ArticleID=592174
ArticleTitle=ビジネス・プロセス・マネジメントのための Bonita: 第 2 回 フォームと変数を構成する
publish-date=11022010
author1-email=xml4java@yahoo.co.uk
author1-email-cc=

タグ

Help
このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。

スライダーバーを使用することで、より多く(少なく)タグを表示します。

人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。

マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。

このタグで、My developerWorks のすべてのタイプのコンテンツを見つけるために検索フィールドを使用します。人気のタグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するトップのタグを表示します。マイ・タグは、この特定のコンテンツ・ゾーン(例えば、Java テクノロジー、Linux や WebSphere など)に対するお客様ご自身のタグを表示します。