【Blue Prism】Tips
Blue Prismの小ネタを書きます。
四捨五入
Blue PrismのRound()は銀行丸めです。
Round(Number, Places) | Places桁目で銀行丸め |
小数点以下第N桁目が奇数 → 5未満は切り捨て(それ以外は切り上げ)
小数点以下第N桁目が偶数 → 5以下は切り捨て(それ以外は切り上げ)
例) N=1
・小数点以下第1桁目が奇数 → 実質四捨五入
Round(1.14, 1) → 1.1
Round(1.15, 1) → 1.2
・小数点以下第1桁目が偶数 → 5以下は切り捨て
Round(1.25, 1) → 1.2
Round(1.26, 1) → 1.3
そのため、四捨五入をする場合は、四捨五入する桁に5を足した数字をRndDn()で切り捨てます。
RndDn(Number, Places) | Places桁目で切り捨て |
RndDn(1.24+0.05, 1) → 1.2
1.24 + 0.05 = 1.29のため、切り捨てると1.2
RndDn(1.25+0.05, 1) → 1.3
1.25 + 0.05 = 1.3のため、切り捨てても1.3
四捨五入になっている。
整数の四捨五入
例) 1240000を5桁目で四捨五入
RndDn(124000/10000+0.5, 0)*10000 → 120000
① 四捨五入したい桁数で割る
➁ 0.5を足した値をRndDn()で切り捨てる
③ 最初に割った桁数をかけ直す
1250000の場合、四捨五入すると130000に切り上がります。
RndDn(125000/10000+0.5, 0)*10000 → 130000
正規表現
Blue Prismで正規表現を扱うオブジェクトには、Utility - Strings、AVO.Regexがあります。AVO.RegexはDXからダウンロード可能です。
https://digitalexchange.blueprism.com/dx/entry/3593/solution/avoregex
Utility - Strings
Utility - Stringsで正規表現を扱うオブジェクトは2つあります。
・Test Regex Match
まず、正規表現の名前付きキャプチャについて記載します。
正規表現の名前付きキャプチャは、マッチしたテキストの一部分に名前を付けて抽出する機能で、Utility - Strings > Extract Regex Valueを使用します。
Regex Pattern | (?<name>pattern)という形式で名前付きキャプチャを指定。 name:名前付きキャプチャの名前部分 pattern:マッチさせる正規表現 |
Target String | 抽出対象の文字列 |
Named Values | "Name"フィールドと"Value"フィールドの2つのフィールドのみで 構成されたコレクションを指定。Name列に名前付きキャプチャし たいパターンの名前を1行ずつ並べ、Value列は空欄にする。 |
Outputsには、名前付きキャプチャの結果が格納されたコレクションが返る。InputsのNamed Valuesで指定したコレクションをそのまま使うことが多いです。
Named Values コレクション
"(?<数量>\d*)個(?<金額>\d*)円"
のように、2つの名前付きキャプチャを指定したい場合、Named ValuesコレクションのInitial Valuesにも、Nameフィールドに"数量"と"金額"の2つの行を設定しておきます。
※ "りんご1個120円、みかん1個80円"のように2箇所マッチする文字列を指定したとしても、抽出されるのは最初にマッチした1箇所のみとなります。みかんにもマッチするには、さらに数量と金額の行を増やし、パターンも追加する必要があります。
Test Regex Match
マッチ箇所があるかどうかを、True、Falseで判定します。
AVO.Regex
AVO.Regexオブジェクトで使える機能には以下の5つがあります。
Escape Text For Use In Regex
Extract All Matches As Colletion
マッチ部分全てを抽出し、コレクションに出力します。
Extract First Match As Text
最初にマッチしたテキストを抽出します。名前付きキャプチャを使用できます。
Regex Replace
正規表現でマッチした箇所を、指定した文字に置き換えます。いくつか使い方があります。
1.マッチした箇所を全て置き換える
Regex Pattern | 正規表現パターン |
Text To Do Replacement On | 置換対象の文字列 |
Replacement Text | 置換文字列 |
2.プレースホルダー
Regex Patternの()でキャプチャした文字列は、Replacement Textで$1~$99を使って参照できます。
上記例では、$1に"マッチ文字列の"120円"が格納されます。$1 = 120円
注意したいのが、マッチした順番に$1、$2、$3…と格納されるのではなく、()グループごとに割り振られている点です。
上記例だと、$1 = (\D*)であり、「りんご」「、ぶどう」「、みかん」にそれぞれマッチするため、Replacement Textに"$1"を指定すると「りんご、ぶどう、みかん」となります。
3.名前付きキャプチャ
Utility - Strings > Extract Regex Valueで使用した名前付きキャプチャも使えます。
Regex Pattern の値で名前付きキャプチャ?<name>を指定し、Replacement Textでマッチした値を参照するには、${name} とします。
Tipsは随時更新していきます。
【Blue Prism】アクションMEMO
個人的に良く使うアクションのメモ
[Collections]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Copy Rows |
指定した行数分コピーしたコレクションを作成 |
Collection Name |
Collection |
[Collection Manipulation]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Append Field(Number, Text) |
Collection (Collection) Field Name (Text) Value (Text) |
Appended Collection (Collection) |
|
Merge Collection |
2つのコレクションを結合(フィールドが横に並ぶ。Append FieldではNumber型Text型のみだが、それ以外も可能) |
Collection 1 (Collection) |
Collection 3 (Collection) |
Append Rows to Collection |
コレクションAにコレクションBを追加(結合) |
Main Collection (Collection) |
Combined Collection(Collection) |
Set Column Names From First Row |
最初の行をフィールド名として設定したコレクションを作成 |
Input Collection |
Collection |
Filter Collection |
WHERE句でマッチした行だけ抽出したコレクションを作成 |
Collection In |
Collection |
Collection Contains Value
|
コレクションの指定した列に"Exact Value”で指定した値、もしくは”Regex”で指定した正規表現パターンを含んでいるかを判定。Regexを設定した場合、コレクション内で最初にマッチしたグループを返す |
Collection |
Contains Search Term (Flag) |
Collection Contains Filed |
コレクションの指定したフィールドに値が入っているか判断 |
Input Collection (Collection) Field (Text) |
Success (Flag) |
[Utility - File Management]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Get Files |
ファイルの取得 |
Folder |
Files (Collection) Success |
Copy File |
ファイルのコピー(既にある場合は上書き) |
File Path |
Success |
Move File |
ファイルの移動、名前変更 |
File Path |
Success |
Delete Files |
ファイルの削除 |
Folder (Text) |
|
Get CSV Text As Collection |
CSVファイルパスを指定し、データをコレクションに格納 (データ型を自動的に推測し設定⇒思った通りにならないことも) |
CSV File Path |
CSV Values(Collection) |
Write Text File |
テキストデータをファイルに書き込む |
File Name (Text) |
Success |
Read All Text from File |
テキストファイル(主にCSV)を読み込み、テキストデータに出力 |
File Name (Text) |
Success |
[Utility - String]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Get Collection as CSV |
コレクションをCSVデータ(カンマ区切りテキストデータ)に変換 |
Input Collection (Collection) |
Collection CSV (Text) |
Get CSV As Collection |
CSVテキスト(カンマ区切り)をコレクションに格納。Schema=Column Nameフィールドに指定した値に格納後のフィールド名が変更される |
CSV (Text) |
|
Test Regex Match |
テキストに指定した正規表現が存在するか判断 |
Regex Pattern (Text) Target String (Text) |
Matched? (Flag) |
Extract Regex Values |
テキストから指定した正規表現にマッチする箇所を名前付きキャプチャとしてコレクション出力(入力コレクションのFieldはNameとValueのみ) |
Regex Pattern (Text) |
Named Values (Collection) |
Join Text |
テキスト結合。入力コレクションは、結合したい値を「Item Value」フィールドに格納し、それ以外のフィールドは存在してはならない |
Values (Collection) |
Joined Text (Text) |
[MS Excel VBO]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Get Worksheet As Collection |
Excelデータをコレクション出力 |
handle |
Collection |
Get Number Of Rows |
Excelの最終行取得 |
handle |
Number |
[Utility - Environment]
アクション名 |
概要 |
入力 |
出力 |
---|---|---|---|
Wait for Process Window |
指定したウィンドウが開かれるまで待機 |
Process Name (Text) |
Found (Flag) |
【Blue Prism】日時について
Date型、DateTime型、Time型についての要点まとめ
日時の計算
Date型
Date型の加減算は、基本的にAddDays()、AddMonths()、DateAdd()で行う。
関数(引数) |
内容 |
戻り値 |
---|---|---|
AddDays(Date, Days) |
DateにDays(Number)を加減算 |
Date型 6/12/2020 |
AddMonths(Date, Months) |
DateにMonths(Number)を加減算 |
Date型 2/9/2021 |
DateAdd(Interval, Number, Date) |
選択したInterval(0:年、1:週、2:日、4:四半期、5:月)で、Number分、Dateに加算 DateAdd(2, 3, "2020/6/9") //日 DateAdd(3, 3, "2020/6/9") //無効 DateAdd(4, 3, "2020/6/9") //四半期 DateAdd(5, 3, "2020/6/9") //月 |
Date型 6/30/2020 3/9/2021 9/9/2020 |
Date型同士の差
関数(引数) |
内容 |
戻り値 |
---|---|---|
DateDiff(Interval, |
Interval(0:年、1:週、2:不明、3:日、4:四半期、5:月)を選択し、その基準でStart DateとEnd Dateの差を求める |
Number型 53 32572800 4 |
DateTime型とTIme型
DateTime型とTime型の加減算は、基本的にTimeSpan型で行う。
ToTime("10:12:00") + MakeTimeSpan(3, 2, 10, 10) |
12:22:10 PM |
日時関連
Local Timeの取得
日本で使うRPAであれば通常、日本のローカル時刻基準である「JST:Japan Standard Time」が設定されたコンピュータ上で動く。JSTは兵庫県明石市(UTC+9時間)を基準としたタイムゾーンである。JST:Tokyo Standard Timeと記載されることもある。
1.Utility - Date and Time Manipulation > UTC To Local
「Time Zone ID」入力項目に何もいれなければ、自動的に実行端末に設定されたローカル時刻が適用される
2.Now() + MakeTimeSpan(0,9,0,0)
タイムゾーンが複数存在し、それぞれの拠点でBlue Prismの端末を持つような場合には使用できない(日本:+9)
3.Today() & LocalTime()
秒数まで出力できない
UTC、Local Timeの取得関数
|
Date Time型 |
Date型 |
Time型 |
---|---|---|---|
Now() |
なし |
UTCTime() |
|
Local Time |
Today() |
Today() |
LocalTime() |
FormatDate
関数(引数) |
内容 |
戻り値 |
---|---|---|
FormatDate |
Dateの出力をFormat形式に変換 FormatDate( "2020/6/09", "yyyyMMdd") FormatDate( "2020/12/19", "M-d-y") FormatDate( "2020/12/19", "yyy-MMMM-dddd") FormatDate( "2020/12/19", "yyy-MMM-ddd です") ※大文字Mは月(Month)、小文字mは0 ※MMMのように3つ重ねると英語略表記 ※MMMMのように4つだと英語フル表記 ※dddのように3つ重ねると曜日英語略表記 ※ddddのように4つだと、曜日英語フル表記 |
Text型 20200609 12-19-20 2020-December-Saturday 2020-Dec-Sat です |
FormatDateTIme |
FormatDate()に、時間情報を追加できる FormatDate( "2020/6/09 10:12:30", "yyyy-MM-dd hh:mm:ss") ※時間のmは分(minute) ※大文字Hは24時間表記、小文字hは12時間表記(日本ではHを使うことが多い) |
DateTime型 2020-06-09 10:12:30 |
dには、「日付(曜日)」の意味と「カスタム書式」としての意味を持っている。dについて
FormatDate関数において、dを2文字以上重ねた場合は日付や曜日、d1文字の場合は書式設定(M/d/yyyy)の意味となる。
FormatDate()、FormatDateTime()で指定できる書式文字列は、.Netフレームワークにおける書式指定と同様となる。
[参考ページ]
<標準の日時指定書式文字列の一覧>
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/standard-date-and-time-format-strings
<カスタム日時形式文字列の一覧>
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings
【Blue Prism】CSV出力とコレクション
Blue Prismには、CSV⇔コレクションの変換方法に似たような機能があったりして混乱するのでまとめ。
CSVファイル ⇒ コレクション
CSVファイルのデータをコレクションに格納する方法
Utility - File Management > Get CSV Text As Collection
非常に似ているアクション名に、
Utility - Strings > Get CSV As Collection
があるが、これはCSVテキストをコレクションに格納する場合に使用する(後述)
Utility - File Management > Get CSV Text As Collection
CSVファイルを直接コレクションに格納する。
CSV File Path | CSVファイルのフルパス |
---|---|
First Row Is Header | 1行目をコレクションのフィールドとして設定するかどうか |
指定したCSVファイルデータを直接コレクションに格納することが出来る。その際、取り込んだフィールドの型はBlue Prismが自動で型を推測して設定する。そのため、思っていた型にならないこともある(大抵、Text型になっていれば問題ないが、Number型としてフィールドが設定されてしまうと文字が取り込めなくなる)
また、取り込むCSVデータがカンマ区切りになってない場合、値が分割されず1つのフィールドにまとまって格納されてしまう。
メリット
・CSVファイルを直接コレクションに取り込めるため楽
デメリット
・自動型推測が思った結果にならないことがある
・CSVデータがカンマ区切りになっている必要がある
・文字コードにより文字化けすることがある(Blue Prismでマルチバイトを扱う際はShift-JISでやり取りされるため、外部環境がUTF-8だと文字化けになる)
自動型推測がNumber型になりText型が取り込めない例
カンマ区切りになっていない例
日本語が文字化けする例
CSVテキスト ⇒ コレクション
Utility - Strings > Get CSV As Collection
CSV形式のText型をコレクションに格納する。
CSV | CSVテキストデータ。カンマ区切りで区切られている必要がある。 |
---|---|
First Row Is Header | 1行目をコレクションのフィールドとして設定するかどうか |
Schema | Filed名を記述したコレクションを指定することで、出力結果のフィールド名を自由に変更できる。実際のデータのフィールド数より少ない場合エラーとなるため、早期のエラー検知として機能する |
Text型を指定するため、Utility - File Management > Read All Text from Fileを使い、CSVファイルをBlue PrismにText型として一度取り込む必要がある。
メリット
・カンマ区切りになってない、余計な空白や文字が入っている、といったCSVファイルをBlue Prismで編集した上でコレクション化できる
・Schema引数でフィールド名も指定できる
・Text型として取り込む際に文字コードを指定できるオブジェクトを使えば文字化けを回避できる
デメリット
・CSVファイルから取り込む際は、CSVファイル ⇒ Text ⇒ コレクション、のようにひと手間かかる
Utility - Strings > Get CSV Text As Collection の方を使う時
1.File Management > Get CSV As Collectionの自動型推測が思った結果にならない時
2.カンマ区切りでなかったり、最初に空白行などは入っているCSVデータの時
3.文字コードが適切でなく文字化けが起きる時
コレクション⇒ CSVファイル
Blue Prismには、コレクションをそのままCSVファイルに保存する機能はない。
そのため、コレクション ⇒ Textデータ ⇒ CSVファイル
1.Utility - Strings > Get Collection as CSV
2.Utility - File Management > Write Text File
という手順が必要。
手順1.Utility - Strings > Get Collection as CSV
コレクションをCSV形式(カンマ区切り)のText型に変換
手順2.Utility - File Management > Write Text File
【Blue Prism】Global Send Keys , Global Send Key Events
Global Send Keys についてのまとめ。
Glabal Send Keys (グローバルキー送信)、Global Send Key Events(グローバルキーイベント送信)は共に、実際のキーボードからの入力と同じような動作をさせたい時に利用します。
Global Send Keys
ほとんどのアプリケーションで機能し、Key Eventsの上位レベル。まずはこっちを試すといい。
Global Send Key Events
全てのアプリケーションで機能し、特にCitrixアプリケーションに推奨される送信方法。OSのキーボードのキーストロークを模倣する下位レベルのインターフェース。
使い方
- キー送信したいページやウィンドウを「Activate Application」する
- 入力欄を「Focus」する (Global Mouse Clickでも可)
- アプリケーションに対して「Global Send Keys」
Global Send Keysは、実行中の全てのウィンドウの最上位になるようにアクティブにする必要がある。そのため、画面がロックやスクリーンセーバー中だと機能しない。
Focus か Global Mouse Click か?
キー送信する前には入力欄をフォーカスする必要がある。
ブラウザ系(IE、Chrome)⇒ Focus
アプリケーション系、領域 ⇒ Global Mouse Click
Global Mouse ClickはIEやChromeなどのブラウザ系のスパイモードで取得した要素には存在しず、代わりにFocusが存在している。逆に、Win32、UIA、AA、UIAなどのアプリケーション系で取得した要素にはGlobal Mouse Clickは存在する。
各モードで使えるAction一覧は操作ステージのヘルプボタンを押せば確認できる。
Ctrl + 〇 やHOMEなどの特殊キーの使用例
Key | Glogbal Send Keys | Global Send Key Events |
---|---|---|
SHIFT | + | {SHIFT} |
CTRL | ^ | {CTRL} |
ALT | % | {ALT} |
例1."Blue Prism"と入力した後、"Ctrl + a"で全選択 ⇒ "Ctrl + c"でコピーする場合
この時、Intervalに値が入っていると、下記のエラーとなる。
Internal : Failed to perform step 3 in Navigate Stage '検索ワード入力' on page 'Test' - Special characters (~{}+^%) are not supported in SendKeys if an interval value is provided. Separate calls can be used to send control characters.
Interval:1文字1文字を入力する間の間隔(秒数)
実際の手打ちのスピードを想定してIntervalを設定したい場合は、Global Send Keysを2つに分けるとうまくいく。
Glogbal Send Keys | "Blue Prism^a^c" |
---|---|
Global Send Key Events | "<{SHIFT}b>{SHIFT}lue <{SHIFT}p>{SHIFT}rism<{CTRL}ac>{CTRL}" |
< | キー押し込み |
---|---|
> | キーを離す |
これを用いて、<{SHIFT}b>とすれば、Bと送信される。Global Send Key Eventsでは、大文字を直接打ち込んでも機能しない感じ。
同様に、Ctrl + a ⇒ Ctrl + c は、<{CTRL}ac>{CTRL}で表される。
例2.Shiftの押しっぱなし
Glogbal Send Keys | "+(blue prism)" |
---|---|
Global Send Key Events | "<{SHIFT}blue prism>{SHIFT}" |
例3.入力している文字を頭から20文字削除
Glogbal Send Keys | "{HOME}{DELETE 20}" |
---|
Global Send Key Eventsで20回指定する方法は不明。。