【问题标题】:BizTalk + BTAHL7 MLLP - Return original nack to senderBizTalk + BTS HL7 MLLP - 将原件退回给发件人
【发布时间】:2013-12-17 23:41:29
【问题描述】:

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

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

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

这种行为的原因很清楚——我没有订阅有解析错误的消息。如果出现解析错误,我希望错误 ACK 回到客户端。我可以允许我的编排订阅带有解析错误的消息,并且只是制定一个错误 ACK,但我没有任何方法可以在 ACK 中返回实际的解析错误。

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

所以我的问题是,有没有办法让接收管道原始 ACK 并从我的编排中返回?

【问题讨论】:

    标签: biztalk biztalk-2010 btahl7


    【解决方案1】:

    是的,你想要的肯定是可行的。我现在没有 HL7 项目,所以我的记忆可能不准确,但类似于:

    1. 取消选中“重新路由 ACK 以发送管道...”
    2. 您将需要一个自定义管道组件来提升反汇编程序输出上的 BTS.InterchangeID。
    3. 在您的编排中,实现与 BTS.InterchageID 相关的 Convoy。
    4. Orchestration 随后将获取 HL7 消息和自动生成的 ACK。
    5. 您是否正常处理。
    6. 决定返回哪个 ACK​​,你的还是生成的。
    7. 向双向端口返回 ACK。

    *非自定义管道解决方案:*

    在 BTAHL7 配置浏览器确认选项卡中:

    1. 将确认类型设置为增强
    2. 将 MSH15(接受确认类型)设置为 NE。
    3. 将 MSH16(应用程序确认类型设置为 ER)
    4. 开启 Route ACK 以在请求-响应时发送管道,

    它似乎得到了我想要的行为。管道不会生成成功 ACK,让我的编排处理它,但会生成应用程序 ACK 错误(AR - 应用程序拒绝),并路由到发送管道。

    【讨论】:

    • 谢谢!我希望这不需要自定义管道解决方案......我会调查一下。
    • 我发现如果我将Acknowledgment type设置为Enahnced,MSH15(Accept Acknowledgment Type)设置为NE。和 MSH16(应用程序确认类型为 ER,然后打开 Route ACK 以在请求响应时发送管道,它似乎得到了我想要的行为。管道不会生成成功 ACK,让我的编排处理它,但是应用程序将生成 ack 错误,并将其路由到发送管道。
    • 太棒了!因此,在 AR 的情况下,实际上并未提交错误消息。我猜是有道理的。
    • 我相信错误消息将被提交,因此可以订阅,但您可以在编排中使用 ParseError=false 将其过滤掉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2014-01-21
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多