第 5 课:添加订阅类
在本课中,将在应用程序定义文件 (ADF) 中添加一个订阅类,然后更新 Notification Services 实例,将更改应用于应用程序数据库。然后可以查看对应用程序数据库所做的更改。
订阅类入门
定义订阅类时,将定义订阅数据的存储,并定义从事件和订阅数据生成通知的查询。
定义订阅数据的存储时,将定义所收集的订阅数据的字段。例如,如果订阅数据的一部分是感兴趣的城市,则可以添加 City 订阅字段。然后,提供一个接口,让订阅方创建订阅,并在订阅中指定城市。
如果应用程序支持多个订阅方区域设置和多个设备(例如,电子邮件和移动电话),还可以将 DeviceName 和 SubscriberLocale 字段添加到订阅字段中。这些字段用于根据不同的设备、时区和语言对通知进行自定义。
Notification Services 将 SubscriberId 字段添加到每个订阅类的基础表中。
除了定义订阅字段以外,还必须定义通知生成规则。该规则是 Transact-SQL 查询,它使事件与订阅数据匹配,并将结果插入到通知类视图中。这些规则可以是事件驱动的,也可以是计划的。一旦事件到达,就将运行事件驱动的规则。计划的规则将按订阅中提供的计划对单个订阅进行计算。
订阅类可以定义其他信息,例如,订阅数据和补充表的索引。有关订阅类的详细信息,请参阅定义订阅类。
创建应用程序时,Notification Services 将使用订阅类的定义来创建订阅类的表、视图、索引和存储过程。
WeatherCity 订阅类
对于该应用程序,将向 ADF 中添加 WeatherCity 订阅类。该订阅类有三个字段,DeviceName、SubscriberLocale 和 City。City 字段是该应用程序的重要字段。订阅方创建天气订阅时,必须指定城市的名称。
定义 DeviceName 和 SubscriberLocale 订阅字段后,就可以添加对多个设备和区域设置的支持。
此订阅类还定义了一个通知生成查询。若要编写该查询,必须知道哪些事件数据是可用的,需要产生哪些通知数据,以及哪些订阅数据是可用的:
- 第 3 课中显示 WeatherData 事件类有五个字段:City、Date、Low、High 和 Forecast。
- 订阅类有 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 文件,再单击“打开”**。
在**“参数”**窗格中,检查参数值。
单击**“确定”**。
查看**“Notification Services - 更新摘要”对话框,再单击“更新”**。
更新操作完成后,单击**“关闭”**。
查看在应用程序数据库中所做的更改
更新实例时,Notification Services 将在 TutorialWeather 应用程序数据库中添加订阅类的表、视图和存储过程:
- dbo.WeatherCityView 视图提供了关联的订阅类的订阅记录视图。
- dbo.WeatherCity 视图包含应用程序所计算的当前订阅集。在通知生成查询中,从该视图中选择订阅数据。
- dbo.NSWeatherCitySubscriptions 表是基础表,它包含订阅类的订阅数据。
注意: 不要直接修改订阅表和视图中的数据。使用订阅管理对象。有关详细信息,请参阅开发订阅管理界面。
可以使用对象资源管理器来检查 TutorialWeather 数据库中的这些对象。供内部使用的表和视图只包含用于内部跟踪和数据查找的数据。
可能需要刷新对象资源管理器,才能看到新对象。
下一课
请参阅
概念
其他资源
Notification Services 视图
Notification Services 表
定义订阅类
生成通知解决方案
SQL Server Notification Services 简介