コレクションの全フィールドを変換マスタに従って変換する

## 経緯・趣旨
あるコレクションのフィールド全体が英語名になっているため、全て日本語に変換したい。
変換マスタはコレクションとして用意できているが、各フィールド名をループで見回って、Utility - Collection Manipulation::Set Collection Fieldで変換していくのはちょっとスマートではない。

## 方法
変換マスタに従い、変換したフィールド名のリストをコレクションとして出力し、そのコレクションをUtility - Collection Manipulation::Rename Collection Fieldsを使って一気に入れ替える。
今回作成したアクションは前者の「変換マスタに従い、変換したフィールド名のリストをコレクションとして出力」までを行います。

## アクション全体
Utility - Collection Manipulation を拡張し、**フィールド名をマッチングして返却**アクションを作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/4777b252-bcf2-b3d6-e9e5-68ea3dd2ce9b.png)

## 入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/46e0524f-3a4a-d2cc-48f9-c7b5efbd8cef.png)

| 名前 | 説明 | データ型 | 保管先 |
|:-----------|------------:|------------:|------------:|
| Collection In | フィールド名を変換したいコレクション | コレクション | Collection In |
| Master Collection | フィールド名の変換マッチングマスタ | コレクション | Master Collection |
| Target Column Name | 変換対象のフィールド名 | テキスト | Target Column Name |
| Master Key Column Name | マスタの検索キーとなるフィールド名 | テキスト | Master Key Column Name |
| Master Convert Column Name | 変換後の名前が格納されているフィールド名 | テキスト | Master Convert Column Name |

## 出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/077e4881-445e-5987-02f4-dab7d09fc73a.png)

| 名前 | 説明 | データ型 | 保管先 |
|:-----------|------------:|------------:|------------:|
| Collection Out | | コレクション | Collection Out |

## コード
### 入力
※オブジェクトの入力と同じ

### 出力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/35ee7406-3256-5e72-e7f5-1a3efb63aafe.png)

| 名前 | データ型 | 保管先 |
|:-----------|------------:|------------:|
| Collection Out | コレクション | Collection Out |
| Success | フラグ | Success |
| Message | テキスト | Message |

### コード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/40235bde-16d5-b5e1-8935-a09fcdf81f51.png)

```vb
Try
    Dim count As Integer = 1

    Dim Convert_Header_Collection As New DataTable()
    Convert_Header_Collection.Columns.Add("Name", GetType(String))

    For Each InCol As DataColumn In Collection_In.Columns
        Dim chRow = Convert_Header_Collection.NewRow
        Dim columnExistFlg As Boolean = False
        For Each m_row In Master_Collection.Rows
            If m_row(Master_Key_Column_Name) = InCol.ColumnName Then
                chRow("Name") = m_row(Master_Convert_Column_Name)
                columnExistFlg = True
                Exit For
            End If
        Next
        If Not columnExistFlg Then
            chRow("Name") = "Column" & count
            count += 1
        End If
        Convert_Header_Collection.Rows.Add(chRow)
    Next
    
    Collection_Out = Convert_Header_Collection
    Success = True
Catch e as Exception()
    Message = e.ToString()
    Success = False
End Try
```

## 結果

以下、各テスト用のコレクション、データアイテムの値をセットします。

#### Collection In Test
フィールドc1～c3を定義し、中身は適当にしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/c604d2f2-7848-cdc4-5579-2dc5fb108d90.png)

#### Master Collection Test
フィールドm1とm2にフィールド名の返還前後のパラメータを入れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/a846e9f7-0f76-bf78-f543-e8a482486882.png)

アクションページの冒頭で各テスト用パラメータをセットしています。
今回の例は、**コレクション：Collection In Test**の**フィールド：フィールドc1**を、マスタの**フィールド：フィールドm2**に格納されている名前に変換する例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/c05f3088-4c63-c298-fad5-5b2651f30cbb.png)

### 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/47078755-81bc-6d17-bb5f-e307dba51bc2.png)

#### Collection Out
**フィールドc1, c2**は変換マスタに従って、それぞれ**テスト1, テスト2**に変換されていることが分かるかと思います。
フィールドc3については変換マスタにデータがなかったため、Column1という名前が自動的に命名されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186221/f9e5dcae-312f-a344-8d1f-b5af180a091a.png)