更新日期: 2006 年 7 月 17 日
以下示例显示如何将事件历史记录与 Notification Services 事件类一起使用来提供预定订阅的事件数据。在该示例中,天气预报更新应用程序每天向用户通知他们所在地区的天气预报。
应用场景
Notification Services 应用程序收集天气预报数据并将天气预报通知发送给订阅方。每个订阅都指定了某个要收集其天气信息的城市以及接收通知的计划。当到达订阅的安排时间时,应用程序将该城市的最新天气预报发送给订阅方。
应用程序具有一个存储所有主要城市最新天气预报的事件历史记录。在此应用程序中,每个事件批都包含该应用程序所支持的所有城市的预报。当一批天气预报到达时,事件历史记录规则将删除旧的天气预报并向事件历史记录添加新的天气预报。
事件历史记录表
在事件类中,您必须定义事件历史记录表。历史记录与事件类使用相同的列(City、Date、Low、High 和 Forecast)。
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'WeatherEventsChron'
AND TABLE_SCHEMA = 'dbo')
DROP TABLE dbo.WeatherEventsChron;
CREATE TABLE dbo.WeatherEventsChron
(
[City]nvarchar(35),
[Date]datetime,
[Low]float,
[High]float,
[Forecast]nvarchar(3500)
PRIMARY KEY (City)
);
当您更新应用程序时,如果对事件历史记录进行了更改,则 Notification Services 将删除当前表并创建一个新表。有关此语法的详细信息,请参阅定义事件历史记录表。
事件历史记录规则
在事件类中,您还要定义每个事件批到达时运行的事件历史记录规则。以下规则首先从事件历史记录中删除所有数据。然后,规则从包含事件类的当前事件的 WeatherEvents 视图中选择当前事件批,并将这些事件添加到事件历史记录中。
DELETE FROM dbo.WeatherEventsChron;
INSERT INTO dbo.WeatherEventsChron(City, Date, Low, High, Forecast)
SELECT e.City, e.Date, e.Low, e.High, e.Forecast
FROM dbo.WeatherEvents e;
有关详细信息,请参阅定义事件历史记录规则。
用于生成通知的预定规则
用于生成通知的预定规则使用事件历史记录作为事件源。这样可确保预定的订阅具有事件数据。
INSERT INTO dbo.WeatherNotifications(SubscriberId,
DeviceName, SubscriberLocale,
City, Date, Low, High, Forecast)
SELECT s.SubscriberId,
s.DeviceName, s.SubscriberLocale,
c.City, c.Date, c.Low, c.High, c.Forecast
FROM dbo.WeatherSubscriptions s JOIN dbo.WeatherEventsChron c
ON s.City = c.City;
结果
在上午 8:00,带有最新天气预报信息的新事件批到达。事件历史记录规则运行,并使用新的事件数据替换旧的历史记录数据。
在上午 8:15,对数个预定的订阅进行评估。生成器运行预定规则,并使用事件历史记录中的事件数据生成通知。
请参阅
概念
为事件类定义历史记录
定义事件历史记录表
定义事件历史记录规则
示例:比较事件数据以避免重复通知
示例:使用较大的事件数据值来避免重复通知