LoginSignup
1
2

More than 3 years have passed since last update.

PAMのサンプルを動かしてみよう

Last updated at Posted at 2020-12-24

PAM(Red Hat Process Automation Manager)には、いくつかのサンプルプロジェクトがあらかじめ用意されていて、すぐにその動作を試してみることができるようになっています。
PAMをインストールする手順は、こちらの記事を参照ください。

PAMの開発環境をローカルで作成して触ってみるための手順

PAMサンプルのインポート方法

Business Central(とKie Server)を起動し、Business Centralに管理者ユーザでログインしましょう。

ホーム画面で、「設計」をクリックします。
スクリーンショット.png

Spacesのページで、スペースを追加するか、もしくはデフォルトのMySpaceをクリックします。

「サンプルを試す」をクリックします。
スクリーンショット.png

サンプル一覧が表示されます。試してみたいサンプルを選択してください。
(製品バージョンによってサンプル数に違いがあります。)
スクリーンショット.png

PAMのサンプル以外にも、DMNのサンプル、Plannerのサンプルなど、いくつかのサンプルプロジェクトがあります。
PAMのサンプルは、以下3つです。

  • IT_Orders ケースマネージメントのサンプル
  • Evalutaion_Process 人事評価プロセスのサンプル(ヒューマンタスクのみ)
  • Mortgage_Process 住宅ローン承認プロセスのサンプル(ヒューマンタスクとルールタスク)

ここでは、Mortgage_Processサンプルについて解説します。

Mortgage_Process サンプルの動かし方

サンプル一覧から、Mortgage_Processを選択して、OKを押します。
サンプルプロジェクトのアセットが展開されます。
スクリーンショット.png

アセット種類の説明

複数のアセットがこのサンプルには含まれています。開いてみたらどんなものかはだいたいわかると思います。

  • フォーム  サンプルプロジェクト用のUI。Business Central上で、簡単な入力フォームを表示するためのもの。
  • データオブジェクト JavaのPOJO。ここではBusiness Central上で入力して、自動生成したものを使用している。別途実装して、jarにして参照させてもよい。
  • ビジネスプロセス プロセス定義。
  • ガイド付きデシジョンテーブル Business Central上で生成したデシジョンテーブル。別途Excelで実装してインポートしたり、jarにして参照させることも可能。

プロセス定義解説

プロセス定義にコメントいれると、こんな感じです。
スクリーンショット.png

サンプルフォームもついているので、ビルドしてデプロイすると、プロセスを動かしてみることが出来ます。
が、その前に、まず、ユーザー登録が必要です。
このプロセス定義では、4つのヒューマンタスクが登場しますが、それぞれのタスクに割り振られている担当者をあらかじめ作成し、そのユーザでログインすることで、該当タスクを実行してプロセスを進行することが可能になります。

それぞれのタスクの設定を確認してみましょう。
Business Centralでプロセス定義を開き、ヒューマンタスクをクリックして、プロパティを表示させます。
プロパティ表示は、右端のペンシルマークをクリックします。
スクリーンショット.png

たとえば、[Correct Data]タスクのアクターとグループ設定を確認してみましょう。
スクリーンショット.png

アクターは、設定無しですね。アクターは、タスクをアサインするユーザを特定の一人に指定する場合に使います。
グループに、brokerが設定されています。つまり、brokerグループに属する人であれば、だれでもこのタスクを担当可能ということです。

その他のヒューマンタスクも同様に設定を確認してみてください。以下の様になっているはずです。

タスク名 グループ
Correct Data broker
Qualify approver
Increase Down Payment broker
Final Approval manager

ということで、broker、approver,managerのグループに属するユーザが必要ということになります。
ユーザとグループの追加をしましょう。
ここでは、Business Central上でユーザとグループを追加します。これはあくまでもサンプルアプリを動かすための設定です。

ユーザとグループの設定

今回は以下のようにユーザを追加しましょう。

グループ名 ユーザ名
broker John
broker Tom
approver Mary
manager Chris

Business Centralの設定画面を開き、「ユーザ」設定画面を開き、上表の通り4名を新規追加します。
Chris以外は、ロール/グループの割当て無しで、作成します。
Chrisは、既存ロールのmanagerを割当てます。

次に、グループ、brokerとapproverを追加します。managerは、もともとロールに設定されているので、設定は不要です。(同じ名前のロールおよびグループの設定は不可)
グループ追加時に、そのグループに追加するユーザも同時に設定します。(あとから追加も可能です)

