Blue Prism でリアルタイム起動フレームワークを構築する(詳細編① 受付係を作るには?)
この記事、長いです!
(警告)
前回の記事👇
受付係を作る(簡易版)
全体像の振り返り
先日の全体像を今一度、振り返ると、
考え方的には👇
Blue Prism の言葉でいうと👇
ただ、いきなり全体を考えると、
頭がいっぱいになってしまうので、
まずは最初の受付部分を考えよう、
というのが前回の前振りでした。
・・・しかし、
いきなりやるには、これだけでも
十分難しいかも。。
わかってしまえば、
どうということはないんだけど、
最初はもっと簡単にしよう!
(慎重)
簡略化(ユーザーがプロセスとリソースを指定して起動する)
そういうわけで、
以下のように簡略化しました。
この方式では、
ユーザーがロボットと自動化処理を指定して実行します。
かなりユーザー主体な形ですね。
取次係ロボットは、
まぁ言ってしまえば取次をするだけですが、
ユーザーに対して以下の機能を提供します
- 実行可能な自動化処理の一覧を提供
- 空いているロボットを提供
- 指定されたロボットで、指定された自動化処理を実行
Blue Prism の言葉に言い換えると、
こんな感じ👇
取次係オブジェクトが提供する機能も、
Blue Prism 的に書き下しておきます。
- Process Info(コントロールに公開されたプロセスの一覧を提供)
- Resource Info(Idle 状態のランタイムリソースの一覧を提供)
- Run Process(プロセスとリソースを指定すると、指定した条件でプロセスを実行)
これを実装する上で重要なのが、
オブジェクトの公開(Web API 化)です。
オブジェクトの公開(Web API 化)
なんでオブジェクトの公開が重要かというと、
今回のシナリオでは、クライアントアプリから
様々な要求(プロセスの一覧が欲しい、
リソースの一覧が欲しい…) がひっきりなしに来るので、
取次係オブジェクトがリクエストを
一時的に貯めておく仕組みが必要です。
これを実現するには、
結論から言うとオブジェクトを公開(Web API化)
して、自動初期化を使うと実現できます。
動きについては、以前に書いたこちらの
記事を参照してください。
こんな風に、タイムアウトになるまで、
クライアントアプリからのリクエストが
公開されたオブジェクトの手前で蓄積されます。
これは Blue Prism のドキュメント
に明記されている挙動です。
v6 User Guide - Web Services (Japanese) の
5.1.1. セッション管理 に書かれています。
念のため、引用もしておくと、
少数の専用 Blue Prism ランタイム リソースを割り当てて、Web サービス リクエストを受け取る機能。必要に応じて、開始される Blue Prism セッションの数を最小限に抑え、単一セッション内に実行モードを混在させられるようにするために、呼び出し元が自動開始を使用します。
(34ページ)
という感じですね。
(わかりにくい。。)
このアプローチを行うと、
ランタイムリソース#01は、
取次係オブジェクトに占有されます。
コントロールからも、
こんな風に見えるようになります。
(歯車がつく)
取次係オブジェクトのアクションを作りこむ
Run Process
Run Process(指定されたプロセスとリソースで実行する)
については、ポイントは AutomateC.exe の実行と
セッションIDのエンキューになります。
プロセスの起動は、AutomateC.exe を
取次係オブジェクトの中で呼び出して
使います。
AutomateC.exe を使うことで、
起動後の戻り値としてセッションID
(Session ID)を取得できます。
以下のようなコード(C#)を記述することで、
AutomateC.exe をコードステージから
起動できます。
System.Diagnostics.Process p = null;
System.Diagnostics.Process p = null;
System.Diagnostics.ProcessStartInfo s = null;
System.IO.StreamReader r = null;
s = new System.Diagnostics.ProcessStartInfo(AutomateC_Path, AutomateC_Command_Param);
s.UseShellExecute = false;s.RedirectStandardOutput = true;s.CreateNoWindow = true;
p = new System.Diagnostics.Process();
p.StartInfo = s;
p.Start();
r = p.StandardOutput;
Output = r.ReadToEnd();
if *1 == false)) throw new Exception("AutomateC.exe が時間内に起動しませんでした");
起動するとテキストが返されるので、
そのテキストからセッションIDを取得し、
エンキューすれば完了です。
Run Process の全体像は👇。
ちょっと大きくなっちゃった。。
Process Info
実行可能なプロセスの一覧を取得するには、
Blue Prism DX から Utility - Blue Prism Process Info
をダウンロードして活用できます。
Utility - Blue Prism Process Info を使うには、
Utility - XML も必要ですが、
こちらからダウンロードできます。
Process Info の全体像は👇。
Resource Info
Idle 状態のリソースの一覧を取得するには、
👆で紹介した Utility - Blue Prism Process Info を
ちょっと改造すれば可能になります。
全体像は👇。
まとめ
- Blue Prism でリアルタイム起動フレームワークを作っていくシリーズ、第2回
- 受付係・・・を作る前に、取次係を作ってみた
- ポイントはオブジェクトの公開(Web API 化)、コードステージで AutomateC.exe の実行、セッションIDのエンキュー、Utility - Blue Prism Process Info の活用と改造
開発したVBO、プロセスは、後でDXにアップして公開する予定です。
アップされたら、リンクもつけますね☆
次回は、取次係を受付係に進化させるところかな、、
ちょっと長丁場になりそうですけど、
がんばるゾ☆
次回の記事👇
まとめはこちら👇
ソースコードはこちら👇
*1:Timeout > 0) && (p.WaitForExit(Convert.ToInt32(1000*Timeout