LoginSignup
3
3

More than 3 years have passed since last update.

【BluePrism】Dictionaryを使ってみる

Last updated at Posted at 2019-05-20

UiPathでExcelファイルを読み込む際にDictionaryに格納してKeyに紐つくValueを引っ張ってきて…
っていうのをよくやっていました。
が、BluePrismではDictionary型の変数(Data Item)は使えません。

BPでは配列=コレクションなのですが、コレクションの指定行の指定列の値を取り出したい場面に遭遇することは多々あると思います。

その度にFilter CollectionしてRead Collection Fieldするのはちょっと面倒。
パフォーマンス的にもちょっと心配。

というわけで、Dictionaryを使って何とか実現できないかやってみました。

方法

コードステージを使い、コレクションをDictionaryに変換後、指定したKeyに紐つくValueを取り出すロジックを記述します。
今回は実験なので、ソースは雑ですw

sample
Dim dic As New Dictionary(Of Integer, String)()
Try
    For Each row as DataRow in data.Rows
        Dim val1 as String = CStr(row(0))
        Dim val2 as String = CStr(row(1))
        dic.Add(val1, val2)
    Next
Catch ex As System.Exception
    result = False
    dic = Nothing
    Return
End Try

result = True
outputValue = dic(inputValue)

入力

inputValueにはDictionaryのKeyを入れます。
image.png

出力

resultはFlag型で、取得が成功した場合はTrue、失敗した場合はFalseを返します。
image.png

ソースコード

image.png

InitialiseにImport追加

Namespace ImportsにSystem.Collections.Genericを追加します。
これがないと、コードステージでDictionary型の変数宣言でコンパイルエラーになります。
image.png

パフォーマンス検証

FilterCollection ⇒ Read Collection Fieldの方法Dictionaryを使う方法、どちらが早いのか検証します。

事前準備として、Excelに50000行のレコードを用意します。
列名は「列1」「列2」とします。(列1:Key 列2:Value)
image.png

Excelから50000行のレコードを読み込み、コレクションに格納。
ここまで準備できたらさっそく検証です。

FilterCollection ⇒ Read Collection Fieldの場合

image.png

アクション:絞り込み

image.png
image.png

アクション:値取得

image.png
image.png

動かしてみる

デバッグスピードは標準
test1.gif

Dictonary変換 ⇒ Keyに紐つくValue取得の場合

image.png

動かしてみる

デバッグスピードは標準
test2.gif

結果

50000行のレコードではそれほどスピードに大差はありませんでした。
Dictionary使うもよし、コレクションを絞り込むもよし。

ただ、コレクション絞り込みの方法だと
単純にアクション数が増えてしまうのと、inputの設定が多少面倒なので
Dictionaryを使うメリットはあるかなーと思います。
少しだけDictionary使ったほうが早い気もしますし。。。

今回はコードステージでやってしまいましたが、使う際はちゃんとオブジェクト化しましょう。

余談

取得レコード数が2000~3000行程度でも、Get Worksheet as Collection Offsetが固まる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3