[DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)


DBMotoでは通常のレプリケーションに加え、複製元(ソース)のデータを関数を使用して変換し、複製先(ターゲット)にレプリケーションを行う機能が実装されております。

使用できる関数は以下の通りです。

・C#の関数
・VBの関数
・ユーザ関数

C#、VBの標準関数を使用できる他、DBMoto内に関数をオリジナルで定義し、ユーザ関数としてご利用いただくことも可能です。

例:
・Trim関数:前後の空白を除去する 「  テーブルデータ  」⇒「テーブルデータ」
・Ucase関数:小文字を大文字へ変換する 「Table Data」⇒「TABLE DATA」
・日付型を数値のみに変換する独自のユーザ関数 「2015/05/26」⇒「20150526」

●言語の選択

C#とVBをDBMoto内で混在させることはできないため、どちらか一方に統一する必要があります。以下の手順でC#とVBの切り替えが可能です。

1. グローバルスクリプト画面を開きます。
20150526-01

2. スクリプト言語からC#かVBを選択します。デフォルトはC#です。
20150526-02

●関数適用手順

1. テーブルのカラム単位でマッピングがされているので、関数を適用するカラムを右クリックし「関数へのマッピング」を選択します。
20150526-0320150526-0420150526-05

2. カラムに対して関数を適用します。下記の画面ではVBのTrim関数を適用している例です。
※VBの場合は[カラム名].Trim()、C#の場合は[カラム名].ToString().Trim()
20150526-06

3. 関数適用後は。マッピングの矢印の色が緑に変わります。
20150526-07

●ユーザ関数作成・適用手順

ユーザ関数はまずグローバルスクリプトにて関数を定義し、次にマッピング画面で関数名を指定する手順となります。

1. グローバルスクリプト内のGlobalクラス内に関数を定義します。下記の画面ではVBにてユーザ関数を定義しています。
20150526-08

2. ユーザマッピング画面で1で定義した関数名を指定します。
20150526-09

●特定の文字に変換するための置換関数

ソースのデータを特定の文字に変換する際にはReplace関数を使用します。
以下の例ではソースの「愛」という文字を「あい」へ変換してレプリケーションします。VBとC#どちらも同じです。

[カラム名].Replace("愛", "あい")

Replace関数はUnicodeの文字コードも指定可能です。
VBの場合は下記のように記述できます。

' 「ChrW(&Hxxxx)」のxxxxにUnicodeを記載します。愛が「611B」
[カラム名].Replace(ChrW(&H611B), "あい")

C#の場合は下記のように記述できます。

// 「\uxxxx」のxxxxにUnicodeを記載します。愛が「611B」
[カラム名].Replace("\u611B", "あい");

●関数の一括設定

関数をマッピング画面でカラム単位で1つずつ設定するのはどうしても時間がかかります。この時間を短縮し、一括で設定することが可能です。

1. 関数の一括設定はグローバルスクリプト内のMappingRuleクラスにて記述します。
下記の例ではVBでVARCHARのカラムに対し、Replace関数にて「愛」を「あい」へ変換する設定を一括で行うための内容です。
20150526-10

Imports System
Imports System.Data
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript

Namespace DBRS
    Public Class GlobalScript : Inherits IGlobalScript

    End Class

    Public Class MappingRule : Inherits IMappingRule
        <MappingRuleAttribute("Replace(VARCHAR)", "「愛」を「あい」へ変換")> _
        Public Function Function1 (ByVal bIsForth As Boolean, ByVal sSourceName As String, ByVal iSourceOrdinal As Integer, ByVal sSourceType As String, ByVal sTargetName As String, ByVal iTargetOrdinal As Integer, ByVal     sTargetType As String, ByRef sExpression As System.Text.StringBuilder) As Boolean

            If sSourceName = sTargetName Then
                If sSourceType = "VARCHAR" Then
                    sExpression.Append("[" + sTargetName + "].Replace(ChrW(&H611B), ""あい""")
                End If
                Return True
            Else
                Return False
            End if 

        End Function
    End Class

    Public Class GlobalEvents : Inherits IGlobalEvents

    End Class
End Namespace

2. マッピング画面にて「カスタムマッピング」から該当のものを選択します。
20150526-11

3. 一括で設定されていることを確認します。
20150526-12

関連したトピックス

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください