20.2 事前準備
【JDBCドライバの準備】 ※今回はMS-SQLを使用するので下記手順の実施は不要です。
- DBTriggerは、それぞれのDBMS用のJDBCドライバを使用してデータベースに接続します。
- xpiをインストールすると、MS-SQL用のJDBCドライバのみインストールされます。
- MS-SQL以外のDBMSを使用する場合は、使用するDBMSのJDBCドライバを下記フォルダに配置する必要があります。
<xpi インストールフォルダ>\Runtime\Java\DatabaseDrivers
【DBTriggerのパラメータ設定】 ※セミナー用マシンでは準備されているので下記手順の実施は不要です。
- 監視対象のテーブルが変更された順序通りに、xpiのトリガーを起動するためには、xpiの設定ファイルにパラメータを設定する必要があります。
- 設定ファイルの[MAGIC_IBOLT]セクションのDBTriggerSyncModeパラメータを「Y」に設定します。
- プロジェクトごとに個別に設定する場合は ifs.ini ファイルに、全プロジェクトで一括して設定する場合は magic.ini ファイルにパラメータを設定します。
設定ファイル |
パス |
ifs.ini |
<プロジェクトフォルダ>\ifs.ini |
magic.ini |
<Magic xpi インストールフォルダ>\Runtime\Magic xpa\magic.ini |
※ このパラメータを「Y」に設定すると、パラメータを省略または「N」に設定した場合に比べ、若干、処理速度が遅くなります。
※ 順番を担保しなくてもよい場合は、パラメータを省略または「N」に設定し、パフォーマンスを優先させることもできます。
※ 設定ファイルをテキストエディタで編集する際は、xpiスタジオ、xpiサーバ、Magicモニタを停止した状態で行ってください。
20.3 商品マスタが挿入されたらメールで通知
【仕様】
- 商品マスターテーブルにDBTriggerを設定します。
- 第7章で作成した「ファイル監視」フローの監視フォルダにCSVファイルを配置します。
- 商品マスターテーブルに1行挿入されます。
- DBTriggerが起動し、商品マスターにレコードが挿入されたことをメールで通知します。
【フロー完成イメージ】
【DBTriggerサービスの作成】
- xpi スタジオのメニュー > プロジェクト > 設定より設定画面を開きます。
- 左ペインで「サービス」を選択し「追加」ボタンを押します。
- サービスタイプ「DBTrigger」のサービスを作成します。
サービスタイプ |
DBTrigger |
サービス名 |
MSSQLTrigger |
- 右ペインに接続情報を入力し、検証ボタンで接続できるか確認します。
名 |
値 |
JDBC URL |
jdbc:sqlserver://localhost:1433 |
データベース名 |
iBOLTTest |
ユーザ名 |
sa |
パスワード |
mgtr |
クリーンアップ期間(日) |
15 |
【TriggerActionテーブルの自動生成】
- リソース設定画面の検証ボタン押下時、接続に成功すると、対象のDBMSにTriggerActionテーブルが自動生成されます。
【TriggerActionテーブルの構造】
列名 |
データ型(DBMS依存) |
備考 |
ActionId |
数値 |
1から連番が振られる |
SchemaName |
文字(200) |
スキーマ名(データベース名)が設定される |
TriggerTableName |
文字(200) |
監視対象のテーブル名が設定される |
ActionType |
文字(1) |
アクションタイプが設定される
挿入:「C」、更新:「U」、削除:「D」 |
TriggerStatus |
数値 |
レコード挿入時はデフォルト値「0:未処理」が設定される
xpiのDatabaseTrigger処理時に「1:処理済」に更新される |
Payload |
文字(1000) |
更新後の列の値(削除時は削除前の列の値)が設定される |
CreatedDateTime |
日時 |
レコード挿入時のシステム日時が設定される |
※後述するテンプレートスクリプトにおいては、TriggerActionテーブルのPayload列に格納する値を編集します。
【DBTriggerイベントの定義】
- サービスの設定画面で「イベント」ボタンを押します。
- 左下の「追加」ボタンでイベントを追加し、対象テーブルとアクションタイプを選択します。
- 一つのサービスに対して複数のイベントを定義できます。
【テンプレートスクリプトの自動生成】
- イベント設定画面の「OK」ボタン押下時、DBMSのデータベーストリガーを作成するためのテンプレートスクリプトが自動生成されます。
【テンプレートスクリプトの修正】
- TriggerActionテーブルのPayload列に格納する値を編集します。
- 列名(FieldName1、FieldName2)を実際の列名に修正します。
- テンプレートでは2列までしか記載されていませんが、必要に応じて列を追加します。
- テンプレートの書式は「$$」区切りですが、書式は自由に変更して構いません。
- 文字型以外の列は、関数を使用して文字型に変換しないと実行時にエラーとなることがあります。
修正前
SELECT DB_NAME(db_id()), ‘MSSQL商品マスター’, @ActionType,
[FieldName1] + ‘$$’ + [FieldName2] FROM INSERTED |
修正後
SELECT DB_NAME(db_id()), ‘MSSQL商品マスター’, @ActionType,
CONVERT(nvarchar,[商品番号]) + ‘, ‘ + RTRIM([商品名]) + ‘, ‘ +
CONVERT(nvarchar,[販売価格]) + ‘, ‘ + CONVERT(nvarchar,[仕入先コード]) FROM INSERTED |
【スクリプトの実行】
- SQL Server Management Studioでスクリプトを実行します。
- MSSQL商品マスターのデータベーストリガーが作成されたことを確認します。
【ビジネスプロセスとフローの作成】
- ビジネスプロセスを追加し、名前を「DBTrigger」に変更します。
- 追加されたフローの名前を「メール通知」に変更します。
【コンテキスト変数の定義】
- ソリューションエクスプローラーのプロジェクト名 > リポジトリ > コンテキスト変数をダブルクリックし、コンテキスト変数を定義します。
名 |
タイプ |
長さ |
C.テーブル名 |
Alpha |
30 |
C.アクションタイプ |
Alpha |
1 |
C.ペイロード |
Blob |
|
【DBTriggerの配置】
- 「メール通知」フローをダブルクリックし、フローエディタを開きます。
- ツールボックスからDBTriggerをトリガーエリアに貼り付けます。
【エラーコードの自動追加】
- DBTriggerコンポーネントはxpiのコネクタビルダを使用して作られています。
- コネクタビルダで作成されたコンポーネントをはじめてプロジェクトに配置する際、エラーリポジトリにそのコンポーネントのエラーコードが自動的に追加されます。
【コネクタビルダ】
xpiの標準コネクタ以外に、ユーザ独自のコネクタを開発することができる機能UIの開発は.NET、ランタイムの開発は.NET、Java、Magic xpaのいずれかを選択可能 |
【DBTriggerの設定】
- 貼り付けたDBTriggerをダブルクリックし、以下のように設定します。
戻り値 |
変数に格納される内容 |
戻り値(テーブル名) |
TriggerActionテーブルのTriggerTableName列の値 |
戻り値(アクションタイプ) |
TriggerActionテーブルのActionType列の値
挿入:「C」、更新:「U」、削除:「D」 |
戻り値(Payload) |
TriggerActionテーブルのPayload列の値
P.18で編集した値が取得できます |
【Emailコンポーネントの配置】
- ツールボックスからEmailコンポーネントをフローエリアにDrag&Dropします。
【Emailコンポーネントの設定】
- Emailコンポーネントをダブルクリックし、設定画面を開きます。
- 「追加」ボタンでメソッドを追加し、「Quick Send」を選択します。
- 右ペインで「Quick Send」メソッドの詳細を設定します。
【プロジェクトデバッグ】
- メニュー > デバッグxpi > デバッグ開始をクリックします。
【ファイルの配置】
【ファイルの確認】
【Magic モニタの確認】
ディレクトリスキャナのポーリング間隔は3秒なので、ファイル監視フローはすぐに実行されますが、DBTriggerのポーリング間隔は1分なので、メール通知フローが実行されるまで少し時間がかかります。 |
【メールの確認】
- Mozilla Thunderbirdを起動して、通知メールが届いたことを確認します。
- メニュー > デバッグxpi > デバッグ停止でデバッグを停止します。