我认为你有两种可能性。
- 将邮件视为匿名邮件。这意味着您的消息是“未键入的”(您将其声明为System.Xml.XmlDocument类型)。然后您的业务流程可以询问消息以确定它是什么类型。
- 创建一个信封邮件,其正文可以是所有可能的邮件类型(使用xsd选择组选择器)。然后,您的业务流程处理信封消息类型。使用此方法,您可以通过在信封标头中设置值来声明信封正文中包含的类型。
醇>
我更喜欢第二个;虽然它肯定更多的工作(您需要将所有入站邮件包装在信封中),但它允许您通过查看信封标题来了解邮件的内容。这意味着如果需要,您仍然可以按消息类型进行路由。
自2006年发布以来,BizTalk中的HL7消息传递大致保持不变。因为BizTalk为
每个消息和事件类型定义了一个模式(例如ADT ^ A01,ADT ^ A03,ADT ^ A08),而不仅仅是
每个消息类型(例如ADT, BAR,MDM),你的映射和编排很快变得一团糟。
以下是我过去为解决此限制所做的事情:
- 允许消息无条件地进入业务流程。这是设置MessageType = System.Xml.XmlDocument。我发现通常,我只对解析或更新一些元素感兴趣,所以我只想编写一个带有一些通用linq语句的帮助库来获取我需要的数据。这样,我可以写一个到达PID-3(患者ID号)的linq语句,并且我能够在任何消息或事件类型上一致地使用它,因为PID保持不变。同样,我也会使用相同的技术来更新消息。如果您要更新的字段存在较大的结构差异,或者您希望读取/更新大量数据,则此技术无法正常工作。
- 创建主/规范HL7消息类型模式。这需要更多的工作,但根据您要处理的消息类型数量,这可以真正得到回报,并且与医疗机构对HL7接口的看法更加一致。为此,您需要为消息类型定义新架构,并包含此消息的所有可能段。因此,您可以在一个主模式下滚动A01,A03,A04等所有可能的变体,而不是定义多个ADT类型。这将允许您大大减少所需的映射和解析逻辑的数量。不幸的是,由于这不是HL7加速器的默认行为,需要一些自定义管道和编排逻辑来实现。基本上,您需要修改一些属性以使Accelerator认为您的新主消息有效。
醇>
对于大多数传递接口,我建议使用技术#1。否则,如果您将生成或需要以规范方式消费基本上任何消息事件,那么技术#2从长远来看可以获得回报。