2016-03-10 2 views
2

Je veux utiliser Mirth pour obtenir des données à partir du fichier XML (CCD) et mettre son, dans ma base de données SQL Server.Comment utiliser Mirth pour insérer des données dans la base de données SQL Server à partir du fichier xml

J'ai donc installé l'administrateur Mirth connect sur mon PC, puis je viens de créer un nouveau canal avec le fichier XML source, et vers la base de données Destination my SQL server. J'ai aussi choisi la table de ma base de données, et automatiquement, Mirth ai créé cette requête:

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

Maintenant, le problème est le suivant, la section (que je veux insérer dans ma base de données) de mon document CCD (fichier .xml) ont cette structure:

<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> 

Comme vous pouvez le voir, il y a deux tags

entrée typeCode = "DRIV"

Je souhaite insérer dans ma base de données autant d'enregistrements que de balises d'entrée. Dans cet exemple, je devrais insérer dans ma base de données 2 enregistrements.

+0

vous avez deux problèmes ou de maladie si vous voulez ici à la fois référence au même patient. Donc, fondamentalement, vous devez itérer et utiliser le code dans la réponse ci-dessous pour insérer chaque maladie séparément. – Shamil

+2

Hors sujet: Je me demande pourquoi le type de données "valeur" du modèle d'état de problème est CE. Je l'ai déjà vu mais cela n'a pas de sens car aucun codage alternatif n'est ou ne sera fourni. Le type de données CD devrait fonctionner dans ce cas. – Shamil

Répondre

2

Vous pourriez faire quelque chose comme ce qui suit dans un écrivain JavaScript. Je préfère l'éditeur JavaScript sur Database Writer parce que vous avez beaucoup plus de flexibilité et que vous pouvez appeler tous les mêmes Java Mirth natifs du JavaScript.

Si vous passez votre XML (à partir d'un lecteur de fichiers, si je comprends bien ...) de votre source vers votre destination, définissez le type de destination en tant qu'auteur JavaScript, puis itérer à travers vos objets comme ceci:

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][email protected] == '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... 
} 

Iteration par XML est fait à l'aide E4X: https://developer.mozilla.org/en-US/docs/Archive/Web/E4X_tutorial