LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-11-10

経緯・趣旨

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

方法

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

アクション全体

Utility - Collection Manipulation を拡張し、フィールド名をマッチングして返却アクションを作成しました。
image.png

入力

image.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

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

コード

入力

※オブジェクトの入力と同じ

出力

image.png

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

コード

image.png

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

Master Collection Test

フィールドm1とm2にフィールド名の返還前後のパラメータを入れています。
image.png

アクションページの冒頭で各テスト用パラメータをセットしています。
今回の例は、コレクション:Collection In Testフィールド:フィールドc1を、マスタのフィールド:フィールドm2に格納されている名前に変換する例です。
image.png

実行結果

image.png

Collection Out

フィールドc1, c2は変換マスタに従って、それぞれテスト1, テスト2に変換されていることが分かるかと思います。
フィールドc3については変換マスタにデータがなかったため、Column1という名前が自動的に命名されています。
image.png

0
0
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
0
0