Magic xpiトレーニングテキスト
20. データベーストリガーの使い方

20.1 DBTrigger

【DBTrigger】

  • DBTriggerを使用すると、データベースのテーブルを監視し、テーブルにデータが挿入・更新・削除されたタイミングで、xpiのフローを起動することができます。
  • DBTriggerがサポートするデータベースは下記の通りです。
DBMS バージョン
MS-SQL 2008, 2008R2, 2012, 2014, 2016, 2017
Oracle 12c, 18c, 19c
DB2 UDB 9.7
DB2/400 V7R1, V7R2, V7R3
MySQL 5.x
PostgreSQL 11

【DBTrigger動作の仕組み】

  • 監視対象のテーブルが更新されると、DBMSのトリガーがTriggerActionテーブルを更新します。
  • xpiのDBTriggerは、TriggerActionテーブルを監視し、フローを起動します。

DBTrigger動作の仕組み

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

DBTriggerのパラメータ設定

※ このパラメータを「Y」に設定すると、パラメータを省略または「N」に設定した場合に比べ、若干、処理速度が遅くなります。

※ 順番を担保しなくてもよい場合は、パラメータを省略または「N」に設定し、パフォーマンスを優先させることもできます。

※ 設定ファイルをテキストエディタで編集する際は、xpiスタジオ、xpiサーバ、Magicモニタを停止した状態で行ってください。

20.3 商品マスタが挿入されたらメールで通知

【仕様】

  • 商品マスターテーブルにDBTriggerを設定します。
  • 第7章で作成した「ファイル監視」フローの監視フォルダにCSVファイルを配置します。
  • 商品マスターテーブルに1行挿入されます。
  • DBTriggerが起動し、商品マスターにレコードが挿入されたことをメールで通知します。

 

【フロー完成イメージ】

フロー完成イメージ

 

【DBTriggerサービスの作成】

  • xpi スタジオのメニュー > プロジェクト > 設定より設定画面を開きます。
  • 左ペインで「サービス」を選択し「追加」ボタンを押します。
  • サービスタイプ「DBTrigger」のサービスを作成します。

DBTriggerサービスの作成

 

サービスタイプ DBTrigger
サービス名 MSSQLTrigger

 

  • 右ペインに接続情報を入力し、検証ボタンで接続できるか確認します。

右ペインに接続情報を入力し、検証ボタンで接続できるか確認します。

 

JDBC URL jdbc:sqlserver://localhost:1433
データベース名 iBOLTTest
ユーザ名 sa
パスワード mgtr
クリーンアップ期間(日) 15

 

【TriggerActionテーブルの自動生成】

  • リソース設定画面の検証ボタン押下時、接続に成功すると、対象のDBMSにTriggerActionテーブルが自動生成されます。

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イベントの定義】

  • サービスの設定画面で「イベント」ボタンを押します。

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の配置

 

【エラーコードの自動追加】

  • DBTriggerコンポーネントはxpiのコネクタビルダを使用して作られています。
  • コネクタビルダで作成されたコンポーネントをはじめてプロジェクトに配置する際、エラーリポジトリにそのコンポーネントのエラーコードが自動的に追加されます。

エラーコードの自動追加

 

【コネクタビルダ】
xpiの標準コネクタ以外に、ユーザ独自のコネクタを開発することができる機能UIの開発は.NET、ランタイムの開発は.NET、Java、Magic xpaのいずれかを選択可能

 

【DBTriggerの設定】

  • 貼り付けたDBTriggerをダブルクリックし、以下のように設定します。

DBTriggerの設定

 

戻り値 変数に格納される内容
戻り値(テーブル名) TriggerActionテーブルのTriggerTableName列の値
戻り値(アクションタイプ) TriggerActionテーブルのActionType列の値

挿入:「C」、更新:「U」、削除:「D」

戻り値(Payload) TriggerActionテーブルのPayload列の値

P.18で編集した値が取得できます

 

【Emailコンポーネントの配置】

  • ツールボックスからEmailコンポーネントをフローエリアにDrag&Dropします。

Emailコンポーネントの配置

 

【Emailコンポーネントの設定】

  • Emailコンポーネントをダブルクリックし、設定画面を開きます。
  • 「追加」ボタンでメソッドを追加し、「Quick Send」を選択します。
  • 右ペインで「Quick Send」メソッドの詳細を設定します。

Emailコンポーネントの設定

 

To ‘postmaster@ibolt.com’
件名 ‘商品マスタが挿入されました’
ボディ C.ペイロード

 

  • 以上でフローの作成は終了です。

以上でフローの作成は終了

 

【プロジェクトデバッグ】

  • メニュー > デバッグxpi > デバッグ開始をクリックします。

プロジェクトデバッグ

 

【ファイルの配置】

  • CSVファイルを監視フォルダにコピーします。

ファイルの配置

 

【ファイルの確認】

  • ファイルが移動されたことを確認します。

ファイルの確認

 

【Magic モニタの確認】

  • Magic モニタで実行状況を確認します。

Magic モニタの確認

ディレクトリスキャナのポーリング間隔は3秒なので、ファイル監視フローはすぐに実行されますが、DBTriggerのポーリング間隔は1分なので、メール通知フローが実行されるまで少し時間がかかります。

 

【メールの確認】

  • Mozilla Thunderbirdを起動して、通知メールが届いたことを確認します。
  • メニュー > デバッグxpi > デバッグ停止でデバッグを停止します。

メールの確認