Process Dispatch Frameworkとは、リアルタイムにプロセスを稼働させるためのフレームワークのことです。
今までプロセスを稼働させるパターンとして多かったのは、セッション実行、スケジュール実行だと思います。
ただ、セッション実行だといちいちリソースにドラッグ&ドロップしないといけないので面倒。スケジュール実行は、予め設定したスケジュールの時間になるまで待たないとプロセスが開始されません。
いずれにしても、「動かしたいときに、自動的に動かせない」といった課題があります。
そして、BPのユーザー会やコミュニティの話を聞く限り、いわゆる「即時実行」のニーズは結構高い。
海外では、Process Dispatch Frameworkを用いたプロセスの開発が主流になりつつあるようです。
なので、今回はその「即時実行」を実現する仕組みを、日本語版BPにも導入してみようと思います。
仕組み
そもそも、Process Dispatch Frameworkはどうやって即時実行を実現しているのか。仕組みから見てみましょう。
以下の図は、Process Dispatch Frameworkをダウンロードしたときに付属しているPDFから抜粋したものです。
複雑そうに見えますが、整理すると
- SOAPリクエストをBPに送り、プロセス実行指示を出す。
- Process Dispatcherオブジェクトが実行指示を受け、AutomateC経由で、即時実行したいプロセスを実行する。
正常に実行が完了したら、ワークキューにキューデータを投入。
実行したいプロセスが存在しない場合など、SOAP Requestがそもそも通らない状況だった場合は、キューには何もデータを入れず、失敗した旨を返して終了。
プロセスはあったけど、そのプロセス内で異常終了した場合、ワークキューにデータは投入されるが、キューステータスは「失敗しました」として登録される。 - (下の図)Dispatched Process Monitorは2.で登録されたワークキューの状態を絶えず監視します。(1分に1回など、スケジュールをぐるぐる回す)
もし、pending(保留中)状態のキューがあれば、キューステータスを確認する。ステータスが「COMPLETED」なら、そのキューを完了マークする。
「失敗しました」など、その他のステータスの場合は、そのキューを「延期」する。デフォルトの設定だと10分延期。
といった流れになります。分かりにくいですね(笑)
順を追ってやっていきましょう。
導入方法
まずはProcess Dispatch Frameworkをダウンロードします。
https://digitalexchange.blueprism.com/dx/entry/9648/solution/process-dispatch-framework
ダウンロードしたら、BPにインポートします。
これで準備OKです。
準備
SoapUIをインストールする
まずは、SOAPリクエストを送るためのツールである「SoapUI」をインストールします。「Download SoapUI Open Source」をクリックしてください。
https://www.soapui.org/downloads/soapui/
インストール手順は割愛しますが、特に特別な設定はありません。(たぶん)
オブジェクトを公開する
SOAPリクエストを受け付けるオブジェクトである「Process Dispatcher」を公開します。
システムタブ → オブジェクト → 公開をクリックし、
右側にある「ビジネスオブジェクトを公開」をクリックします。
Process Dispatch Frameworkフォルダの「Utility – Process Dispatcher」を選択し、次へボタンをクリック。
ビジネスオブジェクトの公開名はデフォルトのままとします。
完了ボタンをクリック。
すると、「Webサービスとして公開されたビジネスオブジェクト」欄に、新しくオブジェクトが表示されているのが分かるかと思います。
これで、「Utility – Process Dispatcher」オブジェクトがSOAPリクエストを受け付けられる状態になりました。
認証情報を定義する
認証情報を定義します。認証情報を設定するにはBP Server経由でBPのDBに接続する必要があります。(その設定方法については今回は割愛します)
今回は「BP admin」という認証情報を新規作成します。
ユーザー名、パスワードにはBPログイン時に使っているものを入力します。
アクセス権は一旦全ユーザー、プロセス、リソースに付与しておきましょう。
リソースプールを設定する
プロセスを稼働させるリソースプールの設定をします。
今回は自端末の中でポートを分けてランタイムリソースを起動させている前提で、8182~8185を1つのプールに設定します。
プール名は「DispatchedProcessPool」とします。
自端末に複数のランタイムリソースを起動する方法、プールの設定方法についてはこの記事では割愛します。
Process Dispatcherを微修正する
残念ながら、Process Dispatcherオブジェクトは日本語版BPに対応していません
一部日本語版BPに対応させるための微修正が必要です。
Run Processアクションの修正
1.Success?ステージの修正
修正前:StartsWith(Upper([Output]), “STARTED PROCESS”)
修正後:Left([Output], 8) = “開始済みプロセス”
2.Get Session IDステージの修正
修正前:Mid([Output], InStr([Output], “Session:”) + 8, 36)
修正後:Mid([Output], InStr([Output], “セッション:”) + 6, 36)
Get Process Statusアクションの修正
3.Error?ステージの修正
修正前:StartsWith(Upper([Output]), “ERROR:”) OR InStr(Upper([Output]), “STATUS:”) = 0
修正後:StartsWith([Output], “エラー”) OR InStr([Output], “ステータス”) = 0
4.Get Statusステージの修正
修正前:Mid([Output], InStr([Output], “Status:”) + 7, (Len([Output]) – InStr([Output], “Status:”) + 7))
修正後:Mid([AutomateC 出力], InStr([AutomateC 出力], “ステータス:”) + 6, (Len([AutomateC 出力]) – InStr([AutomateC 出力], “ステータス:”) + 6))
即時実行したいプロセスを用意する
即時実行したいプロセスを用意します。
今回は「dispatchテスト」というプロセスを作ります。
中身は何でも良いのですが、今回は代入ステージのみ用意したシンプルなものにします。
作り終わったら、「このプロセスをコントロールルームに公開」にチェックを入れておきましょう。
SoapUIでプロジェクトを作る
SoapUIでSOAPリクエストを投げるための準備をします。
リクエストを投げるためには投げる相手が必要です。先ほど公開した「Utility Process Dispatcher」オブジェクトがその相手になるわけですね。
ここでは、リクエストの投げるための準備をしましょう。
またSoapUIの画面に戻り、画面右上の「SOAP」ボタンをクリックします。
すると、New SOAP Projectというウインドウが開くはずです。
Project NameとInitial WSDLの2つの入力が求められているようです。
順番は前後しますが、Initial WSDLから入力しましょう。でも何を入れたらいいのか…??
http://[自分の端末のマシン名(ランタイムリソースの名前)]:[ポート番号(デフォルトは8181]/ws/
上記URLを自分の環境に合わせて作り、試しにブラウザでアクセスしてみましょう。こんな画面が出るはずです。
今回公開した「Utility Process Dispatcher」(公開オブジェクト名)が表示されていることが分かります。リンクをクリックしてみましょう。
XMLで書かれたAPI定義です。
Utility Process Dispatcherオブジェクト内の各アクションに対して、リクエストを投げるために必要な入力パラメータなどが定義されています。
つまり、「オブジェクトを公開する」とは
オブジェクトのAPI定義をXMLでWeb上に公開する、ということですね。
それはさておき、SoapUIのInitial WSDLに入れるパラメータですが、
以下画面のURLをそのまま貼り付けます。
今回の例だと、
http://[自分の端末のマシン名(ランタイムリソースの名前)]:[ポート番号(デフォルトは8181]/ws/UtilityProcessDispatcher?wsdl
となります。
Initial WSDLに貼り付けると、自動的にProject Nameが設定されます。
今回はちょっと修正して、「UtilityProcessDispatcher」にしておきましょう。
すると、画面左側に「UtilityProcessDispatcher」というプロジェクトが作られていることが分かります。
今回は、RunProcessというアクションをSOAPリクエスト経由で起動してみます。
このProcess Dispatch Frameworkの起点は、このRun Processアクションへのリクエスト送信となります。
項目名 | パラメータ |
bpInstance | auto |
UseSSO | False |
BPCredentialName | BP admin |
ProcessName | dispatchテスト |
ProcessParameters | – |
CallbackInfo | – |
ResourcePoolName | DispatchedProcessPool |
また、プロジェクト欄の下にある「Request Properties」にも設定が必要です。
項目名 | パラメータ |
Username | (BPログイン時のユーザー名) |
Password | (BPログイン時のパスワード) |
動かしてみる
Process Dispatcherを動かす
では、いよいよプロセスをSOAPリクエスト経由で動かしてみます。
SoapUIの「Request 1」ウインドウに表示されている実行ボタンをクリックします。
正常にオブジェクトにリクエストが渡れば、以下のような結果が返ってくるはずです。
セッションIDと、プロセスを実行したランタイムリソース名が分かりますね。
BPの画面を見てみましょう。
コントロールタブを開き、セッション管理画面を表示します。
確かに「dispatchテスト」プロセスが実行されたことが分かりますね。
ワークキューを見てみましょう。
Dispatched Processesというキューがあるかと思いますので、中身を見てみます。
SOAPリクエストを投げて返ってきた結果に、セッションIDがあったと思いますが、そのセッションIDと同値のキューデータが入っていますね。
これらのキューデータに対して、Dispatched Process Monitorプロセスが定期的に監視しているわけです。
Dispatched Process Monitorを動かす
本来はスケジュール実行なのですが、今回はデバッグ実行でDispatched Process Monitorプロセスを動かしてみます。
※一部日本語訳している部分があります
プロセスの実行完了後、改めてキューデータを確認してみましょう。
「dispatchテスト」プロセスが正常終了しているので、キューも完了マークされています。
もし「dispatchテスト」プロセスが異常終了した場合は、キューが延期されます。
まとめ
仕組み自体はそれほど難しくはないのですが、動かすまでの準備が色々とあり、戸惑うかもしれません。
今回はSoapUIでSOAPリクエストを投げましたが、SlackやTeamsなどから投げられれば、一気に即時実行が身近になるかと思います。
また、即時実行したいプロセスが何らかの理由でエラーになった場合、キューを「延期」すると説明しました。延期したキューから対象のプロセスを再稼働させるのは手動?という疑問が解決していません。
アクティブキューとか使えるのかな?と思いつつ、引き続き調べてみたいと思います。
Process Dispatch Frameworkの日本語版もあります。
より分かりやすく再構築されたフレームワークですので、こちらについても別記事で解説します。
遅延実行(タスクを溜め込み、順次処理する)フレームワークもあります☆