【BluePrism】Collectionでよく使うアクション

Collections, Collection Manipulationは非常によく使うオブジェクトの一つです。
特にCollection Manipulationは多数のアクションがありますが、よく使うものは限られます。

↓Collection Manipulationのアクション一覧です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/7f7594c0-3dd7-78a8-67ab-96a228dd3425.png)

見るからにいろいろできそうですが、個人的によく使うのは**5つくらい**です（笑）

- Collectionsオブジェクト
    - Add Row
    - Remove All Rows

- Collection Manipulationオブジェクト
    - Filter Collection
    - Append Rows to Collection
    - Set Collection Field

※**Append Rows to Collection**については、混同しやすい**Marge Collecton**と合わせて解説します。

##行追加
####Collectionsオブジェクト：Add Row
空行を追加する場合はこれです。
**Collection Manipulationオブジェクトではない**ことに注意です。
Collection Manipulationとは違い、コレクション名を**文字列で**指定する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/d0036394-c68c-36c2-c368-c5c26d657d12.png)

##一括削除
####Collectionsオブジェクト：Remove All Rows
例えば、ループ内で同じコレクション変数を使いまわしたい場合、
ループ冒頭でコレクションを初期化するときに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/b749e34f-8b05-28d0-8d66-ab0894e4019e.png)


##絞り込み
####Collection Manipulationオブジェクト：Filter Collection
絞り込み以外にも、コレクションデータの削除にも使えるので非常に便利です。

**絞り込んだ結果のコレクションを別のコレクションに保持できる**のがミソ。

下図の例では、絞り込み対象は**経路一覧コレクション**ですが、結果は**明細データ一覧**となっています。
元のコレクションには影響を与えず、新規のコレクションに結果を格納しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/7015e326-3b86-7eb7-fc8f-24d35a7c8934.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/12f0addb-22da-bfb4-48b7-1a442c29c73f.png)

入力・出力とも同じコレクションにすれば、データ削除としても活用できます。

##列結合
####Collection Manipulationオブジェクト：Marge Collection
列結合は**Marge Collection**です。
下図は「経路一覧1」「経路一覧1-1」コレクションを列結合する例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/4fbd9d3c-0ad1-fb12-2c30-59df8aba497d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/a11cbf8c-6e32-b3f3-4970-355ddf18f929.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/436b29a9-00aa-213a-6822-d7fc2a79dca4.png)
列結合結果はJoin結果というコレクションに格納するとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/46d6dfc2-c1cf-69fc-78b1-89c37ee9a814.png)

結果↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/6c698e41-a4ec-8f88-e443-cd9f4035c079.png)

結合する2つのコレクションで、重複する列名があった場合はエラーになってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/a83b9dff-7b27-7160-e416-ac1b36440bf6.png)


##行結合
####Collection Manipulationオブジェクト：Append Rows to Collection
行結合は**Append Rows to Collection**です。
**Marge Collection**と混同しやすいので注意しましょう。

下図は「経路一覧1」「経路一覧2」コレクションを列結合する例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/4fbd9d3c-0ad1-fb12-2c30-59df8aba497d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/7ef4fbea-8db7-1dd2-22e5-a7f2c9cfa6e5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/6367c4b1-1c49-dd50-3596-3cc3ad364b9a.png)
行結合結果はUnion結果というコレクションに格納するとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/0f66cf4f-6ad0-e866-b99e-39e9feb0c50d.png)

結果↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/dde14ed7-98ba-b977-ade3-fbba6e3af821.png)

結合する2つのコレクションで、列数・列名が異なる場合はエラーになってしまいます。

列数が異なる場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/772eadf3-7422-0639-4ae4-e3efea2727db.png)
列名が異なる場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/79ca04f6-c733-1f7b-008e-e04be429bb7b.png)

行追加（Append Rows to Collection）は、ベースとなるコレクションに1行ずつ追加していく処理などでよく使います。

##値代入
####Collection Manipulationオブジェクト：Set Collection Field
指定した行・列に対してパラメータを代入したい場合に使います。
行インデックスを別途変数に持たせる必要がある点に注意です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/efcc58e5-6ea7-2cdb-6bc7-92b7ec9654ad.png)