はこふぐのメモ

めもです

自分へのメモ BluePrism Excelをオブジェクトとして操作する セルのRead/Write

Blue PrismでExcelをオブジェクトとして操作するサンプルはあまり探せない。

基本的にはMS Excel VBOを拡張するものなのだろうか?

 

ひとまず、アプリケーションモデラーExcelをで定義してセルの値をRead/Writeするサンプルを作ってみた。

Write Stageでどうしても書き込みできず、Global Send Keyで実装しているが、これが正解なのかは不明。

 

サンプルプロセス

指定されたセルに移動⇒値のRead⇒値の書きこみ

f:id:sazanamifugu:20191124234555p:plain

 

指定したセルへの移動

f:id:sazanamifugu:20191124234758p:plain

 

TargetCellのアプリケーションモデラー定義は以下の通り。

UIA名をDynamicに設定し、B2に移動したい場合、「"B" 2」と設定。

f:id:sazanamifugu:20191124235339p:plain

f:id:sazanamifugu:20191124235618p:plain

ちなみに上記のように指定した場合、B2セルが画面の表示範囲に含まれていれば動作するが、B2セルが表示範囲外にあるとエラーになってしまう。

これは何か設定が悪いのか?そういうものなのか?

 

内部 : ページ 'ReadAndWrite' の操作ステージ '指定したセルへの移動'でステップ2を実行できませんでした - クエリ条件に一致する要素がありません

 

セルの値を取得する

Readステージで値を読み取ることができた。

f:id:sazanamifugu:20191125000151p:plain

 

セルに書き込む

WriteStageで書き込めないので、Global Send Keyで実装。

f:id:sazanamifugu:20191125000517p:plain

 

「入力」のテキストは、以下の通り。

"{DEL}"

[Value1] ・・・ 入力したい値"ほげほげ"

"{ENTER}"

 

 

自分へのメモ BluePrism Collectionを操作する Collection Manipulation Filter Collection/Sort Collection

 

BluePrismでCollectionを扱うには、Collection Manipulationでいろいろできそう。

 

Collection ManipulationのFilter CollectionのとSort Collectionのサンプルをつくってみました。

Filter Collection

Filters a collection using the given query
与えられた条件を使ってCollectionをフィルタする。
 

サンプルで使用する元のCollection

f:id:sazanamifugu:20191122111342p:plain

入力パラメータ

 

f:id:sazanamifugu:20191122113654p:plain



Collection in  操作したい元のCollectionを指定

FileterはFilter  条件を指定

 

出力パラメータ

f:id:sazanamifugu:20191122111534p:plain

 

Collection Out フィルタ後のデータを入れるCollectionを指定。

 

実行結果

f:id:sazanamifugu:20191122113750p:plain

出力パラメータに指定したCollectionに、Price=400の条件でFilterされた結果のみ可能されました。

入力パラメータに指定したもともとのCollectionには変更はありません。

Filterに何を指定するか

ヘルプを見てもいまいち説明がありません。

f:id:sazanamifugu:20191122113848p:plain

しょうがないのでFilter CollectionのCodeStageを見てみると

f:id:sazanamifugu:20191122114015p:plain

DataRowのSelectの引数の形式に従う形式がありそうです。

ヘルプに書いてくれ~

 

ということで、Filterには以下のような指定ができます。

文字列を指定したい場合 ⇒  "Name='商品A003'"

複数指定   ⇒  "Name IN ('商品A003','商品B001')"

ワイルドカード  ⇒ "Name like '*商品A*'"

 

Sort Collection

Sorts a collection according to the specified field.特定の項目でCollectionをソートします。

 

入力パラメータ

f:id:sazanamifugu:20191124082543p:plain

Collection ソートしたい元のCollection

Sort Field ソートを行うキー項目名

Accending Order ソート順  昇順:True 降順:False


出力パラメータ

 

f:id:sazanamifugu:20191124082856p:plain


Sorted Collection ソート後のデータを入れるCollectionを指定
Success ソートが成功したかどうかのFlag True:成功
Message  ソートが失敗した場合のエラーメッセージ
 

実行結果

Accending OrderがTrue(昇順)の場合

f:id:sazanamifugu:20191124083244p:plain

Accending OrderがFalse(降順)の場合

f:id:sazanamifugu:20191124083158p:plain

 

 

自分へのメモ BluePrism global send keyのおさらい

はこふぐ@勉強中です。

global send keyのおさらい。

 

global send keyについては、こちらからGuide to Send Keys and Send Key Events .pdfにて情報を得ることができる。

 

Log in | Blue Prism Portal

 

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」をクリックしてマクロを呼び出し

f:id:sazanamifugu:20191117175322p:plain

 

マクロで出力したMessageBoxの「OK」をクリック

f:id:sazanamifugu:20191117175451p:plain

そんだけ。

Excelをオブジェクトとして定義

Excelを定義します。

f:id:sazanamifugu:20191117175015p:plain

 

マクロをキックする図形も定義

f:id:sazanamifugu:20191117175733p:plain

ちなみにUIA名で指定している「BtnMacroTest1」というのは、Excelの図形の「代替テキスト」に一致しているよう。図形に代替テキストを設定していないとうまく識別できない??

 

メッセージボックスとOKボタンも定義

f:id:sazanamifugu:20191117175950p:plain

f:id:sazanamifugu:20191117180013p:plain

 

アクションを作成

①Launch

f:id:sazanamifugu:20191117180139p:plain

f:id:sazanamifugu:20191117180207p:plain

②ボタンをクリックして、マクロを起動

