このタイプの関数ではレプリケーションを定義する際の、フィールド(カラム)マッピングのソース列とターゲット列を識別するために使用できます。デフォルトでの動作はソーステーブルとターゲットテーブルのカラムの一致する名前を対応付けします。
マッピングルールの実装
- グローバルスクリプトを作成するメタデータを選択します。
- マウスの右ボタンメニューから、[グローバルスクリプト]を選択します。
- グローバルスクリプトエディタで、マッピング・ルールを以下に追加します。
VB.NET: Public Class MappingRule : Inherits IMappingRule
C#: public class MappingRule : IMappingRule - MappingRuleAttribute定義します。この定義はフィールドをマッピングを指定するレプリケーションウィザードやレプリケーションプロパティのマッピングで表示されます。一つ目の文字列はカスタムマッピングのサブメニューで表示されるテキスト、二つ目の文字列は関数のツールチップの説明として表示されます。
- 以下の例のように、関数を記述します。関数のパラメーターは、以下の例のパラメーターと一致する必要があります。これらのパラメーターは、関数で使用できます。
- グローバルスクリプトをコンパイルして、関数が正しくコンパイルされることを確認します。正しくコンパイルされた場合にのみ、[自動マッピング]メニューで使用できます。
フィールドマッピング関数の例
以下の例ではソーステーブル、ターゲットテーブルのカラムいずれかに4文字の接頭辞が使用されている場合に、その接頭辞をスキップし、名前を比較するための関数を作成しています。
VB.NETの例
Public Class MappingRule : Inherits IMappingRule
<MappingRuleAttribute("Match By Target Prefix", "ターゲットの接頭辞'fld_'を考慮して名前を一致")>
Public Function CustomMapping_ByNameTPrefixed (
ByVal sSourceName As String,
ByVal iSourceOrdinal As Integer,
ByVal sTargetName As String,
ByVal iTargetOrdinal As Integer) As Boolean
If sTargetName.Length >= 4 Then
Return (String.Compare(sSourceName, sTargetName.SubString(4), True) = 0)
Else
Return False
End If
End Function
<MappingRuleAttribute("Match By Source Preffix", "ソースの接頭辞'fld_'を考慮して名前を一致")>
Public Function CustomMapping_ByNameSPrefixed (
ByVal sSourceName As String,
ByVal iSourceOrdinal As Integer,
ByVal sTargetName As String,
ByVal iTargetOrdinal As Integer) As Boolean
If sSourceName.Length >= 4
Return (String.Compare(sSourceName.SubString(4), sTargetName, True) = 0)
Else
Return False
End If
End Function
<MappingRuleAttribute("Match Custom", "特定のカスタムルールを考慮して名前を一致")>
Public Function MyCustomMapping (
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
/// ...
End Function
<MappingRuleAttribute("Match Custom Extended Params", "特定のカスタムルールを考慮して名前を一致")>
Public Function MyCustomMapping (
ByVal bIsForth As Boolean,
ByVal sSourceName As String,
ByVal iSourceOrdinal As Integer,
ByVal sSourceType As String,
ByVal bIsSourcePrimaryKey As Boolean,
ByVal bIsSourceNullable As Boolean,
ByVal iSourceSize As Integer,
ByVal sSourcePrecision As Short,
ByVal sSourceScale As Short,
ByVal sTargetName As String,
ByVal iTargetOrdinal As Integer,
ByVal sTargetType As String,
ByVal bIsTargetPrimaryKey As Boolean,
ByVal bIsTargetNullable As Boolean,
ByVal iTargetSize As Integer,
ByVal sTargetPrecision As Short,
ByVal sTargetScale As Short,
ByRef sExpression As System.Text.StringBuilder) As Boolean
/// ...
End Function
End Class
C#の例
using System;
using System.Data;
using DBMotoPublic;
using DBMotoScript;
namespace DBRS
{
public class GlobalScript : IGlobalScript
{
}
public class MappingRule : IMappingRule
{
[MappingRuleAttribute("Match By Target Prefix", "ターゲットの接頭辞'fld_'を考慮して名前を一致")]
public bool CustomMapping_ByNameTPrefixed (String sSourceName, int iSourceOrdinal, String sTargetName, int iTargetOrdinal)
{
if (sTargetName.Length >= 4)
{
return (String.Compare(sSourceName, sTargetName.Substring(4), true) == 0);
}
else
{
return false;
}
}
[MappingRuleAttribute("Match By Source Prefix", "ソースの接頭辞'fld_'を考慮して名前を一致")]
public bool CustomMapping_ByNameSuffixed (String sSourceName, int iSourceOrdinal, String sTargetName, int iTargetOrdinal)
{
if (sSourceName.Length >= 4)
{
return (String.Compare(sSourceName.Substring(4), sTargetName, true) == 0);
}
else
{
return false;
}
}
[MappingRuleAttribute("Match Custom", "特定のカスタムルールを考慮して名前を一致")]
public bool MyCustomMapping(bool bIsForth, String sSourceName, int iSourceOrdinal, String sSourceType,
String sTargetName, int iTargetOrdinal, String sTargetType, ref System.Text.StringBuilder sExpression)
{
// ...
return true;
}
}
public class GlobalEvents : IGlobalEvents
{
}
}
パラメータ一覧
関数で利用できるパラメータは以下の通りです。
パラメータ | 説明 |
bIsForth | シンクロナイゼーションにおけるマッピングで順方向であれば、TRUE、逆方向であればFALSEを使用。 たとえば、bIsForthがTrueの場合、名前でマッピングを適用、bIsForthがFalseの場合は、別のルールを適用するというように、これにより、マッピングの両方向を処理するスクリプトを作成でき、 |
sSourceName | ソースカラムの名前 |
iSourceOrdinal | ソースカラムの順序位置(整数) |
sSourceType | ソースカラムのタイプ(元のデータベースタイプ)。 たとえば、すべてのVARCHAR列のマッピングにTrim関数を適用するといったように、これを使用して、特定のデータ型で機能するカスタムマッピングルールを作成できます。 |
bIsSourcePrimaryKey | ソースフィールドが主キーであるかどうか |
bIsSourceNullable | ソースフィールドでNULLが許可されているかどうか |
iSourceSize | 整数で表されるソースフィールドのサイズ |
sSourcePrecision | short型で表されるソースフィールドの精度 |
sSourceScale | short型で表されるソースフィールドのスケール |
sTargetName | ターゲットカラムの名前 |
iTargetOrdinal | カラムの順序位置(整数) |
sTargetType | ターゲットカラムのタイプ(元のデータベースタイプ) |
blsTargetPrimaryKey | ターゲットフィールドが主キーであるかどうか |
bIsTargetNullable | ターゲットフィールドでNULLが許可されているかどうか ターゲットフィールドでNULLが許可されているか確認し、許可されていない場合に、NULL値がターゲットに渡されるケースを回避できます。 |
iTargetSize | 整数で表されるターゲットフィールドのサイズ |
sTargetPrecision | short型で表されるターゲットフィールドの精度 |
sTargetScale | short型で表されるターゲットフィールドのスケール |
sExpression | 関数からSyniti DRへ返すことができる参照パラメータ これにより、特定の式をマッピングに適用できます。 以下の例ではVARCHARのすべてのターゲットカラムに対してグローバル関数MyGlobalFunctionを呼び出す式を定義しています。 If sTargetType = “VARCHAR” Then sExpression.Append( “MyGlobalFunction([” + sSourceName + “])”) End If |
関連したトピックス
- レプリケーションの際にnullを特定の値に変換する方法 その2【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]関数を使用してレプリケーション時のデータを変換する方法(VB/C#言語選択、関数適用、ユーザ関数作成、置換関数、一括設定手順)
- テーブル一括作成やマッピングをカスタマイズ:グローバルスクリプト[Syniti Replicate]
- ジュリアンデートのレプリケーション【リアルタイムレプリケーションツールDBMoto】
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方③:グローバルスクリプト用の関数とイベント
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方②:グローバルスクリプト
- レプリケーションの際にnullを特定の値に変換する方法 その1【リアルタイムレプリケーションツールDBMoto】
- [DBMoto]Oracle順序オブジェクト(シーケンス)のレプリケーションをスクリプトで実現
- 任意のデータ型でターゲットテーブル作成[DBMoto]