通知スキーマの定義

サブスクリプション ルールは、通知ビューに通知を挿入します。これは通知テーブルを基にしたビューで、通知クラスにちなんだ名前が付けられます。ビューと基になるテーブルのスキーマは、通知クラスのスキーマから派生します。このスキーマを構成するフィールドを通知クラスで定義します。

ここでは、Notification Services がスキーマに追加する既定のフィールド、およびカスタム計算フィールドなど通知データ用のカスタム フィールドの作成方法について説明します。

既定の通知フィールド

Notification Services は、通知クラスの通知を格納するテーブルを作成する際に、宣言された通知フィールドごとに 1 つの列をテーブルに作成し、通知の書式設定や配信に使用する 5 つの列を別途追加します。

ms172546.note(ja-jp,SQL.90).gifメモ :
通知クラスのスキーマでは、次のフィールドを定義しないでください。定義した場合、フィールドの重複定義のため、アプリケーションの作成に失敗します。
  • NotificationId は、bigint 型の列です。Notification Services は、各通知に対してこのフィールドの値を提供します。この値は、通知クラス内で一意です。
  • NotificationBatchId は、bigint 型の列です。通知を生成する各ルール実行は、1 つ以上の通知バッチを作成します。Notification Services は、通知テーブルにバッチ番号を自動的に挿入します。
  • SubscriberId は、生成された通知のサブスクライバ ID を含む nvarchar(255) 型の列です。Notification Services は、このサブスクライバ ID を使用して通知の配信情報を検索します。通知を生成するサブスクリプション ルールは、この値を挿入する必要があります。
  • DeviceName は、nvarchar(255) 型の列です。インスタンス データベースの SubscriberDevices テーブルに保存されているサブスクライバ デバイスの名前を含みます。Notification Services は、このデバイス名を使用して配信情報を取得します。Notification Services はカスタムの書式設定を行うため、コンテンツ フォーマッタにこのデバイス名を提供します。通知を生成するサブスクリプション ルールは、この値を挿入する必要があります。SubscriberIdDeviceName の組が、SubscriberDevices テーブルのレコードに一致する必要があることに注意してください。
  • SubscriberLocale は、ロケール コードを含む nvarchar(10) 型の列です。このロケール コードは、サポートされているロケール コードの 1 つであり、サブスクリプション ルールによって挿入する必要があります。Notification Services は、ロケール固有の書式設定を実行できるように、この情報をコンテンツ フォーマッタに渡します。サポートされるコードの一覧については、「サブスクライバ ロケール コード」を参照してください。

通知テーブルの残りの列は、通知クラスの通知フィールドで定義されます。Notification Services は、通知の配信を追跡するための 3 つのフィールドをカスタム フィールドの後に追加します。

  • DeliveryStatusCode は、配信の状態コードを含む tinyint 型の列です。この情報は、レポートでの使用を目的としていません。
  • SentTime は、配信プロトコルが通知の配信状態を報告した時刻を含む datetime 型の列です。
  • LinkNotificationId は、ダイジェスト配信でのみ使用される bigint 型の列です。通知がダイジェストに含まれ、この通知がダイジェスト内で最初の通知でない場合、最初の通知の ID がこのフィールドに含まれます。最初の通知には、状態と時刻に関する情報が含まれます。

これらのフィールドは、デバッグおよびレポートでの使用を目的としていません。代わりに、NS<NotificationClassName>NotificationDistribution ビュー を使用します。このビューは、これらの情報をより読みやすい形式で提供します。

カスタム通知フィールド

カスタム フィールドは、サブスクライバが関心を持つデータ、または最終通知の生成に使用されるデータを格納するフィールドです。

通知クラスにカスタム フィールドを定義する場合、どのデータを送信するかを把握する必要があります。また、これらのフィールドの定義は、通知を生成するサブスクリプション ルールによって作成されたデータと一致する必要があります。

カスタム フィールドごとに、フィールド名とフィールドのデータ型を定義する必要があります。天気予報を含む通知を送信する場合は、次のような通知フィールドを定義します。

  • フィールド名 : City、フィールド型 : nvarchar(35)
  • フィールド名 : State、フィールド型 : nvarchar(35)
  • フィールド名 : Forecast、フィールド型 : nvarchar(3500)

これらのフィールドのデータ型は、通知の生成に使用されたソースのデータ型に適合する必要があります。

ダイジェスト配信を使用している場合に、状態が同一のサブスクライバ通知をすべてグループ化するには、そのフィールドのダイジェスト グループを true に設定します。State フィールドの新しい定義を次に示します。

  • フィールド名 : State、フィールド型 : nvarchar(35)、ダイジェスト グループ : true

ダイジェスト配信の詳細については、「ダイジェスト配信またはマルチキャスト配信の指定」を参照してください。

通知クラスのフィールドを定義するには

  • XML を使用してアプリケーションを定義している場合は、Schema の Fields 要素 (ADF) で個々のフィールドを定義します。
  • Notification Services 管理オブジェクト (NMO) を使用してアプリケーションを定義している場合は、NotificationField オブジェクトを使用して個々のフィールドを作成し、NotificationFields プロパティを使用して NotificationFieldCollection に追加します。

計算フィールド

計算フィールドを使用すると、コンテンツ フォーマッタにコンテンツが渡される直前に通知データを計算できます。

計算フィールドは、コンテンツ フォーマッタに通知が渡される直前に、Transact-SQL 式を使用して通知フィールドの値を生成します。アプリケーション データベースの SELECT クエリの一部として評価される任意の Transact-SQL 式を使用できます。この式では、任意の定数と関数呼び出しを使用できます。

ms172546.note(ja-jp,SQL.90).gifメモ :
Transact-SQL 構文では、文字列定数に引用符を付ける必要があります。したがって、計算フィールドで文字列を使用する場合、単一引用符で囲む必要があります。また、文字列が Unicode の場合は、「N'myString'」などのように、文字列の前に「N」を追加する必要があります。

通知クラスに計算フィールドを追加する場合は、フィールド名と Transact-SQL 式を定義します。たとえば、書式設定された文字列に価格を変換する場合、次のような計算フィールド定義を指定します。

  • フィールド名 : FormattedStockPrice
  • Transact-SQL 式 : CONVERT(NVARCHAR(10), StockPrice, 1)

コンテンツ フォーマッタに通知が送信されると、この計算フィールドが StockPrice フィールドの値を受け取り、書式設定された文字列に変換します。たとえば、StockPrice フィールドの値が money 型の 1000.70 である場合、FormattedStockPrice は文字列の "1,000.70" になります。

また、ダイジェスト配信用にグループ化する通知を、計算フィールドで決定するように指定できます。計算フィールドの値が同一の通知をグループ化するには、該当する計算フィールドのダイジェスト グループ プロパティを true に設定します。

通知クラスの計算フィールドを定義するには

参照

概念

コンテンツ フォーマッタの構成
ダイジェスト配信またはマルチキャスト配信の指定
通知バッチ サイズの指定
通知の有効期限の指定
ダイジェスト配信またはマルチキャスト配信の指定

その他の技術情報

通知クラスの定義
配信プロトコルの構成
式 (Transact-SQL)
CREATE TABLE (Transact-SQL)
通知クラスの定義
Notification Services アプリケーションの定義

ヘルプおよび情報

SQL Server 2005 の参考資料の入手