こんにちは、RPAコンサルタントの鈴木です。今回はNEアセット(日商エレクトロニクス標準BPアセット)に関する記事の第三回として、「画面操作オブジェクトテンプレート」について書いていく予定です。
>>NEアセットって何?という方はこちら:「日商エレクトロニクス標準BPアセットの使い方(1) - 概要編」
NEアセットのダウンロードはこちら(外部サイトにジャンプ)
画面操作オブジェクトテンプレートとは?
NEアセットには「NET - 画面操作オブジェクトテンプレート」が含まれており、名前の通りシステムの画面を操作するようなオブジェクトの作成時にテンプレートとして利用できます。前回ご紹介した「メール送信オブジェクトテンプレート」はプロジェクトごとに1つ、メール送信オブジェクトを作ってしまえば終わりだったのですが、こちらは少し使い方が異なります。
画面操作オブジェクトテンプレートは、アプリケーションモデラーを作成するオブジェクト全てに適用することを想定されたテンプレートです。このテンプレートに従って画面操作オブジェクトを作成することで、高品質な(エラーを起こしにくく、プロセスから使いやすい)オブジェクトを容易に作成できます。
またテンプレートを使うことでオブジェクトの作りが統一され、保守性が向上するというメリットもあります。チーム開発ではこちらの観点も重要になってきます。
画面操作オブジェクトテンプレートの機能
画面操作オブジェクトテンプレートには以下のようなページが存在します。
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-1024x31.png)
Initialize/Clean Upはデフォルトのページで、BPのバージョンによっては「初期化/クリーンアップ」と訳されているはずです。また名前に★が付いている「★サンプル~」「★プロセスからの呼び出し方」は説明用ページですので、テンプレートそのものではないことに注意してください。それでは各ページの役割について見ていきましょう。
初期化(initialize)ページ
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2021/01/image-4-1024x500.png)
初期化ページはBPの仕様上どんなオブジェクトにも必須で、そのオブジェクトが初めて呼び出されるタイミングで実行されます。日商エレクトロニクスでは、グローバル変数の初期化タイミングを統一するため、全グローバル変数は初期化ページに配置するルールになっています。画面操作オブジェクトテンプレートには「標準タイムアウト」と「タイムアウト例外メッセージ - 項目認識不可」という2つのグローバル変数が存在します。
「標準タイムアウト」はそのオブジェクトの待機ステージに使用するタイムアウト値です。グローバル変数で集中管理することで、全体的にタイムアウトを伸ばすような改修が容易になります。ページ内のコメントにもありますが、頻繁かつシステム全体的なタイムアウト見直しを見込む場合には、システム単位の環境変数から読み込むようにすると、より変更が容易です。
「タイムアウト例外メッセージ」は、いずれにせよ全ての操作アクションページに作成することになるであろうタイムアウト例外ステージに、共通の例外メッセージを設定するための変数です。「{対象項目}の認識が出来ませんでした。」という初期値を設定しているため、各ページの例外ステージでは{対象項目}の部分をReplace関数で必要な項目名に置き換えることになります。
「タイムアウト設定」アクション
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2021/01/image-5.png)
「タイムアウト設定」は初期化ページに配置した標準タイムアウトを、プロセスから書き換え可能にするためのアクションです。Blue Prismのオブジェクトは業務をまたいで共通に利用する前提のため、画面によっては「普段は高速だけどこの業務ではデータ量の関係で画面操作に時間がかかる」というシチュエーションが発生することがあります。そのような画面オブジェクトのタイムアウトを標準で伸ばしてしまうと無駄に待ち時間を増やすことにつながりかねないため、このアクションでプロセスからタイムアウトを変更させます。ただし説明にもある通り、そもそもの標準タイムアウト時間を延ばしておく方が適切なケースも多く、どんな画面でも必要というものではありません。とはいえこのページは不要でもテンプレートのまま置いておくだけで、あって損することもないため弊社では全画面に標準実装としています。
「アタッチ」アクション
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2021/01/image-6-1024x613.png)
「アタッチ」は画面オブジェクトが操作対象画面との接続を行う、画面オブジェクトテンプレートにおいて最重要と言っても過言ではないアクションです。Blue Prismの画面オブジェクトはアプリ起動操作時に自動でアタッチを行いますが、公式のベストプラクティスに従い画面ごとに操作オブジェクトを分ける場合、アプリを起動するのは最初の起動オブジェクトだけです。それ以外の画面用のオブジェクトには必ずこのアタッチを用意する必要があります。開発時にはアプリケーションモデラーやスタジオのアタッチボタンも使えますが、実稼働時にはどうせ作る必要がありますし、後述の理由から弊社では開発時にもボタンの利用は推奨していません。
弊社テンプレートにおけるアタッチは、①接続状態の確認 ②アタッチ本体 ③接続成功の確認 の3ステップで行われます。1つ目の接続状態の確認は、接続済みの状態で呼び出された場合に何度もアタッチ操作を行わないようにするために存在しますが、深く考えずにどんな画面でもこの作りをしておけば問題ありません。2つ目は単なる標準のアタッチ操作ステージで、よく使うアタッチ条件が見やすいようにデータアイテムを外出ししてる程度です。重要なのは3つ目の「接続成功の確認」になります。
何故アタッチ操作ステージは成功しているのに、その後続けて「接続成功の確認」を実装しなければならないのでしょうか。それはBlue Prismのアタッチステージに指定できるWindowsプロセス名やWindowタイトルなどは、操作対象画面の唯一無二の特徴を捉えるには不十分、すなわち現在表示されているの画面が同システムの別画面だったとしてもアタッチには成功してしまうことが多いからです。例えばBlue Prism自体のクライアントを見てみましょう。Blue Prismのクライアントはプロセス名「Automate」、Windowタイトルは「Blue Prism - Robotic Process Automation Software」のため、常にこの条件でアタッチに成功します。しかし残念ながら、表示されている画面がホームなのか、コントロールルームなのか、システム設定なのかという情報はこの条件ではまったく判断できません。(実際問題としてBPクライアント自体をロボットで操作することは無いと思いますが)もしコントロールルームを操作するオブジェクトを作ったのに、アタッチしたとき実はホーム画面が表示されていたとしたらその後の操作は全て上手くいかないでしょう。
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-1.png)
この問題を回避するには、アタッチ成功後に「現在表示中の画面名を特定できる唯一無二の項目=画面特定項目」の存在確認を挟めばよいでしょう。例のBP画面でいえば画面左上に「Home」と表示されていればホーム画面でしょうし、「コントロール」ならコントロールルームだろうというのは容易に判断できます。この流れを全オブジェクトで忘れず実施できるように、弊社テンプレートのアタッチページには画面特定項目の確認ステップが実装されているのです。なお「画面特定項目名」のデータアイテムは待機そのものには不要ですが、そこに何を画面特定項目として使ったのかを記入しておくことで例外メッセージが自動計算される他、レビューなどで他人が見たときに実装意図が分かりやすくなる効果があります。
画面表示待機
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-3.png)
「画面表示待機」アクションも、アタッチに次いで画面オブジェクトテンプレートにおいて重要な役割を持っています。このページはプロセスにも公開しますが、基本的にはオブジェクト内でアタッチするときにも直接アタッチページを呼び出すのではなく、代わりにこのページを呼ぶようにすることでプロセスから呼び出し不要にします。実装自体は単にアタッチをリトライループで囲っているだけですが、このページを標準で用意してあることで、「画面表示が少しだけ遅かった」というシチュエーションでもわざわざプロセスに処理を戻さずに簡潔にオブジェクト側でアタッチをリトライできます。リトライのパラメータ(回数など)は入力データアイテムになっていますが、オブジェクト内から使う際は指定しなければデフォルトのパラメータを使うことが可能です。プロセスから呼び出すシチュエーションについては「★プロセスからの呼び出し方」の節で説明します。
画面表示確認
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-4.png)
「画面表示確認」は実装としては単に画面表示待機を呼び出したとき、エラーだったかどうかをフラグ型でプロセスに戻すためのテンプレートです。少し特殊な点として、このページは弊社テンプレートの中では操作対象画面ごとに任意(不要であれば削除したり非公開にしてよい)のものとして扱われています。というのも、このようにフラグ型でアタッチの成否をプロセスに伝えたいときというのは、「対象画面が表示されているかどうかによって処理を分岐させたい」という状況です。「前の画面でこのボタンを押したら必ず画面が出るはず」といった固定的な画面では、この機能が必要になることはありません。表示されていなければエラーにしてシステム起動などからリトライするしかないからです。逆に処理中のデータなどに依存して表示される警告ダイアログなどについては、表示されるかされないかを事前に判断できない(=アタッチしてみて失敗したら出なかったと判断する)ためこのページがあるとプロセス側の作りがシンプルになります。
操作アクションページサンプル
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-5.png)
「★サンプル~」のページはそれぞれ、画面項目に応じて実際に作成する操作アクションのサンプルを示しています。各操作アクションは、プロセスからどういった順番で呼び出されても大丈夫なよう、全ページの最初にアタッチ操作を組み込むのがお作法ですが、前述の通り弊社テンプレートでは「アタッチ」ではなく「画面表示待機」を代わりに使用します。書き込みなどの前にはその対象項目の待機を入れておくのは、一般的なベストプラクティス通りかと思います。タイムアウト例外ステージのメッセージは初期化ページの説明通り、共通のメッセージをReplaceで変更して使用するのですが、ここには少し工夫があります。例外ステージ内に直接Replace先の項目名を記載せず、「操作対象」データアイテムに記載させるのです。こうしておくと操作アクションをコピーして別のアクションを作ったときに、タイムアウト例外メッセージの中身を書き換え忘れたというミスが減ります。直接例外ステージに書いてしまうと開くまでミスに気づきませんが、操作対象データアイテムだけが「OKボタン」でページ名は「キャンセルクリック」ならすぐ気づくことが出来るでしょう。
★プロセスからの呼び出し方
![](https://digital-labor.nissho-ele.co.jp/wp-content/uploads/2022/09/image-6.png)
最後の「★プロセスからの呼び出し方」は名前の通り、ここまでのページをどのようにプロセスから呼び出して利用するのかを説明したページです。実際にオブジェクトを作成した際は、このページは削除してしまってからレビュー依頼やリリースするとよいでしょう。ページ内コメントにも記載がある通りですが、プロセスが画面を操作する際には「表示が高速な(とりたてて遅くない)画面」「表示が遅い画面」「表示が不確定な画面」の3パターンを考慮しておく必要があります。画面オブジェクトテンプレートはどのパターンでもプロセス側の実装がシンプルで済むように作られています。表示が高速な画面では、各操作アクションの最初に「画面表示待機=アタッチ」が自動で行われるためプロセスは何も考えずに好きなアクションを呼び出せます。表示が遅い画面ではプロセスにも公開されている「画面表示待機」に、その業務で必要な(妥当な)分だけ待機時間を設定してから操作に移ることで安定した操作が可能になります。また表示が不確定な場合は「画面表示確認」で説明した通りです。
最後に
画面オブジェクトテンプレートはBlue Prism初心者の方には少々複雑かと思いますが、安定して稼働し続け誤操作をしないオブジェクトを作るためには非常に重要な考え方が詰まっています。NEアセットをお使いの皆様はもちろん、お使いでない場合でも是非本記事の内容を参考に自社プロジェクトの画面オブジェクト作成方法について考えていただければと思います。