帮助Biztalk编排

时间:2010-02-24 11:17:31

标签: sql-server biztalk

我被困在我的biztalk解决方案的一个地方,

我有一个orchestraion,我从sql server获取数据(使用生成的schmema),它连接到决定形状,我已经检查了我的一个数据库状态列(通过提升属性,因为它是sql生成schmea我不得不删除MAXOCCURENCE = UNBOUND), 所以现在如果状态被批准我需要在另一个数据库中插入该行,如果它在Pending而不是在另一个数据库中,现在问题是如果我在源表中只占用一行它工作正常,但如果有多行它会造成问题,

plz对这个问题有所了解,如果我是正确的方式,我不知道循环形状,如何使用它,我假设我的sql接收适配器将返回我所有的行,如SP从中生成模式返回所有行,所以我认为在决定形状时应该检查每一行

thxs

2 个答案:

答案 0 :(得分:2)

一种选择是使用debatching的概念,以便激活业务流程的多个实例(表中每行一个)。您的业​​务流程反过来只处理单行。

请参阅此链接以获取SQL和Debatching http://seroter.wordpress.com/2007/01/03/debatching-inbound-messages-from-biztalk-sql-adapter/

答案 1 :(得分:0)

SQL或存储过程显然能够返回多行。如果这是可以接受的,那么您必须了解SQL接收的工作原理。它可以返回一个到多个行,如模式所示。通过改变生成的模式的数据行的忠诚度,你可以打破它。

你说你提升了一个属性来决定它的形状。这不是必需的。您可以使用xpath表达式将消息中的值提取到变量中,然后在决策中使用它。您必须将架构修改为没有多个数据行的原因是您只能提升每个消息出现一次的值。由于原始模式在它可能具有的行数上没有限制,因此它不知道要用于提升值的行。

这里真正的问题是您希望数据一次通过一行。你有两个选择:

  1. 像Saravana Kumar上面提到的那样。
  2. 调用一个只能一次返回一行的存储过程。
  3. 项目#2将需要在接收端口上进行一些调整,以确保只要返回数据就会重复调用存储过程。如果不这样做,您将受限于每分钟的轮询周期数。