Как сгенерировать два файла XML из одного файла HL7 и вставить оба в два разных столбца как одну запись?

У меня есть тип соединителя источника как «Считыватель файлов», который читает файлы HL7, и тип соединителя назначения как «Средство записи базы данных». Моя таблица базы данных имеет два столбца

  1. Участник_Информация
  2. SPR_Информация

Я хочу преобразовать один файл HL7 в два файла XML, один для столбца Participant_Information, а другой для столбца SPR_Information, и мне нужно вставить оба как одну запись в таблицу базы данных.

Я могу вставлять один XML за раз, но не могу найти способ вставить оба XML в виде одной записи в таблицу базы данных.

Любая помощь действительно очень ценится!


person vivek_ratnaparkhi    schedule 04.10.2012    source источник
comment
Привет, Вивек, я уверен, что могу ответить на твой вопрос. Сначала ответьте на следующие вопросы: 1. два XML-файла разные или идентичные? 2. Как вы в настоящее время генерируете один XML? В преобразователе Mirth, изменив объект msg? 3. Опубликуйте SQL, который вы используете в Database Writer.   -  person csj    schedule 05.10.2012
comment
Привет да! Два XML-файла разные, оба содержат разные данные из одного файла HL7. Я генерирую XML, редактируя Transformer (тип Message Builder). Ниже приведен SQL, который я использую в Database Writer. INSERT INTO report_queue (PARTICIPANT_IDENTIFICATION) VALUES (${message.transformedData})   -  person vivek_ratnaparkhi    schedule 05.10.2012
comment
Эй, извини, что я так долго не отвечал! И я просто очень хочу поблагодарить вас за ваш ответ. Я остановился на втором подходе, и он работал хорошо. Я также пытаюсь с первым подходом посмотреть, смогу ли я сделать это с помощью JavaScript.   -  person vivek_ratnaparkhi    schedule 15.10.2012
comment
Спасибо за ответ, и я рад, что это сработало.   -  person csj    schedule 16.10.2012


Ответы (1)


Я основываю этот ответ как на вопросе, так и на вашем ответе мне в комментариях.

Имейте в виду, что со своей стороны я ссылаюсь на версию 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