f:id:sazanamifugu:20191117180253p:plain

Readステージで、Connectされてるかをチェックして、されていなければAttachするようにしている。

f:id:sazanamifugu:20191117180331p:plain

アタッチでWindowTitleを指定。

f:id:sazanamifugu:20191117180451p:plain

 

マクロを登録してあるBtnMcroTest1をクリック

f:id:sazanamifugu:20191117180712p:plain

 

③メッセージボックスのOKボタンをクリック

f:id:sazanamifugu:20191117181013p:plain

ボタンは押す(Press)じゃダメだった。

グローバルマウスクリック(中央)にしたらうまくいった。

いまいち、操作のアクションを何にすればいいか、わかっていない。

f:id:sazanamifugu:20191117181229p:plain

 

実際は待機ステージを入れ込んだりする必要がありそう。

いまいち、こういう時はこのアクション、というのがわからない。

いろいろ試してみてうまくいけばOK!のスタンスでいいのか?

自分へのメモ BluePrism Excelでフィルタをかける

はこふぐです。

 

BluePrismでExcelでフィルタをかける実装をMS Excel VBOの拡張で行う場合の実装例。

 

AddFilterアクションの簡単な例

 

f:id:sazanamifugu:20191116223902p:plain

handle いつものやつ

TargetRange:表の開始位置を指定

Field:何番目の列でフィルタするか(1始まり)

Criteria1:フィルタ条件

 

AddFilterの中身

f:id:sazanamifugu:20191116224315p:plain

 

 コードステージAddFilterの中身

Dim excel as Object = GetInstance(handle)
Dim ws as Object = excel.ActiveSheet

ws.Range(TargetRange).AutoFilter(Field := Field, Criteria1 := Criteria1)

実行すると

f:id:sazanamifugu:20191116224652p:plain

f:id:sazanamifugu:20191116224735p:plain


になります。

複数条件を指定したい場合などは、もう少しこらないとだめかも。

 

フィルタを外す場合はこちら

ws.Range(TargetRange).AutoFilter

自分へのメモ BluePrism Excelのマクロを呼び出す

はこふぐです。

 

BluePrismでExcelのマクロを呼び出すには、MS Excel VBO の Run Macroが使える。

 

Runs the specified macro. Depending on how the macro has been created the name will be one of the following: A. Just the macro name e.g. MyMacro B. The workbook and macro name e.g. MyWorkbook.xls!MyMacro C. The workbook, worksheet and the macro name e.g. 'MyWorkbook.xls!'MyWorksheet.MyMacro
 
マクロがどう作られたかによってマクロ名は以下のようになる。
例A)マクロ名のみ。例)MyMacro
例B)ワークブック名とマクロ名。例)MyWorkbook.xls!MyMacro
例C)ワークブック名とシート名とマクロ名。例)MyWorkbook.xls!'MyWorksheet.MyMacro
 

f:id:sazanamifugu:20191116181351p:plain

入力パラメータ

 Handle おなじみの識別番号

 Macro Name マクロ名

出力パラメータはなし

 

動かしてみる

f:id:sazanamifugu:20191116181634p:plain

マクロが実行されました。

f:id:sazanamifugu:20191116181718p:plain

ところでこのOKを押すには、VBOからは無理なのだろうか。
ExcelをオブジェクトとしてAttachして操作するのかな?

ファイルダウンロード&保存のメモ

家で調査検証、会社で実装。

 

来週の自分へ。ファイルダウンロード&保存のやり方はこちらを参考にする。

www.ebocean.work

 

LerningEditonがあるのでおうちで調査できるけど、3か月の期間がすぎたらどうしようか。機能制限してもいいから、永続的なLearningEditionライセンスを検討いただけないものかなあ・・・!!

自分へのメモ BluePrism 正規表現にマッチするか調べる Test Regex Match

正規表現による文字列チェックはどんな開発でもおなじみ。

BluePrismで使うには、Utility-StringsにあるText Regex Matchが使える。

 

Utility-Strings Text Regex Match

Check if a given Text value matches a regular expression

f:id:sazanamifugu:20191115230417p:plain

入力パラメータは

Regex Pattern 正規表現

Target String  テストする文字列

 

f:id:sazanamifugu:20191115230517p:plain

出力パラメータは、

Matched?  一致したTrue/一致しないFalse

 

Text Regex Matchを使ったSample。

「^[Bb]lue[Pp]rism$」という正規表現を・・・

f:id:sazanamifugu:20191115230944p:plain

このような文字列に対してチェック。

f:id:sazanamifugu:20191115231213p:plain

実行。

f:id:sazanamifugu:20191115231301p:plain

結果

f:id:sazanamifugu:20191115231336p:plain

 

自分へのメモ 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.

 

f:id:sazanamifugu:20191112220712p:plain

Start Processアクションでは、プロセスを起動すると、その終了を待たずに次のStageが実行される。

 

以下は60秒SleepするBatファイルをStart Processにて実行した場合の結果。

Start Process前後の時刻を保持したStartTimeとEndTimeにほぼ時間差はない(デバック実行なので2秒かかっているけど)

f:id:sazanamifugu:20191112220440p:plain

 

★Run Process Until Ended

Run a process and wait until completion or timeout.

終了するか、タイムアウトするまでプロセスを実行する。

 

f:id:sazanamifugu:20191112220758p:plain

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が実行されたことが確認できる。

 

f:id:sazanamifugu:20191112225150p:plain

 

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で言ってね。

 

プライバシーポリシー
©2019 はこふぐのメモ All rights reserved