Share via


レッスン 5 : サブスクリプション クラスの追加

このレッスンでは、アプリケーション定義ファイル (ADF) にサブスクリプション クラスを追加し、Notification Services のインスタンスを更新して、アプリケーション データベースに変更を適用します。その後、アプリケーション データベースへの変更を確認します。

サブスクリプション クラスの概要

サブスクリプション クラスを定義する際には、サブスクリプション データのストレージを定義します。このストレージには、イベント データとサブスクリプション データから通知を生成するクエリも格納されます。

サブスクリプション データのストレージを定義するときは、収集するサブスクリプション データのフィールドを定義します。たとえば、サブスクリプション データの一部に都市の情報を含める場合は、City サブスクリプション フィールドを追加します。次に、都市を指定するサブスクリプションを作成するためのインターフェイスを作成します。

電子メールや携帯電話など、複数のサブスクライバ ロケールおよび複数のデバイスをサポートするアプリケーションでは、DeviceName フィールドと SubscriberLocale フィールドをサブスクリプション フィールドに追加できます。これらのフィールドにより、異なるデバイス、異なるタイム ゾーン、および異なる言語に対応するように通知をカスタマイズできます。

通知サービスは、各サブスクリプション クラスの基本テーブルに SubscriberID フィールドを追加します。

サブスクリプション フィールドを定義したら、通知生成ルールも定義する必要があります。このルールは、一致するイベントとサブスクリプション データを組み合わせ、その結果を通知クラス ビューに追加する Transact-SQL クエリです。これらのルールはイベント ドリブン型にすることができ、また、スケジュールを設定することができます。イベント ドリブン ルールは、イベントが発生するたびに実行されます。定期的なルール (スケジュールが設定されたルール) は、サブスクリプションに指定されたスケジュールに基づいて各サブスクリプションを評価します。

このほか、サブスクリプション クラスには、サブスクリプション データや補足テーブルのインデックスなどの情報を定義できます。サブスクリプション クラスの詳細については、「サブスクリプション クラスの定義」を参照してください。

アプリケーションを作成するときは、Notification Services ではサブスクリプション クラス定義に基づいて、そのサブスクリプション クラスに必要なテーブル、ビュー、インデックス、およびストアド プロシージャが作成されます。

WeatherCity サブスクリプション クラス

このアプリケーションでは、WeatherData サブスクリプション クラスを ADF に追加します。このサブスクリプション クラスには、DeviceNameSubscriberLocaleCity の 3 つのフィールドがあります。City フィールドは、このアプリケーションには重要なフィールドです。天気のサブスクリプションを作成するときに、都市の名前を指定する必要があるからです。

DeviceName および SubscriberLocale サブスクリプション フィールドを定義して、複数のデバイスとロケールをサポートできるようにします。

このサブスクリプション クラスは通知生成クエリも定義します。このクエリを記述するには、どのイベント データを使用できるのか、どの通知データを生成するのか、そしてどのサブスクリプション データを使用できるのかを把握する必要があります。

  • レッスン 3 で説明したように、WeatherData イベント クラスには、CityDateLowHighForecast の 5 つのフィールドがあります。
  • このサブスクリプション クラスには City フィールドがあります。
  • レッスン 4 で説明したように、WeatherAlerts 通知クラスには、イベント クラスと同じフィールドがあります (CityDateLowHighForecast)。
  • また、基本通知テーブルには、SubscriberIdDeviceName、および 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 に追加するには

  1. [コードのコピー] をクリックし、以下の 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>
    
  2. ソリューション エクスプローラで WeatherADF.xml を開きます。

  3. 次の XML を、先ほどコピーしたコードに置き換えます。

    <!-- Subscription Classes -->

    <SubscriptionClasses></SubscriptionClasses>

  4. [ファイル] メニューの [WeatherADF.xml の保存] をクリックします。

Notification Services のインスタンスの更新

ADF を修正したら、Notification Services のインスタンスを更新して、アプリケーション データベースにサブスクリプション クラス オブジェクトを追加します。

Notification Services のインスタンスを更新するには

  1. オブジェクト エクスプローラで、[Notification Services] を展開します。

  2. [Tutorial] を右クリックし、[タスク] をポイントして、[更新] をクリックします。

  3. [インスタンスの更新] ダイアログ ボックスで [参照] をクリックします。次に、TutorialICF.xml ファイルを選択して [開く] をクリックします。

  4. [パラメータ] ペインでパラメータ値を確認します。

  5. [OK] をクリックします。

  6. [Notification Services - 更新の概要] ダイアログ ボックスの内容を確認し、[更新] をクリックします。

  7. 更新が完了したら、[閉じる] をクリックします。

アプリケーション データベースの変更の確認

インスタンスを更新すると、Notification Services でサブスクリプション クラスのテーブル、ビュー、およびストアド プロシージャが TutorialWeather アプリケーション データベースに追加されます。

  • dbo.WeatherCityView ビューは、関連付けられているサブスクリプション クラスのサブスクリプション レコードのビューです。
  • dbo.WeatherCity ビューには、アプリケーションが評価する現在のサブスクリプション セットが格納されます。通知生成クエリでは、このビューからサブスクリプション データを選択します。
  • dbo.NSWeatherCitySubscriptions テーブルには、サブスクリプション クラスに必要なサブスクリプション データが格納されています。
    ms166580.Caution(ja-jp,SQL.90).gif注意 :
    サブスクリプション テーブルおよびサブスクリプション ビューのデータは直接変更しないでください。代わりに、サブスクリプション管理オブジェクトを使用します。詳細については、「サブスクリプション管理インターフェイスの開発」を参照してください。

TutorialWeather データベースのこれらのオブジェクトは、オブジェクト エクスプローラで確認できます。内部でのみ使用されるテーブルとビューには、内部で追跡され、参照されるデータが含まれています。

新しいオブジェクトを確認するには、オブジェクト エクスプローラを更新しなければならない場合があります。

次のレッスン

レッスン 6 : イベント プロバイダの追加

参照

概念

Notification Services のチュートリアル

その他の技術情報

Notification Services のビュー
Notification Services のテーブル
サブスクリプション クラスの定義
通知ソリューションの作成
SQL Server Notification Services の紹介

ヘルプおよび情報

SQL Server 2005 の参考資料の入手