Я основываю этот ответ как на вопросе, так и на вашем ответе мне в комментариях.
Имейте в виду, что со своей стороны я ссылаюсь на версию 1.8.2 Mirth. Если вы используете что-то более новое, хотя я уверен, что описанные здесь методы все еще будут действительны, пользовательский интерфейс может отличаться от моих указаний.
Я представляю здесь два метода решения этой проблемы. Хотя лично я склоняюсь к Методу 1, если вы менее знакомы с Javascript и E4X, то Метод 2, вероятно, будет предпочтительнее.
Техника 1.
Используйте преобразователь Javascript вместо построителя сообщений. Проблема с использованием построителя сообщений заключается в том, что он берет входное сообщение и преобразует его в одно выходное сообщение. Javascript дает вам больше возможностей, но только если вы знаете язык.
a.
Используйте один преобразователь Javascript, чтобы сделать две копии сообщения. Преобразуйте каждую переменную по мере необходимости, используя нотацию Javascript E4X, а затем сохраните их обе в ChannelMap.
// init local message variables
var messageParticipant= msg;
var messageSPR= msg.copy();
// messageParticipant transformations using E4X notation: example
messageParticipant['PID']['PID.5']['PID.5.1'][0] = 'Blah';
// messageSPR transformations using E4X notation: example
messageSPR['PID']['PID.5']['PID.5.1'][0] = 'Hey There';
// stick messages in channel map so they can be accessed in your SQL script
channelMap.put('messageParticipant', messageParticipant);
channelMap.put('messageSPR',messageSPR);
b.
Ссылайтесь на две переменные каналаMap в коде SQL.
INSERT INTO report_queue (PARTICIPANT_IDENTIFICATION, SPR_Information)
VALUES (${'messageParticipant'}, ${'messageSPR'})
Техника 2.
Если вам менее удобно использовать Javascript для ваших преобразований, вам может показаться, что этот метод немного проще, хотя мне кажется, что его немного сложнее объяснить.
По сути, у вас будет три пункта назначения, и вы заставите их выполняться последовательно. Первый пункт назначения создает XML для PARTICIPANT_IDENTIFICATION, а второй пункт назначения создает XML для SPR_Information. Первые два пункта назначения на самом деле не отправляют сообщения никуда, кроме ChannelMap. Третий пункт назначения использует результаты первых двух и запускает код SQL.
a.
На вкладке сводки убедитесь, что установлен флажок «Синхронизировать канал». Это заставит три пункта назначения выполняться последовательно.
b.
На вкладке «Места назначения» в дополнение к существующему модулю записи базы данных создайте два модуля записи Javascript. Организуйте три пункта назначения, чтобы они отображались в следующем порядке:
Destination Connector Type
---------------------------------------
Build Participant JavaScript Writer
Build SPR JavaScript Writer
SQL Database Writer
c.
Выберите место назначения «Участник сборки» и в текстовой области Javascript введите следующее:
channelMap.put('messageParticipant', messageObject.getTransformedData());
d.
Выберите место назначения «Построить SPR» и в текстовой области Javascript введите следующее:
channelMap.put('messageSPR', messageObject.getTransformedData());
e.
В назначении SQL используйте тот же код SQL, что и в методе 1.
INSERT INTO report_queue (PARTICIPANT_IDENTIFICATION, SPR_Information)
VALUES (${'messageParticipant'}, ${'messageSPR'})
f.
Для каждого из двух назначений Javascript: i. Нажмите «Редактировать трансформатор» ii. Перейдите на вкладку «Шаблоны сообщений». iii. В разделе «Шаблон исходящего сообщения» убедитесь, что тип данных установлен на XML. iv. Добавьте все необходимые шаги преобразования и не стесняйтесь использовать тип Message Builder. , вы добавите шаги преобразователя, применимые к XML участника (аналогично для целевой сборки SPR).
g.
Назначение SQL не должно иметь преобразователей. Если это так, они не окажут никакого влияния на вывод.
Удачи
person
csj
schedule
06.10.2012