また、サンプルはBusiness Central上でログインしないと使えないため、各ユーザにはBusiness Centralを使うロールを割り当てる必要があります。
既存ロールがいくつか用意されていますが、とりあえずここでは、userロールを割り当てておきましょう。
John,Tom,Mary,Chrisに、userロールを割り当てます。

ちなみに、ここで追加した、グループやユーザの設定は、EAP_HOME/standalone/configutarion/application-****s.properties に書き込まれます。

既存ロールがそれぞれどういう役割なのかについては、製品マニュアルを参照ください。

ビルド・デプロイ

さて、サンプルプロジェクトをビルドして、Kie Serverにデプロイしましょう。
プロジェクトのページの右上の「デプロイ」をクリックすると、ビルドが行われ、Kie Serverにデプロイされます。
スクリーンショット.png

Business Centralのホーム画面に戻り、「デプロイ」メニューをクリックして、Kie Serverへのデプロイ状況を確認してみましょう。
(上部メニューの「実行サーバー」をクリックでも可)
スクリーンショッ.png

mortgage-process_1.0.0-SNAPSHOT.jarが、kieserverにデプロイされて、使える状態になっていることが確認できます。
スクリーンショット.png

サンプルプロセスを実行する

Kie Serverにデプロイされた、サンプルプロセスを動かして見ましょう。
方法としては、主に2つあります。

  • プロセスの実行方法としては、SwaggerUI等から、REST APIを直接実行する。
  • Business Centralでプロセスインスタンスをスタートさせる。

ここでは、Business Centralを使ってプロセスをスタートさせ、タスクを進めていく方法を説明します。

※ちなみに、SwaggerUIは、http://SERVER:PORT/kie-server/docsでアクセスできます。
ログインを求められたら、kie-serverロールを持つユーザでログインします。以下、画面例。

スクリーンショット.png

さて、プロセスをデプロイしたら、プロセスインスタンスを生成(≒プロセスを開始)します。
Business Centralにログインします。ここでは、プロセスの開始はどのユーザでも可能になっていますので、いずれかのユーザでログインします。
上部メニューから「プロセス定義」を選択します。
デプロイしたプロセス定義が表示されているので、右の縦ドットをクリックし、「開始」をクリックします。
スクリーンショット.png

すると、フォームが表示されます。これは、サンプルのプロセス用に作られたフォームです。(PAMでは、作成したプロセスをテスト的に動かすための簡易フォーム作成機能があります。)
住宅ローンの申請入力のフォームになっています。英語表記なのでわかりにくいですが、日本語にするとこんな感じになります。(フォームのラベルを編集すると変更できます)
スクリーンショット.png

ここにデータを入力し、「送信」ボタンを押すと、プロセスが開始されます。
このあと、この入力データ内容のValidationルールが走り、エラーの場合は、Correct Dataタスクが生成されます。
(RetractValidationというルールタスクがありますが、これは不要なオブジェクトを削除しているだけのルールです。繰り返しチェックできるようにしたのでしょうが、作りとしてはかなりイケてない気がします・・・)
スクリーンショット.png

まずは、Validationルールでエラーになるように入力してみます。
Validationルール定義を確認しましょう。まず、プロセス定義のValidationに紐付いているルール定義はどれかを確認します。
プロセス定義のValidationルールタスクのプロパティを開いて、ルールフローグループの箇所を確認します。
スクリーンショット.png

はい、ここでは、ルールフローグループに、validation[Mortgage_Process]が指定されていますね。
[]内は、プロジェクト名です。Mortgate_Processプロジェクトの中の、validationというルールフローグループのルールがここで動くということです。
ルールフローグループは、ルール定義を開けてみないと確認できないので、Mortgate_Process内のルール定義から探してみましょう。
アセット一覧表示画面で、「デシジョン」で絞って検索すると、ルール定義だけが検索できます。
スクリーンショット.png
この「Validate Down Payment」がそれっぽいですね。開いて確認してみましょう。
「モデル」タブの表記はわかりにくい(主観)ので、「ソース」タブでDRLを見ましょう。
スクリーンショット.png
ruleflow-group "validation"とありますね!
ルールタスクとそこで呼ばれるルールとの紐付けは、このルールフローグループ名で行われますので、覚えておきましょう。

