Biztalk消息不可知的编排

时间:2012-04-08 21:46:29

标签: biztalk biztalk-2010 biztalk-orchestrations

自从BT2006开始离开Biztalk之后,我们正在考虑将其重新引入组织。我早期遇到的一个挫折是在处理HL7和编排时,我们需要为每种ADT消息类型进行单独的编排,即使每种类型的模式基本相同,并且每个编排都做了完全相同的事情。继续进入BizTalk 2010世界,这里有什么改进?是否有一种模式可用于为所有ADT类型使用单个业务流程?

2 个答案:

答案 0 :(得分:3)

我认为你有两种可能性。

  1. 将邮件视为匿名邮件。这意味着您的消息是“未键入的”(您将其声明为System.Xml.XmlDocument类型)。然后您的业务流程可以询问消息以确定它是什么类型。
  2. 创建一个信封邮件,其正文可以是所有可能的邮件类型(使用xsd选择组选择器)。然后,您的业务流程处理信封消息类型。使用此方法,您可以通过在信封标头中设置值来声明信封正文中包含的类型。
  3. 我更喜欢第二个;虽然它肯定更多的工作(您需要将所有入站邮件包装在信封中),但它允许您通过查看信封标题来了解邮件的内容。这意味着如果需要,您仍然可以按消息类型进行路由。

答案 1 :(得分:3)

自2006年发布以来,BizTalk中的HL7消息传递大致保持不变。因为BizTalk为每个消息和事件类型定义了一个模式(例如ADT ^ A01,ADT ^ A03,ADT ^ A08),而不仅仅是每个消息类型(例如ADT, BAR,MDM),你的映射和编排很快变得一团糟。

以下是我过去为解决此限制所做的事情:

  1. 允许消息无条件地进入业务流程。这是设置MessageType = System.Xml.XmlDocument。我发现通常,我只对解析或更新一些元素感兴趣,所以我只想编写一个带有一些通用linq语句的帮助库来获取我需要的数据。这样,我可以写一个到达PID-3(患者ID号)的linq语句,并且我能够在任何消息或事件类型上一致地使用它,因为PID保持不变。同样,我也会使用相同的技术来更新消息。如果您要更新的字段存在较大的结构差异,或者您希望读取/更新大量数据,则此技术无法正常工作。
  2. 创建主/规范HL7消息类型模式。这需要更多的工作,但根据您要处理的消息类型数量,这可以真正得到回报,并且与医疗机构对HL7接口的看法更加一致。为此,您需要为消息类型定义新架构,并包含此消息的所有可能段。因此,您可以在一个主模式下滚动A01,A03,A04等所有可能的变体,而不是定义多个ADT类型。这将允许您大大减少所需的映射和解析逻辑的数量。不幸的是,由于这不是HL7加速器的默认行为,需要一些自定义管道和编排逻辑来实现。基本上,您需要修改一些属性以使Accelerator认为您的新主消息有效。
  3. 对于大多数传递接口,我建议使用技术#1。否则,如果您将生成或需要以规范方式消费基本上任何消息事件,那么技术#2从长远来看可以获得回报。