Кэширование результатов в канале 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

Конечно, еще один, возможно, более разумный способ сделать это - разделить его на два канала. Восходящий канал не выполняет пакетную обработку, но отправляет на ваш нисходящий канал, а также отправляет эту электронную почту. В нисходящем канале должна быть включена пакетная обработка, и именно туда вы переместите отправителя веб-службы.

Я не уверен, выполнимо ли это или нет. Рассматривали ли вы сохранение строки в файл (добавление каждой строки) и наличие другого канала в качестве программы чтения файлов для получения этого файла? Удостоверьтесь, что старение настроено на минуту, чтобы не захватывать файл во время записи.

Другие вопросы по тегам