トリガ

GT.Mは、一致するグローバルノード上のデータベースを更新する操作に応答して、定義されたアクションを自動的に実行するトリガー・メカニズムを設定できます。トリガのメカニズムは、Mコード(トリガコード)のフラグメントをデータベースの更新 "前" または データベースの更新の "一部" として実行します。このメカニズムの仕様は、トリガ定義ファイル(Trigger Definition File) で定義できます。KILL(ZKILL)のトリガで、GT.Mは、KILL操作の "前" に、トリガのコードを実行します。たとえば、KILL ^CIF(:,1) のトリガは、古いクロスリファレンスをクリアすることがあります。セットでのトリガで、GT.Mは、SET操作の一部として、トリガのコードを実行します。トリガロジック内では、ISVは$ ZTOLDVAL前に更新するグローバルノードの値への読み取りアクセスを提供し、$ ZTVALUE /仮SET値へのアクセスを読み書きします。これは、GT.Mがデータベースへそれをコミットする前に、仮のSET値を変更することを許可します。SETトリガが、SET操作と密接に実行することは、その条件が一部を意味する。それは、まだデータベースを、仮の新しい値は、コミットされていませんが、プロセスとして割り当てられているが、表示されるため、グローバルノードのSETはとの巣トリガを再帰的に - プロセスは仮の値に任意の改正を行うには、ドルをZTVALUE設定する必要が病理学的条件。GT.Mは内部的に一連のSET操作を実行し、GT.Mが内部的にSET操作を実行する$INCREMENT() 操作を実行している間、GT.MはMERGE更新中にSETトリガを実行します。すべてのトリガーについて、GT.Mは、データベース更新イベントとトリガされたアクションをAtomic(原子的)(すべてまたは何もない)トランザクションとして処理します。トリガはアプリケーション・コードを使用し、常に暗黙的または明示的なTPトランザクションの一部であるため、トリガ・コードはTPドキュメンテーションで説明されているACID規則に準拠する必要があります。

トリガは、次のようなアプリケーションのニーズを満たしています(ただしこれに限定されません):

  1. スキーマレベルの整合性を強制する:通常のMアプリケーションで作成された データベーススキーマが暗に示されるまで、Mアプリケーションは、アプリケーションのスキーマを維持し強制的に適用するために、ロジックを実装します。スキーマレベルの整合性の適用を強制するためにトリガを使用は、すべてのプロセスを、均一性のあるコード、増加するコードのモジュール、保守を呼び出すことを確実にします。

  2. 1つ以上の非主キー(non-primary key)のインデックスの確保を、アプリケーションに許可します。たとえば、顧客IDを格納するグローバルノードへ更新する時のトリガは、名前のインデックスを確保することができます。

  3. ビジネスロジックの実装:たとえば、アカウントの更新が、自動的に関連するアカウントへの更新をトリガすることができます。

  4. レプリケーションのトラフィックを削減:トリガ更新ではなく、 GT.Mレプリケーション・ストリームにのみトリガするアップデートを運ぶので、ネットワーク・トラフィックが削減されます。

  5. 自動化アプリケーションは、ログや、ジャーナリングの更新や、履歴の記録維持を定義します。トリガは、これらを制御するために使用することができます。

  6. 参照の整合性を実装:たとえば、トリガは、非アクティブなアカウントによるの銀行取引におけるポスティングを防ぎ、ルール違反のメッセージを表示することができます。

  7. デバッグ:複数の同時アクセスがあるアプリケーションのデバッギングは難しいです。不正なアクセスをトラップするために、グローバル変数の更新時に"watch points" を設定するために、トリガを使用することができます。例えば、アプリケーションで失敗があれば、あるグローバル変数のノードには不正確な値があるか、または、以前に設定される値は見えなくなります。トリガは、トラップするようなすべてのアクセスに使用することができます。

  8. データフローの実装に基づくプログラミングパラダイム:トリガの実装自体が主な目的ではないが、データフローのプログラミング・パラダイムを使用するアプリケーションの実装のために、それらを使用することができます。

inserted by FC2 system