Как использовать Mirth для вставки данных в базу данных SQL Server из файла xml

Я хочу использовать Mirth для получения данных из файла XML (CCD) и поместить их в свою базу данных SQL Server.

Итак, я установил администратора Mirth connect на свой компьютер, затем я только что создал новый канал с исходным XML-файлом и к месту назначения моей базы данных SQL-сервера. Я также выбрал таблицу своей базы данных, и Мирт автоматически создал этот запрос:

INSERT INTO CLINICAL_DOC_Problems (Id, IdRoot, IdExtension, IdObservationRoot, IdObservationExtension, EffectiveTime, EffectiveTimeMin, EffectivTimeMax, CodeSystem, Code, CodeSystemStatus, CodeStatus, IdSection)
VALUES (, , , , , , , , , , , , )

Теперь проблема в том, что раздел (который я хочу вставить в свою базу данных) моего документа CCD (файл .xml) имеет следующие структуры:

<component>
<section>
    <templateId root='2.16.840.1.113883.10.20.1.11'/> <!-- Problem section template -->
    <code code="11450-4" codeSystem="2.16.840.1.113883.6.1"/> 
    <entry typeCode="DRIV">
        <act classCode="ACT" moodCode="EVN">
            <templateId root='2.16.840.1.113883.10.20.1.27'/> <!-- Problem act template -->
            <id root="6a2fa88d-4174-4909-aece-db44b60a3abb"/>
            <entryRelationship typeCode="SUBJ">
                <observation classCode="OBS" moodCode="EVN">
                    <templateId root='2.16.840.1.113883.10.20.1.28'/> <!-- Problem observation template -->
                    <id root="d11275e7-67ae-11db-bd13-0800200c9a66"/>
                    <code code="ASSERTION" codeSystem="2.16.840.1.113883.5.4"/>                 
                    <effectiveTime><low value="1950"/></effectiveTime>
                    <value xsi:type="CD" code="195967001" codeSystem="2.16.840.1.113883.6.96" displayName="Asthma"/>
                    <entryRelationship typeCode="REFR">
                        <observation classCode="OBS" moodCode="EVN">
                            <templateId root='2.16.840.1.113883.10.20.1.50'/> <!-- Problem status observation template -->
                            <code code="33999-4" codeSystem="2.16.840.1.113883.6.1" displayName="Status"/>
                            <value xsi:type="CE" code="55561003" codeSystem="2.16.840.1.113883.6.96" displayName="Active"/>
                        </observation>
                    </entryRelationship>
                </observation>
            </entryRelationship>
        </act>  
    </entry>
    <entry typeCode="DRIV">
        <act classCode="ACT" moodCode="EVN">
            <templateId root='2.16.840.1.113883.10.20.1.27'/> <!-- Problem act template -->
            <id root="ec8a6ff8-ed4b-4f7e-82c3-e98e58b45de7"/>
            <entryRelationship typeCode="SUBJ">
                <observation classCode="OBS" moodCode="EVN">
                    <templateId root='2.16.840.1.113883.10.20.1.28'/> <!-- Problem observation template -->
                    <id root="ab1791b0-5c71-11db-b0de-0800200c9a66"/>
                    <code code="ASSERTION" codeSystem="2.16.840.1.113883.5.4"/>
                    <value xsi:type="CD" code="233604007" codeSystem="2.16.840.1.113883.6.96" displayName="Pneumonia"/>
                    <entryRelationship typeCode="REFR">
                        <observation classCode="OBS" moodCode="EVN">
                            <templateId root='2.16.840.1.113883.10.20.1.50'/> <!-- Problem status observation template -->
                            <code code="33999-4" codeSystem="2.16.840.1.113883.6.1" displayName="Status"/>
                            <value xsi:type="CE" code="413322009" codeSystem="2.16.840.1.113883.6.96" displayName="Resolved"/>
                        </observation>
                    </entryRelationship>
                </observation>
            </entryRelationship>
        </act>
    </entry>
</section>
</component>

Как видите, есть два тега

тип записиCode="DRIV"

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


person bircastri    schedule 10.03.2016    source источник
comment
У вас есть две проблемы или болезни, если хотите, здесь обе относятся к одному и тому же пациенту. Таким образом, в основном вам нужно повторить и использовать код в ответе ниже, чтобы вставить каждое заболевание отдельно.   -  person Shamil    schedule 10.03.2016
comment
Не по теме: интересно, почему тип данных значения шаблона состояния проблемы - CE. Я видел это раньше, но это не имеет смысла, поскольку альтернативное кодирование не предоставляется и не будет предоставлено. В этом случае должен работать тип данных CD.   -  person Shamil    schedule 10.03.2016


Ответы (1)


Вы можете сделать что-то вроде следующего в программе записи JavaScript. Я предпочитаю средство записи JavaScript, а не средство записи базы данных, потому что у вас гораздо больше гибкости и вы можете вызывать все ту же родную Mirth Java из JavaScript.

Если вы передаете свой XML (из File Reader, если я правильно понимаю...) из источника в место назначения, установите тип назначения как средство записи JavaScript, а затем выполните итерацию по своим объектам следующим образом:

var dbConn;
try {
    dbConn = DatabaseConnectionFactory.createConnection(driver, address, username, password);
    var xml = new XML(connectorMessage.getEncodedData());
    for(var i = 0; i < xml.section.entry.length(); i++) {
        if(xml.section.entry[i].@typeCode == 'DRIV') {
            var myData = xml.section.entry[i].act;
            var myQuery = '';
            //do something with myVar to get a query...
            dbConn.executeCachedQuery(myQuery);
        }
    }
} catch (ex) {
    //handle any exceptions...
}

Итерация через XML выполняется с использованием E4X: https://developer.mozilla.org/en-US/docs/Archive/Web/E4X_tutorial

person LeeCambl    schedule 10.03.2016