RPAエンジニアの雑記

RPA(Blue Prism)について色々記載してます。

(BluePrism)アタッチについて

はじめまして、RPAエンジニアのおむおむと申します。
Blue Prismについてぽつぽつと書いていきますのでよろしくお願いします~。


初めての記事ということで何を書こうかと悩んだ結果、
Blue Prismで最初にぶつかる概念である
アタッチ」について書いていきたいと思います。


アタッチとは?


英語だと「Attach」で、意味は「取り付ける」、「くっつく」など。
Blue Prism内では「接続」と訳されていますね。
https://ejje.weblio.jp/content/attach

Blue Prismでは、(作り方にもよりますが)
操作する画面やアプリケーションごとに、共通の部品として
オブジェクトを作成する必要があります。

その際、操作対象が同一のアプリケーションであっても、
別のオブジェクトを呼び出す場合、それぞれでアタッチしなおす必要があります。
はじめはこれを理解するのがなかなか難しい。。。

そのほかにも、アプリケーション内で複数のアプリケーションが立ち上がる場合に
(多分)Blue Prismがどちらのプロセスを読み取って操作すればよいのかわからくなり
エラーが起きてしまう場合なども、アタッチしなおす必要があります。
この辺もタスクマネージャーを見ないとわからないことも多いので、
慣れるまではなかなか厄介です。。。



アタッチの方法

では、具体的にアタッチを行うにはどうすればよいのか見ていきましょう。

操作ステージの「アタッチ」アクションを使用します。

ただ、いざ選択してみると、、、

f:id:newgraduate19:20200113132845p:plain




入力パラメータがいっぱい...

ということで、1つずつ見ていきましょう!


◆ウィンドウタイトル(コレクションとして)
アプリケーションのウィンドウタイトルをコレクションとして指定し、
合致したものにアタッチします。
合致するものが複数ある場合は、上の行で指定されたものにアタッチされるようです。

コレクションの名前は何でもOKですが、フィールドの名前は「Window Title」で、
当然ですがテキスト型として定義する必要があります。

ワイルドカードが使えるので、基本的には部分一致させるようなパターンが多いですね。
特に、ウィンドウタイトルは余計な文字列がついていることも多いので。
IEのように、〇〇 - Internet Explorerのように、
一見するとわからないような場合もままあります。
(やめてほしい)


◆ウィンドウタイトル
こちらは単一のウィンドウタイトルを指定する際に使用します。
ウィンドウタイトルがそうそう変化しない場合は、
見やすさ的にもこちらのほうがいいかもですね。
もちろんワイルドカード指定が可能です。


◆プロセス名
アプリケーションのプロセス名です。
Windowsのバージョンにもよりますが、タスクマネージャーから確認することができます。
実行ファイルの拡張子(.exe)は不要です。

...ずっと思ってるんですが、プロセスって書くとOSのプロセスなのか、
Blue Prismのプロセスなのかわかりづらいですよね。。。
シナリオとかロボットとか、なんか別の言い方にならないっすかね( ´_ゝ`)


◆プロセスID
pidってやつですが、頻繁に変動するので基本使えない。。
と思っていたら、皆さん大好き神谷町ブログで素敵な記事が。

▼Blue Prism でダイアログをアタッチする際に PID を指定する
https://www.ebocean.work/entry/2019/12/04/112033

内容としてはDOSコマンドを叩いているだけなので処理も軽いので便利ですね!



◆ユーザー名
プロセスを実行しているユーザ名。
この辺もあまり使う場面が想定できない(-_-)


◆子インデックス
プロセスが複数立ち上がるパターンのアプリケーションで使用。
IEなんかでよく使う気がします。
こちらの詳細はPortalのドキュメントへ。

▼Browser Automation Guide (Japanese)

https://portal.blueprism.com/system/files/documents/Browser%20Automation%20Guide%20%28Japanese%29_0.pdf

長くなりましたが、以上がアタッチの入力パラメータの概要です。



アタッチの実装例

最後に、具体的な実装例を見てみましょう。

アタッチは必須アクションとは言いましたが、
既にアタッチされているアプリケーションに
重ねてアタッチしようとするとエラーが出てしまいます。

f:id:newgraduate19:20200113134252p:plain


(´;ω;`)ウゥゥ


これを回避するためには、ある種テンプレともいえるロジックを作成する必要があります。
もう説明が面倒なので概要だけざっくりと!
書くのが疲れたわけではない


・読み取りステージにアプリケーションの
 ルート要素(アプリケーションの要素ツリーの一番上の要素)を指定し、
 「接続されているかどうか」のアクションを指定します。

・上で出力されたフラグの内容をもとに判断ステージで処理を分岐させます。
 フラグがTrueならばすでにアタッチ済みということなので何もせず終了します。
 Falseならばアタッチされていないということなので、
 操作ステージの「アタッチ」アクションへ流します。
 

f:id:newgraduate19:20200113134318p:plain


説明が長くなりすぎた気がしますが、アタッチについてはとりあえず以上です。

長くてややこしいので、プロセス製作者に理解してもらうのめんどい、、、という方は、
このアクションはプロセス側に公開せず、
オブジェクト内の各ページの先頭に配置してしまう、というのも手かもしれないですね。


こんな感じで、暇を見てちょくちょく更新していくので
ふつつか者ですが末永くよろしくお願いします。( `・∀・´)

端末の解像度の問題でキャプチャの画質が粗い、、、