BizTalk + BTAHL7 MLLP - 将原始nack返回给发件人

时间:2013-12-17 23:41:29

标签: biztalk biztalk-2010 btahl7

在我的场景中,客户端通过MLLP将HL7发送到我的BizTalk双向接收端口。 BizTalk对外部服务进行Web服务调用,接收响应,将其转换为HL7 ACK并将其返回给客户端,所有这些都在同步事务中完成。

为了实现这一点,我有一个直接绑定到消息框的业务流程,并且BTAHL7方配置被设置为不将ACK路由到请求 - 响应接收端口上的发送管道。基本上我关闭了默认的ACK生成并从我的业务流程生成自定义ACK。我还为我的业务流程添加了一个额外的过滤器,接收形状BTAHL7Schemas.ParseError == false,以便在收到的消息与模式不匹配的情况下,业务流程不会收到错误消息。

一切都很好。在我的测试中,我故意发送不好的HL7消息。在这种情况下,我收到暂停路由错误报告,因为找不到订阅者。

这种行为的原因很明显 - 我没有订阅具有解析错误的消息。如果发生解析错误,我希望错误ACK返回给客户端。我可以允许我的业务流程订阅带有解析错误的消息,并且只是制定错误ACK,但我没有办法在ACK中返回实际的解析错误。

通常,在异步架构中,我会打开"路由ACK以在请求 - 响应接收端口上发送管道"让BTAHL72X接收/发送管道来处理它。然后客户端将获得包含错误详细信息的错误ACK。

所以我的问题是,有没有办法让接收管道原始的ACK并从我的业务流程返回它?

1 个答案:

答案 0 :(得分:1)

是的,你想要的东西当然是可行的。我现在面前没有一个HL7项目,所以我的记忆可能不准确,但是:

  1. 取消选中“重新发送确认以发送管道...”
  2. 您需要一个自定义管道组件来在反汇编程序输出上提升BTS.InterchangeID。
  3. 在您的业务流程中,实施与BTS.InterchageID相关联的Convoy。
  4. 然后,业务流程将获取HL7消息和自动生成的ACK。
  5. 你正常处理吗?
  6. 决定返回哪个ACK,你的或生成的。
  7. 将ACK返回给TwoWay端口。
  8. * 非自定义管道解决方案:*

    在BTAHL7配置资源管理器确认选项卡中:

    1. 将确认类型设置为增强
    2. 将MSH15(接受确认类型)设置为NE。
    3. 将MSH16(应用确认类型设置为ER
    4. 启用路由ACK以在请求 - 响应时发送管道
    5. 它似乎得到了我想要的行为。管道不会生成成功ACK,让我的业务流程处理它,但会生成应用程序ACK错误(AR - 应用程序拒绝),并路由到发送管道。