DBMotoでは複雑なレプリケーションを実現するためにVBスクリプトを使用することが出来ますが、
他にもユーザ様が作成した外部DLLを使用することも可能です。
これを使用することで、レプリケーション時にレコードを変換することが可能となります。
●外部DLLの準備
Visual Studio等で下記のようなDLLを準備します。
※サンプル1(小文字を大文字にする関数、DBMoto⇒DBMOTOなど)
※サンプル2(大文字を小文字にする関数、DBMoto⇒dbmotoなど)
準備したDLLはDBMotoインストールディレクトリに格納します。
※DBMotoインストールディレクトリ以外では動作しませんのでご注意ください。
●DBMoto側の準備
予めソース、ターゲット、レプリケーションの設定は済ませておきます。
レプリケーション名を右クリックし、Replication Propertiesを押下します。
Use Scriptにチェックを入れ、Scriptボタンを押下します。
スクリプト画面が開きますので、下記赤枠のボタンを押下します。
References画面が開きますので、配置したDLLのパスを入力し、Addを押下します。
今回は準備した2つのDLLを追加しました。
スクリプト画面にて、下記のスクリプトを使用します。
Imports System
Imports System.Data
Imports Microsoft.VisualBasic
Imports DBMotoPublic
Imports DBMotoScript
Imports DBRS.GlobalScript
Namespace DBRS
Public Class ReplicationScript : Inherits IReplicationScript
Public Overrides Sub Record_onAfterMapping(recSource As IRecord, recTarget As IRecord, ByRef AbortRecord As Boolean)
If recSource.OperationType = enmOperationType.Insert Then
if Not recTarget.GetValueAfter(2) Is Nothing Then
recTarget.SetValueAfter(2, ClimbDBMoto.Class1.getUpperCase(recTarget.GetValueAfter(2).ToString))
End if
if Not recTarget.GetValueAfter(1) Is Nothing Then
recTarget.SetValueAfter(1, ClassLibrary1.Class1.getLowerCase(recTarget.GetValueAfter(1).ToString))
End if
End If
End Sub
End Class
End Namespace
スクリプト画面にて、下記赤枠のボタンを押下し、コンパイルチェックします。
●レプリケーション実行
実際にレプリケーション(リフレッシュ)を実行し、DLLの関数が使用されているか確認します。
※ソース側は下記のテーブルです。
※レプリケーション(リフレッシュ)実行後
赤枠のレコードは、大文字が全て小文字に、青枠のレコードは小文字が全て大文字になっていますので、
正しくDLLを使用していることが確認できました。
このようによく使用する関数をDLLにしておくことで、DBMotoから簡単にスクリプトを記述するだけで
複雑なレプリケーションが実現可能となります。
今回は単純に大文字や小文字にするシンプルな関数を使用しましたが、
他にもいろいろなことができ、その可能性は無限大です。
関連したトピックス
- [DBMoto][スクリプト]条件付きレプリケーションを行うサンプルVBスクリプト
- [Syniti(DBMoto)][スクリプト] 特定カラムの値が変更となった場合、ターゲットのレコードを削除するサンプルスクリプト
- [DBMoto]「未マッピング使用」機能によるマッピング外のデータを活用したレプリケーション
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方④:レプリケーションスクリプト
- 2つのソーステーブルからターゲットの一つのレコードにレプリケーション
- ミラーリングおいてのレコード数を確認の方法【リアルタイムレプリケーションツールDBMoto】
- AS/400でのレコード全消去時における、DBMotoによるミラーリング動作
- [Syniti(旧DBMoto)]レコード競合(コンフリクト)発生時のレコード内容を出力する方法
- ・レプリケーションの所要時間を計測する手法【リアルタイムレプリケーションツールDBMoto】
- Syniti Data Replication (旧DBMoto)でのスクリプトの書き方③:グローバルスクリプト用の関数とイベント