从 BizTalk 执行 SQL 存储过程

V.P*_*kov 1 sql biztalk

我的 BizTalk 编排中有三项任务要做

  1. 执行带有动态参数的存储过程
  2. 插入数据库
  3. 在数据库中进行更新

示例数据

存储过程 [databasename].[storedprocedurename] 'param1Value', 'param2Value'

桌子 [databasename].[tablename] (id integer,desc nvarchar(50))

更新

改写:任务是

  1. 如何使用传入 XML 消息中的参数从 BizTalk 业务流程调用存储过程

  2. 如何从编排中插入数据库表(并取回操作结果)

  3. 如何使用来自传入 xml 的动态“where”值条件进行更新

Dan*_*eld 5

这里有完整的文档:使用 BizTalk Server 在 SQL Server 中执行存储过程

高级概述:

  1. 创建您的存储过程(例如 usp_Test)来执行您的插入/更新。包括将在您的WHERE子句中使用的参数。
  2. 使用 Add->Add Generated Items->Consume Adapter Service 为存储过程生成模式和绑定文件。
  3. 创建从消息到存储过程架构的映射
  4. 更新逻辑发送端口上的操作以匹配 SP 名称 (usp_Test)
  5. 部署您的应用程序。
  6. 将步骤 2 中物理发送端口的绑定导入到您的应用程序
  7. 将编排绑定到此发送端口(或在发送端口上创建过滤器,可能基于BTS.Operation)。
  8. 使用在您导入的发送端口上设置的映射创建端口,并在编排中设置过滤器)。

奖金:

  1. 使用表类型在单个调用中传递多个插入
  2. 使用 CompositeOperations 调用多个过程/桌面

警告:

  • SQL 适配器不喜欢空节点(假设您使用的是 SQL Server)。确保应该作为 a 进入的节点NULL设置为xsi:nil=true(使用Nilfunctoid),或者它不存在于目标中(使用Value Mappingfunctoid 或删除管道或助手类中的空节点的方法)。
  • 其他适配器(例如 Oracle 或 Db2)将面临其自身的特殊挑战。IMO,就可用功能和文档而言,sqlBinding 是最适合使用的。如果您了解其他平台,您应该能够找出问题所在。
  • 除非您打算将 XML 存储在 SQL Server 中,否则请避免发送 XML 参数。换句话说,当您有 BizTalk 为您执行此操作时,不要让 SQL Server 分解 XML - BizTalk 几乎肯定会做得更好(性能和开发方面)。
  • 如果您从 SQL Server 返回数据,请考虑使用强类型(如果您的过程结果集作为普通旧SELECT或通过OUTPUT参数返回)或 XML 轮询(如果您的过程使用 返回结果集FOR XML)。避免普通过程调用,除非您不希望处理来自过程的返回数据。