Кэширование результатов в канале Mirth, который выполняет пакетную обработку
Я застрял с проблемой в Мирте. У меня есть канал Mirth, который получит файл.csv. Я выполняю пакетный процесс на этом канале. Таким образом, канал будет читать каждую строку в файле.csv. Я связываю каждую строку и превращаюсь в SOAP для связи с другим концом. Это работает нормально.
Я хотел снова объединить все строки из CSV-файла, создать новый CSV-файл и отправить его в качестве вложения отправителю. Я нашел способ прикрепить файл.csv и отправить по почте. Но я не могу объединить строки (кэшировать результаты строк) в одном канале.
Пожалуйста, дайте мне знать, как это сделать?
2 ответа
Конечно, это технически возможно в пределах одного канала, но вы должны быть готовы кешировать сообщения в памяти, чтобы вы могли отправить все это в конце.
В вашем сценарии развертывания инициализируйте карту:
if (!globalChannelMap.containsKey('csvMap')) {
$gc('csvMap', Maps.map());
}
В вашем препроцессоре добавьте каждое сообщение в консолидированный CSV (по сути, не пакетируя ваше пакетное сообщение):
var csvMap = $('csvMap');
var batchId = $('batchId');
if ($('batchSequenceId') == 1) {
csvMap.put(batchId, new java.lang.String(message));
} else {
csvMap.put(batchId, csvMap.get(batchId).concat(message));
}
return message;
Затем в пункте назначения отправителя SMTP добавьте правило фильтрации, чтобы оно срабатывало только при обработке последнего сообщения в пакете:
В том же месте назначения добавьте шаг преобразования, который извлекает консолидированный CSV из глобальной карты каналов и устанавливает преобразованные данные для него:
msg = SerializerFactory.getSerializer('DELIMITED').toXML($('csvMap').remove($('batchId')));
И вот, пожалуйста. Ваш канал будет продолжать обрабатывать по одной строке за раз, но когда он обрабатывает последнюю строку в пакете, он также вызовет этот другой пункт назначения. Я прикреплю канал (экспортирован из 3.5.0) для иллюстрации: Пример - Консолидация CSV.xml
Конечно, еще один, возможно, более разумный способ сделать это - разделить его на два канала. Восходящий канал не выполняет пакетную обработку, но отправляет на ваш нисходящий канал, а также отправляет эту электронную почту. В нисходящем канале должна быть включена пакетная обработка, и именно туда вы переместите отправителя веб-службы.
Я не уверен, выполнимо ли это или нет. Рассматривали ли вы сохранение строки в файл (добавление каждой строки) и наличие другого канала в качестве программы чтения файлов для получения этого файла? Удостоверьтесь, что старение настроено на минуту, чтобы не захватывать файл во время записи.