レッスン 5 : サブスクリプション クラスの追加
このレッスンでは、アプリケーション定義ファイル (ADF) にサブスクリプション クラスを追加し、Notification Services のインスタンスを更新して、アプリケーション データベースに変更を適用します。その後、アプリケーション データベースへの変更を確認します。
サブスクリプション クラスの概要
サブスクリプション クラスを定義する際には、サブスクリプション データのストレージを定義します。このストレージには、イベント データとサブスクリプション データから通知を生成するクエリも格納されます。
サブスクリプション データのストレージを定義するときは、収集するサブスクリプション データのフィールドを定義します。たとえば、サブスクリプション データの一部に都市の情報を含める場合は、City サブスクリプション フィールドを追加します。次に、都市を指定するサブスクリプションを作成するためのインターフェイスを作成します。
電子メールや携帯電話など、複数のサブスクライバ ロケールおよび複数のデバイスをサポートするアプリケーションでは、DeviceName フィールドと SubscriberLocale フィールドをサブスクリプション フィールドに追加できます。これらのフィールドにより、異なるデバイス、異なるタイム ゾーン、および異なる言語に対応するように通知をカスタマイズできます。
通知サービスは、各サブスクリプション クラスの基本テーブルに SubscriberID フィールドを追加します。
サブスクリプション フィールドを定義したら、通知生成ルールも定義する必要があります。このルールは、一致するイベントとサブスクリプション データを組み合わせ、その結果を通知クラス ビューに追加する Transact-SQL クエリです。これらのルールはイベント ドリブン型にすることができ、また、スケジュールを設定することができます。イベント ドリブン ルールは、イベントが発生するたびに実行されます。定期的なルール (スケジュールが設定されたルール) は、サブスクリプションに指定されたスケジュールに基づいて各サブスクリプションを評価します。
このほか、サブスクリプション クラスには、サブスクリプション データや補足テーブルのインデックスなどの情報を定義できます。サブスクリプション クラスの詳細については、「サブスクリプション クラスの定義」を参照してください。
アプリケーションを作成するときは、Notification Services ではサブスクリプション クラス定義に基づいて、そのサブスクリプション クラスに必要なテーブル、ビュー、インデックス、およびストアド プロシージャが作成されます。
WeatherCity サブスクリプション クラス
このアプリケーションでは、WeatherData サブスクリプション クラスを ADF に追加します。このサブスクリプション クラスには、DeviceName、SubscriberLocale、City の 3 つのフィールドがあります。City フィールドは、このアプリケーションには重要なフィールドです。天気のサブスクリプションを作成するときに、都市の名前を指定する必要があるからです。
DeviceName および SubscriberLocale サブスクリプション フィールドを定義して、複数のデバイスとロケールをサポートできるようにします。
このサブスクリプション クラスは通知生成クエリも定義します。このクエリを記述するには、どのイベント データを使用できるのか、どの通知データを生成するのか、そしてどのサブスクリプション データを使用できるのかを把握する必要があります。
- レッスン 3 で説明したように、WeatherData イベント クラスには、City、Date、Low、High、Forecast の 5 つのフィールドがあります。
- このサブスクリプション クラスには City フィールドがあります。
- レッスン 4 で説明したように、WeatherAlerts 通知クラスには、イベント クラスと同じフィールドがあります (City、Date、Low、High、Forecast)。
- また、基本通知テーブルには、SubscriberId、DeviceName、および SubscriberLocale フィールドがあります。
これらのフィールドがビューの列になります。これらのフィールドを理解することで、イベントをサブスクリプション ビューに関連付け、通知ビューにデータを追加することができます。
INSERT INTO WeatherAlerts(SubscriberId,
DeviceName, SubscriberLocale, City, Date, Low, High,
Forecast)
SELECT s.SubscriberId, s.DeviceName, s.SubscriberLocale,
e.City, e.Date, e.Low, e.High, e.Forecast
FROM WeatherData e, WeatherCity s
WHERE e.City = s.City;
Notification Services でこのクエリを実行すると、イベント クラス ビューの現在のイベント セットがサブスクリプション クラス ビューのサブスクリプションに関連付けられます。関連付ける条件は、イベントとサブスクリプションの City の値が一致していることです。その後、Notification Services で結果が通知ビューに追加されます。
サブスクリプション クラスを ADF に追加
このセクションの XML は、サブスクリプション クラスを定義します。XML の内容を確認したら、次の手順で XML を ADF にコピーします。
サブスクリプション クラスを ADF に追加するには
[コードのコピー] をクリックし、以下の XML を Windows クリップボードにコピーします。
<!-- Subscription Classes --> <SubscriptionClasses> <SubscriptionClass> <SubscriptionClassName>WeatherCity</SubscriptionClassName> <Schema> <Field> <FieldName>DeviceName</FieldName> <FieldType>nvarchar(255)</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>SubscriberLocale</FieldName> <FieldType>nvarchar(10)</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> <Field> <FieldName>City</FieldName> <FieldType>nvarchar(40)</FieldType> <FieldTypeMods>not null</FieldTypeMods> </Field> </Schema> <EventRules> <EventRule> <RuleName>WeatherEventRule</RuleName> <EventClassName>WeatherData</EventClassName> <Action> INSERT INTO WeatherAlerts(SubscriberId, DeviceName, SubscriberLocale, City, Date, Low, High, Forecast) SELECT s.SubscriberId, s.DeviceName, s.SubscriberLocale, e.City, e.Date, e.Low, e.High, e.Forecast FROM WeatherData e, WeatherCity s WHERE e.City = s.City; </Action> </EventRule> </EventRules> </SubscriptionClass> </SubscriptionClasses>
ソリューション エクスプローラで WeatherADF.xml を開きます。
次の XML を、先ほどコピーしたコードに置き換えます。
<!-- Subscription Classes -->
<SubscriptionClasses></SubscriptionClasses>
[ファイル] メニューの [WeatherADF.xml の保存] をクリックします。
Notification Services のインスタンスの更新
ADF を修正したら、Notification Services のインスタンスを更新して、アプリケーション データベースにサブスクリプション クラス オブジェクトを追加します。
Notification Services のインスタンスを更新するには
オブジェクト エクスプローラで、[Notification Services] を展開します。
[Tutorial] を右クリックし、[タスク] をポイントして、[更新] をクリックします。
[インスタンスの更新] ダイアログ ボックスで [参照] をクリックします。次に、TutorialICF.xml ファイルを選択して [開く] をクリックします。
[パラメータ] ペインでパラメータ値を確認します。
[OK] をクリックします。
[Notification Services - 更新の概要] ダイアログ ボックスの内容を確認し、[更新] をクリックします。
更新が完了したら、[閉じる] をクリックします。
アプリケーション データベースの変更の確認
インスタンスを更新すると、Notification Services でサブスクリプション クラスのテーブル、ビュー、およびストアド プロシージャが TutorialWeather アプリケーション データベースに追加されます。
- dbo.WeatherCityView ビューは、関連付けられているサブスクリプション クラスのサブスクリプション レコードのビューです。
- dbo.WeatherCity ビューには、アプリケーションが評価する現在のサブスクリプション セットが格納されます。通知生成クエリでは、このビューからサブスクリプション データを選択します。
- dbo.NSWeatherCitySubscriptions テーブルには、サブスクリプション クラスに必要なサブスクリプション データが格納されています。
注意 : サブスクリプション テーブルおよびサブスクリプション ビューのデータは直接変更しないでください。代わりに、サブスクリプション管理オブジェクトを使用します。詳細については、「サブスクリプション管理インターフェイスの開発」を参照してください。
TutorialWeather データベースのこれらのオブジェクトは、オブジェクト エクスプローラで確認できます。内部でのみ使用されるテーブルとビューには、内部で追跡され、参照されるデータが含まれています。
新しいオブジェクトを確認するには、オブジェクト エクスプローラを更新しなければならない場合があります。
次のレッスン
参照
概念
Notification Services のチュートリアル
その他の技術情報
Notification Services のビュー
Notification Services のテーブル
サブスクリプション クラスの定義
通知ソリューションの作成
SQL Server Notification Services の紹介