イベント ルールの定義
アプリケーションがイベント ドリブン サブスクリプションをサポートする場合、少なくとも 1 つのイベント ルールを定義する必要があります。
イベント ルールは、イベント ドリブン サブスクリプションの通知を作成する、指定された 1 つ以上の Transact-SQL クエリのセットです。イベント ルールでは、必要に応じてイベント記録のデータを操作できます。イベント バッチが到着するとすぐに、各イベント バッチに対してイベント ルールが処理されます。
メモ : |
---|
イベント ルールを実行する正確なタイミングは、クォンタム期間とアプリケーションでイベントを処理する方法によって異なります。詳細については、「ジェネレータ クォンタム期間の指定」および「イベント処理順序の指定」を参照してください。 |
各サブスクリプション クラスには、1 つ以上のイベント ルールを含めることができます。ただし、ルールの実行の順序を指定することはできません。イベント ルールは任意の順序で実行できます。
イベント ルールの処理
Notification Services では、次のようなプロセスによってイベント ルールから通知が生成されます。
- イベントが到着します。
- Notification Services がイベント クラスごとに 1 つのイベント バッチを作成し、各イベント バッチをそれぞれのイベント テーブルに追加します。
- Notification Services がイベント クラスのすべての記録ルールを実行します。これにより、イベント記録テーブルが保持されます。
記録ルールが失敗すると、処理が停止して、イベント バッチは失敗としてマークされます。イベント バッチ処理が成功しないと、イベント ルールは実行されません。 - Notification Services はイベント ルールを実行し、イベント ルールはイベント データをサブスクリプション データに結合して通知を生成します。イベント ルールは、イベント クラスの現在のイベントのみを示すビューと、有効化されたサブスクリプションのみを示すサブスクリプション ビューに対して実行されます。イベント ルールでは、イベント記録データを使用することもできます。
- イベント ルールは、通知テーブルに結果の通知を追加します。このデータは、通知の作成と配布に使用されます。
イベントが到着するとすぐに通知が生成されるため、イベント ルールは、ランダムに発生するイベントおよび時間依存のデータに適しています。イベント ルールを使用する必要があるアプリケーションの例として、オークション更新サブスクリプションや最新ニュース通知などがあります。
イベント ルールの定義
イベント ルールは、サブスクリプション クラスの一部です。サブスクリプション クラスを定義するときには、少なくとも 1 つのルール (イベント ルールまたは定期的なルール) を定義する必要があります。イベント ルールを定義するには、イベント ルール アイテムを作成します。次に、名前、実行するアクション、およびリンクされているイベント クラスの名前を指定します。また、イベント ルール アクションのタイムアウト値も指定できます。
イベント ルールを定義するには
- XML でアプリケーションを定義している場合は、EventRule 要素 (ADF) を使用してイベント ルールを定義します。
- プログラムでイベント ルールを定義している場合は、個々の SubscriptionEventRule オブジェクトを作成し、SubscriptionEventRules プロパティを使用してサブスクリプション クラスに追加します。
- 条件アクションを含むイベント ルールをプログラムで定義している場合は、個々の SubscriptionConditionEventRule オブジェクトを作成し、SubscriptionConditionEventRules プロパティを使用してサブスクリプション クラスに追加します。
イベント ルールの名前付け
各イベント ルールには、アプリケーション内で一意の名前を付ける必要があります。この名前は、各ルールを管理目的で識別するために使用します。
イベント ルールに名前を付けるには
- XML でイベント ルールを定義している場合は、EventRule の RuleName 要素 (ADF) を使用してイベント ルールの名前を定義します。
- プログラムでイベント ルールを定義している場合は、SubscriptionEventRule クラス (NMO) でイベント ルールの名前を定義します。
- 条件アクションを含むイベント ルールをプログラムで定義している場合は、SubscriptionConditionEventRule クラス (NMO) を使用してイベント ルールの名前を定義します。
アクションまたは条件アクションの定義
アクションとは、Notification Services がルールを実行するたびに実行されるクエリです。イベント ルールには、単純なアクションと、より複雑な条件アクションを含めることができます。
- アクションには、サブスクリプション フィールドとイベント フィールドの一致に基づいて通知を生成するための Transact-SQL クエリが含まれます。サブスクライバは、サブスクリプションを作成するときに、この定義済みクエリのパラメータを定義します。単純なアクションの定義については、「アクションの定義」を参照してください。
- 条件アクションにも Transact-SQL クエリが含まれていますが、このクエリは、サブスクライバがサブスクリプションを定義できるビューを定義します。サブスクライバは、定義済みクエリのパラメータを指定する代わりに、関心のあるフィールドを選択し、あらかじめ決められた一連の演算子を使用して、独自の条件を定義します。条件アクションの定義については、「条件アクションの定義」を参照してください。
タイムアウト値の指定
アクションのタイムアウトは、アクションまたは条件アクションのステートメントが完了するまでの許容時間を指定します。ステートメントがタイムアウトになるまでに完了しなかった場合、Notification Services はトランザクションをロールバックして、イベント ルールを失敗としてマークし、イベント ログにエラーを書き込みます。
タイムアウト値を指定するには
- XML でイベント ルールを定義している場合は、EventRule の ActionTimeout 要素 (ADF) を使用してタイムアウト値を定義します。
- プログラムでイベント ルールを定義している場合は、Microsoft.SqlServer.Management.Nmo.SubscriptionEventRule.ActionTimeout プロパティ (NMO) を使用してタイムアウト値を定義します。
- 条件アクションを含むイベント ルールをプログラムで定義している場合は、Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.ActionTimeout プロパティ (NMO) を使用してタイムアウト値を定義します。
イベント クラスへのルールのリンク
各イベント ルールは、単一のイベント クラスに関連付けられる必要があります。Notification Services は、指定されたイベント クラスからイベント バッチが処理された後にのみイベント ルールを実行します。
イベント クラスにルールをリンクさせるには
- XML でイベント ルールを定義している場合は、EventRule の EventClassName 要素 (ADF) を使用してイベント クラスの名前を指定します。
- プログラムでイベント ルールを定義している場合は、Microsoft.SqlServer.Management.Nmo.SubscriptionEventRule.EventClassName プロパティ (NMO) を使用してイベント クラスの名前を定義します。
- 条件アクションを含むイベント ルールをプログラムで定義している場合は、Microsoft.SqlServer.Management.Nmo.SubscriptionConditionEventRule.EventClassName プロパティ (NMO) を使用してイベント クラスの名前を定義します。
参照
概念
定期的なルールの定義
アクションの定義
条件アクションの定義
サブスクリプション ルールの定義
イベント クラスの記録の定義