【问题标题】:Mirth: Alerts triggered by errors in JS-based database writer don't have access to {messageId}?Mirth:由基于 JS 的数据库编写器中的错误触发的警报无权访问 {messageId}?
【发布时间】:2020-07-29 15:57:39
【问题描述】:

使用 mirth 版本 3.8.1。我已经为频道的错误设置了警报。当错误来自目标转换器(即 Javascript)时,警报能够访问 {messageId} 变量并提取正确的 id。但是,当基于 Javascript 的数据库编写器发生错误时,警报只会返回“{messageId}”而不是值。

我尝试了很多东西... 全局地图可从警报中访问,但在其中放置消息 ID 会被另一个处理线程覆盖。 其他目标类型 - http 发送器、tcp 发送器、通道写入器,甚至非基于 JavaScript 的数据库写入器目标都可以工作。

我什至将数据库编写器代码简化为:

var dbConn;
dbConn = DatabaseConnectionFactory.createDatabaseConnection('com.mysql.cj.jdbc.Driver','jdbc:mysql://host:port/dbname','','');

我是否只需要在数据库编写器代码中引发特定异常并在遇到这些异常时引发警报,并在错误字符串中发送消息 ID?

【问题讨论】:

  • 您是使用 JS 风格还是普通风格构建查询以写入数据库?无论哪种情况,请发布您如何构建查询。您可能没有使用正确的 messageId 替换语法。

标签: mirth


【解决方案1】:

您偶然发现了一个错误。我开了一个issue 和一个fix

如果不是另一个bug 也忽略了提供messageId,你应该可以使用alerts.sendAlert('Custom Error Message')alerts 是 mirth 为您创建的用户 API 中的 AlertSender 的一个实例。我也为此创建了一个fix

目前我所知道的手动发送包含 messageId 的警报的唯一解决方法是直接调用 EventController。需要注意的是,这在技术上不支持作为公共 API 的一部分,并且在未来的版本中使用可能会中断,恕不另行通知。

com.mirth.connect.server.controllers.ControllerFactory
    .getFactory()
    .createEventController()
    .dispatchEvent(new com.mirth.connect.donkey.server.event.ErrorEvent(
        connectorMessage.getChannelId(),
        connectorMessage.getMetaDataId(),
        connectorMessage.getMessageId(),
        com.mirth.connect.donkey.model.event.ErrorEventType.USER_DEFINED_TRANSFORMER,
        connectorMessage.getConnectorName(),
        null, /* connectorType */
        'A TEST ERROR MESSAGE',
        null /* throwable */
    )
);

这将像从过滤器、转换器、Javascript 编写器或数据库编写器以 javascript 模式编写一样工作。在其他情况下,不会定义 connectorMessage,您必须以不同的方式提供其中一些值。如果您不需要 messageId 并且不想引发异常,只需使用 alerts.sendAlert(errorMessage),因为这不需要调用不受支持的内部类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多