如何在源过滤器/转换器中获取轮询设置以区分自动/手动轮询?
Mirth通道自动/手动轮询的目标执行控制问题
背景说明
我开发了一个Mirth通道,用于将服务器指定文件以Base64编码字符串存入CONFIGURATION数据库做备份;同时添加了恢复目标,可从数据库取回文件恢复到本地目录。通道需要每日自动轮询一次执行备份,也支持手动轮询触发备份或恢复操作。
问题需求
需要区分通道的自动轮询与手动轮询:
- 自动轮询(如夜间定时触发)时,不执行恢复目标;
- 手动轮询时,执行选中的目标(包括恢复目标)。
直接无条件移除恢复目标会导致在仪表板手动选中该目标时也无法执行,因此需要动态判断触发方式。曾考虑对比当前时间与轮询设置时间,但手动维护时间变量会导致后续修改轮询时间时需同步更新两处,希望能直接在源过滤器/转换器中获取通道的轮询设置信息。
已尝试方案
- 禁用恢复目标:每次使用时需重新启用并部署通道,操作繁琐;
- 全局变量判断:在源转换器中对比当前时分与全局变量
auto_poll_hour、auto_poll_minute,但变量需手动维护,同步成本高; - 直接调用API:尝试调用
Packages.com.mirth.connect.donkey.model.channel.CronProperty().getExpression()等方法,提示方法不存在; - 实例化仓库对象:尝试通过全局
donkey类访问,但未找到合适的通道级对象实例。
可行解决方案
方法1:直接判断触发类型(推荐)
Mirth内置了判断当前消息是否为手动触发的方法,无需依赖轮询时间配置,直接在源转换器中添加以下代码:
// 判断是否为手动轮询触发 var isManualTrigger = message.getConnectorMessage().getMetaData().isManual(); // 非手动触发(自动轮询)时,移除恢复目标 if (!isManualTrigger) { // 替换为你的恢复目标名称,或用索引(如destinationSet.remove(1),索引从0开始) var restoreDestination = destinationSet.getDestinationByName("恢复文件"); if (restoreDestination) { destinationSet.remove(restoreDestination); } }
方法2:获取通道轮询配置信息
如果确实需要获取轮询的具体配置(如Cron表达式或固定轮询时间),可通过channel全局对象访问源连接器的属性:
var sourceConnector = channel.getSourceConnector(); var pollProps = sourceConnector.getProperties(); // 获取Cron表达式(若使用Cron轮询) if (pollProps.getCronExpression) { var cronExpr = pollProps.getCronExpression(); logger.info("通道自动轮询Cron表达式:" + cronExpr); } // 获取固定轮询的时分(若使用每日固定时间轮询) if (pollProps.getPollingHour && pollProps.getPollingMinute) { var pollHour = pollProps.getPollingHour(); var pollMinute = pollProps.getPollingMinute(); logger.info("通道自动轮询时间:" + pollHour + ":" + pollMinute); }
注意:需根据连接器类型(如文件连接器、数据库连接器)确保调用的方法存在,避免抛出异常。
内容的提问来源于stack exchange,提问作者Verevivana
相关产品推荐
相关产品推荐

