BPTは、LaunchProcess Actionを使う他に、EntityのCreateを起点に起動することもできる。
1つのEntityのCreateを起点に複数のProcessを起動することができれば、BPTをイベントブローカーとして使うこともできるので試してみる。
環境
Personal Environment(Version 11.15.0 (Build 34858))
Service Studio(Version 11.14.14)
実現イメージ
以下の通り。
①Pubモジュールで画面入力を元にEntityに1レコード追加する
②複数のProcessをこのCreateを起点に起動させる。各Processは起動したことの印としてEntityの属性を含めたログを記録する
実装例
Entityを定義
上の実現イメージの通りName属性(Text型)だけ持つEntityを作成する。
他のモジュールで参照するので、Public=Yesに設定する。
また、Processの起点として設定するには、Expose Process Eventsをオンにして置く必要がある(デフォルト。このダイアログは、「More...」をダブルクリックすると開く)。
Entityレコードを登録する処理を作成
これは、レコードを登録すればなんでもいいので、省略。
UI FlowにEntityをドラッグ&ドロップするとできる標準のフォームで十分。
Processを定義
実現イメージでは別モジュールに配置しているので、新しいモジュールを作成する。
まず、Ctrl+Q等でManage Dependenciesダイアログを開き、上で作成しておいたEntityへの参照を追加する。
Service StudioのProcessesタブのProcessesフォルダを右クリック → Add ProcessでProcessを作成する。
次に、作成したProcessを選択し、右下に表示されるプロパティからLaunch Onで参照したEntityのCreateイベントを選択する(この例では、EntityをEventBrokerと名付けたため、CreateEventBrokerを選択している)。
作成したProcessは動いたことだけ確認すれば良いので、実現イメージの通り、Automatic Activity1つだけを配置。
Automatic Activityの実装は実現イメージの通り、
- Launch Onを指定すると自動追加されるProcessのInput Parameter(EventBroker EntityのId型)を使って対象Entityを取得
- 取得したレコードの情報を(System)のLogMessageでログ出力する
とした。
実装が終わったら、モジュールをクローンして複数同じ設定のモジュールを用意する。
テスト
実行すると、以下のGeneral Logの通り、1レコード追加を起点にEventSubTest1とEventSubTest2が起動し、ログを記録している。
イベントブローカーとしてBPTを使う
Pub/Sub側共に同じ環境のOutSystemsアプリケーションであれば、この仕組を使って、イベントブローカーを実現することもできそう。
Choreography Sagaに使えないかと検討中。