Magic xpi 4.13技術情報
1. DatabaseTriggerの使い方

1.1 DatabaseTriggerとは

  • Magic xpi のDatabaseTriggerを使用すると、データベースのテーブルを監視し、テーブルにデータが挿入・更新・削除されたタイミングで、xpiのフローを起動することができます。

DatabaseTriggerとは

1.2 サポートするデータベース

  • DatabaseTriggerがサポートするデータベースは下記の通りです。
DBMS バージョン
MS-SQL 2008, 2008R2, 2012, 2014, 2016, 2017, 2019
Oracle 12c, 18c, 19c
DB2 UDB 9.7
DB2/400 V7R1, V7R2, V7R3, V7R4
MySQL 5.x
PostgreSQL 11

1.3 DatabaseTrigger動作の仕組み

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

DatabaseTrigger動作の仕組み

2.1 JDBCドライバの準備

  • DatabaseTriggerは、それぞれのDBMS用のJDBCドライバを使用してデータベースに接続します。
  • xpiをインストールすると、MS-SQL用のJDBCドライバのみインストールされます。
  • MS-SQL以外のDBMSを使用する場合は、「2.3 サービスとイベントの定義」の前に、使用するDBMSのJDBCドライバを下記フォルダに配置する必要があります。

    <xpi インストールフォルダ>\Runtime\Java\DatabaseDrivers

 

  • 各DBMS用のJDBCドライバの入手方法は下記の通りです。
DBMS JDBCドライバの入手方法
MS-SQL xpi のインストール時にインストールされる
Oracle OracleのHPよりダウンロードする(Oracleプロファイルへのサインインが必要)

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

DB2 IBMのHPよりダウンロードする

https://www.ibm.com/support/pages/db2-jdbc-driver-versions-and-downloads

DB2/400 接続先のIBM iより取得する

/qibm/ProdData/HTTP/Public/jt400/lib/jt400.jar

MySQL MySQLのHPよりダウンロードする(Oracleプロファイルへのサインインが必要)

https://dev.mysql.com/downloads/connector/j/

PostgreSQL PostgreSQLのHPよりダウンロードする

https://jdbc.postgresql.org/download.html

※ xpi 4.13は、JDK1.8で動作しています。JDK1.8に対応したJDBCドライバを入手、使用してください。

2.2 設定ファイルのパラメータ設定

  • 監視対象のテーブルが変更された順序通りに、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」に設定し、パフォーマンスを優先させることもできます。

2.3 サービスとイベントの定義

【サービスの作成】

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

サービスの作成

 

【サービスの作成】

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

サービスの作成

 

【サービスの設定例 MS-SQL①】

  • それぞれの設定項目に設定する場合

MS-SQL

 

JDBC URL jdbc:sqlserver://<IPアドレス>:<ポート番号>
データベース名 <データベース名>
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 MS-SQL②】

  • Windows認証を使用する場合

MS-SQL

 

JDBC URL jdbc:sqlserver://<IPアドレス>:<ポート番号>;databaseName=<データベース名>;

integratedSecurity=true

データベース名 (設定しない)
ユーザ名 (設定しない)
パスワード (設定しない)
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 Oracle①】

  • SIDを使用する場合

Oracle

JDBC URL jdbc:oracle:thin:@<IPアドレス>:<ポート番号>:<SID>
データベース名 <データベース名> ※ここでいうデータベース名とは、ユーザ名(スキーマ名)と同義
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 Oracle②】

  • サービス名を使用する場合

Oracle②

 

JDBC URL jdbc:oracle:thin:@<IPアドレス>:<ポート番号>/<サービス名>
データベース名 <データベース名> ※ここでいうデータベース名とは、ユーザ名(スキーマ名)と同義
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 DB2/400】

  • それぞれの設定項目に設定する場合

DB2_400

 

JDBC URL jdbc:as400://<IPアドレス>/
データベース名 <ライブラリ名>
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 MySQL】

  • それぞれの設定項目に設定する場合

MySQL

 

JDBC URL jdbc:mysql://<IPアドレス>:<ポート番号>/
データベース名 <データベース名>
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

【サービスの設定例 PostgreSQL】

  • それぞれの設定項目に設定する場合

PostgreSQL

 

JDBC URL jdbc:postgresql://<IPアドレス>:<ポート番号>/
データベース名 <データベース名>
ユーザ名 <ユーザ名>
パスワード <パスワード>
クリーンアップ期間(日) TriggerActionテーブルの処理済みのレコードを削除するまでの日数を指定

 

 

【イベントの定義】

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

イベントの定義

 

【イベントの定義】

  • イベントの詳細を設定します。一つのサービスに対して複数のイベントを定義できます。

イベントの詳細を設定

2.4 DBMSのデータベーストリガーの作成

【データベーストリガーの作成】

  • xpiのDatabaseTriggerを使用するためには、対象のDBMSにデータベーストリガーを作成する必要があります(P.9参照)。
  • イベントの定義(P.27参照)を行うと、DBMSのデータベーストリガーを作成するためのテンプレートスクリプトが、下記フォルダに作成されます。

   <xpi プロジェクトフォルダ>\Service\<サービス名>\EventActionScripts\<イベント名>_trigger.sql

  • テンプレートスクリプトを修正し、各DBMSのクライアントツールにてスクリプトを実行します。
DBMS クライアントツール(例)
MS-SQL SQL Server Management Studio
Oracle SQL Developer
DB2 IBM Data Studio
DB2/400 System i ナビゲーター
MySQL MySQL Workbench
PostgreSQL pgAdmin

 

【テンプレートスクリプトの修正】

  • データベーストリガーはTriggerActionテーブルにレコードを挿入します。
  • TriggerActionテーブルの「Payload」列に設定される値を編集します。

TriggerActionテーブル

列名 データ型(DBMS依存) 備考
ActionId 数値 1から連番が振られる
SchemaName 文字(200) スキーマ名(データベース名)が設定される
TriggerTableName 文字(200) 監視対象のテーブル名が設定される
ActionType 文字(1) アクションタイプが設定される

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

TriggerStatus 数値 レコード挿入時はデフォルト値「0:未処理」が設定される

xpiのDatabaseTrigger処理時に「1:処理済」に更新される

Payload 文字(1000)※ 更新後の列の値(削除時は削除前の列の値)が設定される
CreatedDateTime 日時 レコード挿入時のシステム日時が設定される

※ Payload列の長さは1000文字となっていますが、足りない場合は各DBMSのクライアントツールでテーブル定義を変更してください。

 

 

【テンプレートスクリプトの修正】

  • 「FieldName1」、「FieldName2」の部分を実際の列名に書き換えます。
  • 必要に応じて列を追加します。
  • テンプレートの書式は「$$」区切りですが、書式は自由に変更して構いません。
  • 文字型以外の列は、関数を使用して文字型に変換しないと実行時にエラーとなることがあります。

 

< MS-SQLのテンプレートのPayLoadをXML形式に修正する例 >

テンプレートスクリプトの修正

2.5 DatabaseTriggerの設定

  • ツールボックスからDBTriggerをトリガーエリアにドラッグ&ドロップします。
  • プロパティペインで「2.3」章で作成したサービスを選択します。

DBTrigger

 

  • DBTriggerをダブルクリックし設定画面を開きます。
  • トリガーイベントを選択し、ポーリング時間(分)を入力します。
  • 結果を受け取る変数を選択します。

DBTriggerをダブルクリック

 

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

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

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