トリガは、データベースの更新によって複数のトリガが設定されたときに、チェーンまたはネストされます。ネストされたトリガは、別のトリガによって始動されるトリガです。GT.Mは、各入れ子にされたトリガに最大127レベルまで入れ子レベルを割り当てます。ネストされたトリガは常にトリガされたアップデートを伴うAtomic(原子)ですが、GT.Mは、トリガされたアップデートの一部ではなく、それぞれのネストされたトリガに新しいトリガコンテキストを与えます。チェイン・トリガは、同じデータベース更新の照合トリガの任意のシーケンスです。以下のトリガ定義エントリを考えてみましょう。
+^Acct("ID") -commands=Set -xecute="Set ^Acct(1)=$ZTVALUE+1" +^Acct(sub=:) -command=Set -xecute="Set ^X($ZTVALUE)=sub"
この例では、2つのトリガと1つのネストされたトリガのチェイン・シーケンスを設定します。Set ^Acct("ID")=10
で、GT.Mは、 ^Acct("ID")
と ^Acct(sub:)
のトリガーの任意のシーケンスをチェインします。^Acct(sub=:)
トリガまたは ^Acct("ID")
トリガのいずれかを最初に実行し、トリガの実行順序は任意であるため、他のトリガを続行することは可能です。GT.Mが ^Acct("ID")
のトリガを呼び出すと、 Set ^Acct(1)=$ZTVALUE+1
のコードは ^Acct(sub=:)
のトリガをネストされたトリガとして設定します。
注意 | |
---|---|
FISは、グローバル変数の同じ部分を更新する可能性のあるチェイン・トリガとネスト・トリガの使用を推奨しています。特に、任意のトリガを実行する順序のために、データベース更新のチェイン・トリガを持つ重要性を常に評価する必要があります。次の表は、チェーンおよびネストされたトリガ内の一部の組み込み特殊変数のスタッキング動作を示しています。 |
ISV(固有の特殊変数) |
チェイン・トリガ |
ネスト・トリガ |
---|---|---|
$REFERENCE |
共有される |
スタックされる |
$TEST |
スタックされる |
スタックされる |
$ZTVALUE |
共有される (更新可能) |
スタックされる |
$ZTOLDVAL |
共有される |
スタックされる |
$ZTDATA |
共有される |
スタックされる |
$ZTSLATE |
スタックされない |
スタックされない |
$ZTTRIGGEROP |
共有される |
スタックされる |
$ZTWORMHOLE |
スタックされない |
スタックされない |
$ZTLEVEL |
共有される |
スタックされる |
$ZTUPDATE |
トリガが開始されると $ZTVALUEに依存 |
スタックされる |
スタックされる は、トリガの完了時に値が復元されるISVを示します。
スタックされない は、ISV全体の値がトリガの完了後も保持されることを示します。
共有される は、値が同じで、更新の対象となり、チェイン更新を横切る可能性があるISVを示します。
ネストされ、チェインされたトリガの両方とも、両方のカラムの特性があることに注意してください - 「チェインされた」カラムは、実際には同じ更新プログラムによって呼び出されるトリガ間の連携に関するもので、「ネストされた」というのは実際にそれを呼び出したコンテキストからのトリガの分離についてですが、そのコンテキストが別のトリガのコンテキスト内にあるかどうかを示します。