ルールの中身は簡単ですね。
Application( downpayment == 0 || downpayment >= app.property.saleprice )に一致すると、エラーオブジェクトを生成するルールになっています。
つまり、頭金が0、または頭金>= 物件価格の場合は、エラーになるようです。

では、再度プロセス定義を開始して、表示されたフォームに、エラーになるように入力してみましょう。
サンプルフォームの実装は、かなりいい加減なので、数値で入れるところに文字を入れると、システムエラーになったりするので、とりあえず以下のように入れてみてください。

Down Payment: 22000
Years of amortization: 20
Name: 鈴木一郎
Annual Income: 5000
SSN: 123456789
Age of property: 5
Address of prooperty: 東京都港区
Locale:
Sales Price: 20000

入力して、「送信」ボタンを押すと、プロセスが開始されます。
コンソールログを見てみると、Validateルールに一致して、ログが表示されているはずです。
13:20:37,767 INFO [stdout] (default task-52) Executed Rule: Validate Down Payment

Business Central上では、上部メニューから「プロセスインスタンス」を選択すると、MortgageApprovalProcessのプロセスインスタンスが1つ生成されていることが確認できるはずです。
クリックして、「ログ」タブを表示すると、通過したノードが表示されているはずです。
スクリーンショット.png

Correct Dataヒューマンタスクが生成されているようなので、該当タスクが割り当てられている、brokerグループのユーザでBusiness Centralにログインしなおします。
brokerグループのユーザでログインしたら、「タスク受信箱」を開きます。タスク受信箱は、自分または自グループに割り当てられているタスク一覧が表示される場所です。
スクリーンショット.png

Correct Dataタスクが生成されているのが確認できました。
では、このタスクをクリックして、タスクを完了させましょう。
クリックすると、申請入力内容とエラー内容を表示するフォームが出ます。(下の図はラベルが日本語になってますが、ラベルを変えていなければ英語で表示されます)
スクリーンショット.png

さて、ここでまず先に、ヒューマンタスク(ユーザータスク)のライフサイクルについて理解しましょう。
BPMNでは、ヒューマンタスクのステートが定義されており、PAMでもそれに則った設計をしています。
スクリーンショット 2020-12-23 13.43.51.png
http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-bpel4people/WS-HumanTask_v1.pdf

プロセスがヒューマンタスクに到達すると、まずタスクのステータスはCreatedになり、すぐにReadyに更新されます。
Readyはまだ特定の誰かにタスクがアサインされていない状態です。
先程のCorrect Dataのフォームに「クレーム」ボタンがありましたが、クレームを押すことで、その人がそのタスクの担当になり、タスクのステートはReservedに更新されます。

クレームボタンを押してみましょう。
すると、今度は「リリース」と「開始」ボタンが出てきました。まだ、画面は編集不可でグレイアウトされているはずです。
スクリーンショット.png

ここで、DBを見ることができる方は、DBのTaskテーブルのレコードを見てみましょう。
クレームボタン押下により、Correct DataタスクのStatusがReservedになり、actualowner_idに、ログインユーザ名がセットされているはずです。
この時点で、このタスクは、他のbrokerグループのユーザからは見えなくなります。
(ここで、「リリース」ボタンを押すと、またもとのReady状態に戻り、他のbrokerグループのユーザからも見えるようになります。)
では、フォームの「開始」ボタンを押しましょう。これにより、タスクのステータスはInProgressになり、フォームの修正入力が可能になります。

頭金を22000→2000に減額して、今度は「完了」ボタンを押しましょう。
スクリーンショット.png

これにより、Correct Dataタスクのステータスは、Completedに更新されました。

そして、プロセスが先に進み、MortgageCalculationルールタスクが実行され、Qualifyタスクに到達したはずです。
一旦ログアウトし、approverグループのユーザでログインしなおします。
タスク受信箱を確認しましょう。
スクリーンショット.png
タスクのライフサイクルは先程説明した通りです。
Ready →(クレーム) Reserved →(開始) InProgress →(完了) Completed とボタンを押して進めてみましょう。
ここは、ローン審査を行うタスクなので、フォームの下の方にある「Is mortgage application in limit?」チェックボックスにチェック(限度額内につきOK)を入れて、「完了」を押します。

pam_db=# select processid,name,status,actualowner_id from public.task where processid = 'Mortgage_Process.MortgageApprovalProcess';
                processid                 |      name      |  status   | actualowner_id 
