使用 SQL 适配器接收查询通知的注意事项
本主题提供了使用 SQL 适配器接收来自SQL Server数据库的查询通知时要记住的一些注意事项和最佳做法。
使用适配器接收通知时的注意事项
使用 SQL 适配器接收查询通知时,必须考虑以下事项:
SQL 适配器从 SQL Server 接收查询通知,然后只需将通知传递给适配器客户端。 适配器不区分不同操作 (通知,即适配器没有任何信息,无论特定通知是用于插入操作还是更新操作) 。
操作的通知消息不受该操作影响的记录数的影响。 例如,无论在SQL Server数据库表中插入、更新或删除的记录数是多少,适配器客户端只接收一条通知消息。
建议适配器客户端应用程序包含用于解释从 SQL Server 接收的通知类型的逻辑。 可以通过从中提取信息来确定通知类型, <即收到的通知消息的 Info> 元素。 下面是为插入操作收到的通知消息的示例:
<Notification xmlns="http://schemas.microsoft.com/Sql/2008/05/Notification/"> <Info>Insert</Info> <Source>Data</Source> <Type>Change</Type> </Notification>
请注意 Info> 元素中的<值。 此值提供有关接收通知消息的操作的信息。 应用程序应具有提取 Info> 元素中的<值的功能,然后根据值执行后续任务。 主题使用 BizTalk Server 处理通知消息以完成 SQL 中的特定任务,其中介绍了如何在 Info> 元素中<提取值。 教程 2:使用 SQL 适配器的员工 - 采购订单流程中还提供了执行类似任务的详细教程。
理想情况下,在客户端应用程序收到特定记录的通知后,应更新该记录,以便不会收到其他通知。 例如,假设有一个“状态”列的 Employee 表。 对于插入到 Employee 表中的所有新记录, “状态” 列中的值始终为“0”,因此该表将如下所示:
员工姓名 状态 John 0 若要接收新插入记录的通知,适配器客户端会将 NotificationStatement 绑定属性设置为:
SELECT Employee_ID, Name FROM dbo.Employee WHERE Status=0
注意
必须特别指定 语句中的列名,如此 SELECT 语句所示。 此外,必须始终指定表名称和架构名称。 例如,dbo。员工。
收到通知后,客户端应用程序必须将 “状态 ”列的值重置为“1”,以便通知语句不再对记录进行操作。 为此,客户端应用程序必须对 Employee 表执行 Update 操作。 完成 Update 操作后, Employee 表中的相同记录将如下所示:
员工姓名 状态 John 1 有趣的是,更新操作将再次向适配器客户端发送通知,整个过程将再次重复,因此,客户端应用程序必须具有放弃此类不需要的通知所需的逻辑。
如果 NotifyOnListenerStart 绑定属性为 true,则适配器客户端将在每次启动接收位置时收到通知消息。 有关如何使用绑定属性和解释通知消息的详细信息,请参阅使用 BizTalk Server 在 SQL 中接收位置明细之后接收查询通知。
用于接收通知的典型业务流程
本部分概述了使用 SQL 适配器接收通知的典型业务流程。
业务流程必须做的第一件事是确定收到的通知的类型,包括:
接收位置重启后是否收到通知。
是否为数据库表上的操作(如 Insert、Update 或 Delete)收到通知。
业务流程必须包含 表达式 形状,并在其中包含一个 xpath 查询,以确定接收的消息类型。
确定通知类型后,业务流程必须包含决策块,以便根据收到的通知类型执行特定操作。 为此,业务流程必须包含 一个“决定 ”形状,其中包括一个 规则 块和一个 Else 块:
在 Rule 块中,必须指定条件,然后包括业务流程形状,以在满足条件时执行某些操作。
在 Else 块中,如果 条件不 满足,则必须包含业务流程形状以执行某些操作。
使用 BizTalk Server 处理通知消息以完成 SQL 中的特定任务中介绍了上述要求的详细信息。 教程 2:员工 - 使用 SQL 适配器的采购订单流程中还提供了详细的教程。