自分へのメモ BluePrism Excelをオブジェクトとして操作する セルのRead/Write
Blue PrismでExcelをオブジェクトとして操作するサンプルはあまり探せない。
基本的にはMS Excel VBOを拡張するものなのだろうか?
ひとまず、アプリケーションモデラーExcelをで定義してセルの値をRead/Writeするサンプルを作ってみた。
Write Stageでどうしても書き込みできず、Global Send Keyで実装しているが、これが正解なのかは不明。
サンプルプロセス
指定されたセルに移動⇒値のRead⇒値の書きこみ
指定したセルへの移動
TargetCellのアプリケーションモデラー定義は以下の通り。
UIA名をDynamicに設定し、B2に移動したい場合、「"B" 2」と設定。
ちなみに上記のように指定した場合、B2セルが画面の表示範囲に含まれていれば動作するが、B2セルが表示範囲外にあるとエラーになってしまう。
これは何か設定が悪いのか?そういうものなのか?
内部 : ページ 'ReadAndWrite' の操作ステージ '指定したセルへの移動'でステップ2を実行できませんでした - クエリ条件に一致する要素がありません
セルの値を取得する
Readステージで値を読み取ることができた。
セルに書き込む
WriteStageで書き込めないので、Global Send Keyで実装。
「入力」のテキストは、以下の通り。
"{DEL}"
[Value1] ・・・ 入力したい値"ほげほげ"
"{ENTER}"
自分へのメモ BluePrism Collectionを操作する Collection Manipulation Filter Collection/Sort Collection
BluePrismでCollectionを扱うには、Collection Manipulationでいろいろできそう。
Collection ManipulationのFilter CollectionのとSort Collectionのサンプルをつくってみました。
Filter Collection
サンプルで使用する元のCollection
入力パラメータ
Collection in 操作したい元のCollectionを指定
FileterはFilter 条件を指定
出力パラメータ
Collection Out フィルタ後のデータを入れるCollectionを指定。
実行結果
出力パラメータに指定したCollectionに、Price=400の条件でFilterされた結果のみ可能されました。
入力パラメータに指定したもともとのCollectionには変更はありません。
Filterに何を指定するか
ヘルプを見てもいまいち説明がありません。
しょうがないのでFilter CollectionのCodeStageを見てみると
DataRowのSelectの引数の形式に従う形式がありそうです。
ヘルプに書いてくれ~
ということで、Filterには以下のような指定ができます。
文字列を指定したい場合 ⇒ "Name='商品A003'"
複数指定 ⇒ "Name IN ('商品A003','商品B001')"
ワイルドカード ⇒ "Name like '*商品A*'"
Sort Collection
Sorts a collection according to the specified field.特定の項目でCollectionをソートします。
入力パラメータ
Collection ソートしたい元のCollection
Sort Field ソートを行うキー項目名
Accending Order ソート順 昇順:True 降順:False
出力パラメータ
Sorted Collection ソート後のデータを入れるCollectionを指定
実行結果
Accending OrderがTrue(昇順)の場合
Accending OrderがFalse(降順)の場合
自分へのメモ BluePrism global send keyのおさらい
はこふぐ@勉強中です。
global send keyのおさらい。
global send keyについては、こちらからGuide to Send Keys and Send Key Events .pdfにて情報を得ることができる。
Introductionによると、WriteStageでの書き込みにうまくいかない場合はGlobal Send KeyまたはGlobal Send Keyイベントが使えるよ、ということだ。
Global Send Key
Send Key Eventを試す前にこっちでだだいたいうまくいく。
Activeなアプリケーションに対してKeyStrokeを送るハイレベルなインターフェース。
Global Send Key Event
どんなアプリケーションでもうまくいくと思われるし、Citrixにテキストを送るのにおすすめ。
OSに対してKeyStrokeを模倣するローレベルのインターフェース。
Global Send Keyの使い方
①MainWindow ← 「Active Application」 でアプリケーションにフォーカス
②入力したい要素 ← 「Global Mouse Click Centre」で入力を行いたい要素をアクティブに
③アプリケーション ← 「Global Send Keys」でデータを送信。 「Interval」は0.1(くらいがおすすめ?)※一文字ごとの間隔
④「PauseAfterEachStep」は0.25~1秒くらいの間で環境に合わせる。
Global Send Keyで特別な文字を送るときには
• SHIFT: +
• CTRL: ^
• ALT: %
• 特殊なKeyは {}で囲む 例:{HOME}
• 繰り返したいときは、数字をつける 例 {HOME 10}
• Shift, Alt、Controlを押しながらKeyを打ちたい場合は括弧で囲む 例: +(EC)
例えば
BluePrismと入力したあとにCtl+Aで全選択、Ctl+Cでコピーしたい場合は
Blue Prism^A^C
Key-> Code
BACKSPACE -> {BACKSPACE}, {BS}, or {BKSP}
BREAK -> {BREAK}
CAPS LOCK -> {CAPSLOCK}
DEL or DELETE -> {DELETE} or {DEL}
DOWN ARROW -> {DOWN}
END -> {END}
ENTER -> {ENTER}or ~
ESC -> {ESC}
HELP -> {HELP}
HOME -> {HOME}
INS or INSERT -> {INSERT} or {INS}
LEFT ARROW -> {LEFT}
NUM LOCK -> {NUMLOCK}
PAGE DOWN -> {PGDN}
PAGE UP -> {PGUP}
PRINT SCREEN -> {PRTSC} (reserved for futureuse)
RIGHT ARROW -> {RIGHT}
SCROLL LOCK -> {SCROLLLOCK}
TAB -> {TAB}
UP ARROW -> {UP}
F1 -> {F1}
Keypad add ->{ADD}
Keypad subtract ->{SUBTRACT}
Keypad multiply ->{MULTIPLY}
Keypad divide ->{DIVIDE}
自分へのメモ BluePrism Excelのマクロを起動しMesageBoxを操作する
はこふぐです。
Excelのマクロを起動しMesageBoxを操作するサンプルを作ってみた。
BluePrismでExcelを操作するには2つのアプローチがある。
①MS Excel VBOを使う
②Excelをオブジェクトとして使用する
①でMessageBoxを操作する手段がわからなかったので、今回は②のアプローチで実装してみた。
サンプルの内容
マクロを登録してある図形「MacroTest1」をクリックしてマクロを呼び出し
マクロで出力したMessageBoxの「OK」をクリック
そんだけ。
Excelをオブジェクトとして定義
Excelを定義します。
マクロをキックする図形も定義
ちなみにUIA名で指定している「BtnMacroTest1」というのは、Excelの図形の「代替テキスト」に一致しているよう。図形に代替テキストを設定していないとうまく識別できない??
メッセージボックスとOKボタンも定義
アクションを作成
①Launch
②ボタンをクリックして、マクロを起動
Readステージで、Connectされてるかをチェックして、されていなければAttachするようにしている。
アタッチでWindowTitleを指定。
マクロを登録してあるBtnMcroTest1をクリック
③メッセージボックスのOKボタンをクリック
ボタンは押す(Press)じゃダメだった。
グローバルマウスクリック(中央)にしたらうまくいった。
いまいち、操作のアクションを何にすればいいか、わかっていない。
実際は待機ステージを入れ込んだりする必要がありそう。
いまいち、こういう時はこのアクション、というのがわからない。
いろいろ試してみてうまくいけばOK!のスタンスでいいのか?
自分へのメモ BluePrism Excelでフィルタをかける
はこふぐです。
BluePrismでExcelでフィルタをかける実装をMS Excel VBOの拡張で行う場合の実装例。
AddFilterアクションの簡単な例
handle いつものやつ
TargetRange:表の開始位置を指定
Field:何番目の列でフィルタするか(1始まり)
Criteria1:フィルタ条件
AddFilterの中身
コードステージAddFilterの中身
Dim excel as Object = GetInstance(handle) Dim ws as Object = excel.ActiveSheet ws.Range(TargetRange).AutoFilter(Field := Field, Criteria1 := Criteria1)
実行すると
が
になります。
複数条件を指定したい場合などは、もう少しこらないとだめかも。
フィルタを外す場合はこちら
ws.Range(TargetRange).AutoFilter
自分へのメモ BluePrism Excelのマクロを呼び出す
はこふぐです。
BluePrismでExcelのマクロを呼び出すには、MS Excel VBO の Run Macroが使える。
入力パラメータ
Handle おなじみの識別番号
Macro Name マクロ名
出力パラメータはなし
動かしてみる
ファイルダウンロード&保存のメモ
家で調査検証、会社で実装。
来週の自分へ。ファイルダウンロード&保存のやり方はこちらを参考にする。
LerningEditonがあるのでおうちで調査できるけど、3か月の期間がすぎたらどうしようか。機能制限してもいいから、永続的なLearningEditionライセンスを検討いただけないものかなあ・・・!!
自分へのメモ BluePrism 正規表現にマッチするか調べる Test Regex Match
正規表現による文字列チェックはどんな開発でもおなじみ。
BluePrismで使うには、Utility-StringsにあるText Regex Matchが使える。
Utility-Strings Text Regex Match
入力パラメータは
Regex Pattern 正規表現
Target String テストする文字列
出力パラメータは、
Matched? 一致したTrue/一致しないFalse
Text Regex Matchを使ったSample。
「^[Bb]lue[Pp]rism$」という正規表現を・・・
このような文字列に対してチェック。
実行。
結果
自分へのメモ BluePrismでBatファイルを起動する Start Process/Run Process Until Ended
BluePrismからBatファイルを起動するには、Utility-EnviromentのStart Processアクション、または、Run Process Until Endedが使えるようだ。
2つアクションの違いは、呼び出すプロセスが終了するのを待つか、待たないか。
★Start Process
Starts a process directly with the given arguments.
Start Processアクションでは、プロセスを起動すると、その終了を待たずに次のStageが実行される。
以下は60秒SleepするBatファイルをStart Processにて実行した場合の結果。
Start Process前後の時刻を保持したStartTimeとEndTimeにほぼ時間差はない(デバック実行なので2秒かかっているけど)
★Run Process Until Ended
Run a process and wait until completion or timeout.
終了するか、タイムアウトするまでプロセスを実行する。
Run Process Until Endedアクションでは、プロセスを起動すると、タイムアウトするか終了を待って次のStageが実行される。
入力パラメータのTimeoutにタイムアウト値を設定するが、このTimeout、How long to wait for the application to finish. Default is 10 seconds つまり、設定しないとデフォルト10秒でタイムアウトしてしまうので注意が必要。
同じく60秒SleepするBatファイルをRun Process Until Endedにて実行した場合の結果。
Start Process前後の時刻を保持したStartTimeとEndTimeから、バッチの実行終了を待って次のStageが実行されたことが確認できる。
BluePrism Extending Capabilities of the MS Excel VBO MS Excel VBOの機能拡張
BluePrismのEXCEL VBOを拡張するためには、PortalでゲットできるExcel Automation Guide.pdfを読むべしとのこと。現時点では日本語はない様子なのでざっと翻訳してみた。
Introduction
BluePrismはExcel VBOを準備していて、たくさんアクションも用意しているけど、それでカバーできないことは、追加で実装が必要。
"MS Excel-Extended"オブジェクトを作るには
BluePrismは定期的に新しいMS Excel VBOをリリースするので、更新されたバージョンが自作のアクションを上書きして消してしまわないように、新しいアクションは新しいオブジェクトに実装すべし。おすすめの名前はMS Excel VBO-Extendedです。
→もともとのMs Excel VBOを開いてFile→Save AsでMS Excel VBO-Extendedを指定して保存する。
(VBO-Extendedには新しいアクションだけ含める理解であっているのだろうか・・・?)
新しいアクションを作成する
新しいアクションはBluePrismのベストプラクティス(Portalで参照)に従ってね。
ドキュメントも完璧に書くのも重要です。
・ページの説明を書け
・Acitonの前提条件を書け
・Actionの事後条件を書け
・入力の説明を書け
・出力の説明を書け
.Netのコードを作るためのRecording Step
新しいアクションは.Netの経験がある人だけがやるべき。
でもEXCELのマクロの機能でコードを生成し、BluePrismに利用することができる。
エクセルの「マクロを記録する」機能でコードを生成する。
しかし、BluePrismのコードステージにそのままコピペしても適しないと思われる。
自動生成のコードはアクションのベースとして利用する。
(PDF内にマクロの自動生成のコードと、コードステージ用に手直ししたコードあり)
既存のアクションの修正
既存オブジェクト/アクションを修正する場合は、修正が利用しているプロセスに与える影響をよく理解すべき。
・新しい入力パラメータにはデフォルト値を与える
・入力パラメータを減らすことは避ける
・出力パラメータを減らすことは避ける
・Exceptionのメッセージを変更することは避ける(プロセスがメッセージ内のWordを使ってるかもしれないから)
新しいアクション作成へのサポート
共有コンポーネントの拡張は教育されたデキル.Net開発者によってのみおこなわれるべきである。既存のアクションを変更することで問題が発生するリスクがある。
BluePrismのポータルは、新しいアクションの作成について議論したり、コーディングの助けになる。
BluePrismサポートチームは残念ながらアクション作成を手伝うことはできないけど、標準のオブジェクトの改良になにか提案があったらPortalで言ってね。