------------------------------------------+----------------+-----------+----------------
 Mortgage_Process.MortgageApprovalProcess | Correct Data   | Completed | Tom
 Mortgage_Process.MortgageApprovalProcess | Qualify        | Completed | Mary
 Mortgage_Process.MortgageApprovalProcess | Final Approval | Ready     | 
(3 rows)

DBデータからも、QualifyがCompletedになり、Final Approvalタスクが生成されたことがわかります。

タスクテーブルの一部のカラムは、「タスクレポート」からも見ることが出来ます。
上部メニューから「タスクレポート」を選択し、タスクレポート画面の右上の「テーブルの表示」をクリックすると、タスクテーブルの中身が表示されます。
表示例
スクリーンショット 2020-12-23 16.47.30.png

プロセスインスタンスを確認してみましょう。
スクリーンショット.png
通過した箇所は、グレイになっているのがわかります。
今は、Qualifyタスクで、審査OKにしたので、その下の分岐で、Increase Down Paymentタスクではなく、Final Approvalに進みました。

さて、ここで、分岐についてちょっと見てみましょう。
分岐(ゲートウェイ)は、排他、並列、包含、イベントの4種類使えます。
イベントってなんだろう?使ったことないのでわかりませんw

Xが排他で、+が並列です。この住宅ローン審査のサンプルでは、排他ゲートウェイが3つ使われていますね。

排他は、分岐が複数ある場合に、いずれか1つだけが選択されます。必ず1つは条件がtrueになるように設定する必要があります。
複数の分岐がtrueになる場合は、優先順位に従って、1つだけが選択されます。
また、排他ゲートウェイに入ってくる矢印が複数ある場合は、いずれかが来たらすぐに次に進みます。

並列は、複数の分岐すべてが並列に実行されます。
また、並列ゲートウェイに入ってくる矢印が複数ある場合は、すべてが到達するまで待機してから、次に進みます。

分岐の条件は、ゲートウェイではなく、矢印側に設定します。Qualifyタスクの下の排他ゲートウェイのプロパティを見てみましょう。
(プロセス定義の詳細を確認するには、adminやdeveloperロールが必要になります。adminロールのユーザでログインしなおしてください。)

ゲートウェイは、デフォルトルートの設定が可能ですが、ここでは何も設定されていませんね。
スクリーンショット.png

Final Approvalに向かう矢印のプロパティを見ると、return inlimit;と条件式が入っています。
inlimitの値が返却されるということですね。
スクリーンショット.png
Java構文で書かれていますが、式の構文は、他にもJavascript/Drools/MVEL/FEELが選択できます。

このinlimitとはなんでしょうか?というと、これは、プロセス変数として定義されています。
プロセス変数は、プロセスインスタンス毎に保持される値です。プロセス定義を開いて、背景部分をクリックして、プロパティを開く、または、「ドキュメント」タブでも確認できます。
3つのプロセス変数が定義されていて、inlimitはBoolean型で定義されていることがわかりますね。
スクリーンショット 2020-12-23 17.16.23.png
プロセス定義のドキュメント表示は、プロセス定義の設計書になります。(いちいちプロパティを開かなくても、すべて一覧表示されるので、まあまあ便利です)

プロセス変数は、プロセスインスタンスの作成時に初期化され、そのプロセスおよび子プロセスからアクセスが可能です。
ただし、各タスクでプロセス変数にアクセスするには、各タスクのタスク変数にマッピングする必要があります。

inlimitの値は、Qualifyタスクのフォームの、ローン審査OKを示すチェックボックスの値を渡しています。
フォーム定義を見て確認してみます。
Qualify-taskformを開き、一番下のチェックボックスの縦ドットをクリックして、「編集」を選択します。
スクリーンショット.png
すると、開いた画面で、「フィールドバインディング」にinlimitがバインドされているのがわかります。
スクリーンショット.png

そして次に、Qualifyタスクのプロパティで、データ割当のところを見ると、以下のようにマッピングされていることがわかります。
スクリーンショット.png

Qualifyタスク内で、タスク変数のinlimitに、チェックボックスの値が書き込まれ、そのタスク変数inlimitが、プロセス変数のinlimitに渡されたということになります。(名前が同じなので説明がわかりにくいかもしれません。)

最後に

住宅ローン申し込みのサンプルを動かす方法について、一通り説明しました。
このサンプルをいろいろ改変しながら、PAMの基本動作について学習するのもよいと思います。
修正を入れて、ビルド&デプロイすれば、OKです。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2