Salut,

Tu peux traduire n'importe quel article qui te plait. Pour cela, appuie le bouton EN à gauche de l'article en anglais et clique Français :

Apres ça, clique Translate :

Et écris la traduction, toutes les balises seront déjà là :

Tu vas aussi recevoir les points sur Global Masters 😊 Apres, tu peux utiliser ces points pour commander les cadeaux d'InterSystems.

La réponse originale de @Bob Kuszewski :

Si vous utilisez Python avec IRIS via le modèle client/serveur traditionnel, tel que le pilote DB-API ou NativeAPI, vous pouvez mettre à jour à partir de la version minimale de Python.

Si vous utilisez Embedded Python (c'est-à-dire Python exécuté en cours avec IRIS), la version de Python que vous pouvez utiliser est liée à votre système d'exploitation et ne peut pas (encore) être mise à niveau. Ils sont répertoriés ici. Nous travaillons actuellement sur la possibilité de mettre à niveau le runtime Python utilisé par Python intégré - nous en saurons plus bientôt.

La réponse originale de @Shamus Clifford  :

Avez-vous essayé GetContentArray() de EnsLib.HL7.Message ? Vous pourriez alors faire quelque chose de semblable au Test des chemins de propriété virtuelle dans le Terminal. Par exemple,

ClassMethod PrintPropertyPaths()
{
 set string="MSH|^~\&|MIHIN PATIENT GEN|1.2.3.4.5.9.99.999.9999.1004||2.16.840.1.113883.3.1481|20200103000000+0000||ADT^A01^ADT_A01|1092|P|2.6|1091|||||||||Windward General Hospital"_$C(13,10)_
            "EVN||20200110000000+0000|||||1.2.3.4.5.9.99.999.9999.1004"_
            "PID|1|3170|44c8a6bba5c743538e476a813256959b^^^^CKS~000003170^^^^SS||Santana^Pearl||19900609|F||2054-5^Black or African American^HL70005|364 NE Oak Circle^^Trenton^MI^48183||||||||000003170|||N^Not Hispanic or Latino^HL70189|||||||20200110000000+0000|N"_$C(13,10)_
            "PD1|||Windward General Hospital^^^^^^^^^1.2.3.4.5.9.99.999.9999.1004|9999992221^Johnston^Karl^^^^^^^^^^NPI^^^^^^^^MD"_$C(13,10)_
            "PV1|1|I|^^67^1.2.3.4.5.9.99.999.9999.1004||||9999992221^Johnston^Karl^^^^^^^^^^NPI||||||||||||17a5e3aa59a34ad5af017998278a5eb5||||||||||||||||||&HOME^20200110000000+0000|||||||20200103000000DG1|1||Z34.90^Normal pregnancy^I10||20200103000000+0000|F|^Become_Pregnant"_$C(13,10)_
            "IN1|1|1772^STATE HEALTH PLAN|1027|MEDICAID||||||||||||Santana^Pearl^Gladys|||364 NE Oak Circle^^Trenton^MI^48183"_$C(13,10)
 set target=##class(EnsLib.HL7.Message).ImportFromString(string,.status)
 if 'status {do $system.Status.DisplayError(status) quit}
 set target.DocType="2.6:ADT_A01"
 do target.GetContentArray(.propertyPaths,, target.DocType)
 for i=1:1:propertyPaths {
   for j=1:1:propertyPaths(i) {
     w i, ".", j, propertyPaths(i,j, "name"), !
   }
 }
}

La réponse originale de @Jeff Morgan  :

Ewan,

Voici un exemple simple de la façon de compter les DocType dans le tableau EnsLib_HL7.Message :

SELECT Count(*) 
  FROM EnsLib_HL7.Message
 WHERE Name = 'ADT_A12'

Si vous avez besoin de comparer également les propriétés de Ens.MessageHeader, vous pouvez faire une jointure sur les deux tableaux :

select Count(*) 
  from EnsLib_HL7.Message As Body
LEFT JOIN Ens.MessageHeader As Header
       ON Body.ID = Header.MessageBodyId
 WHERE Header.ID > 1 
   AND Body.Name = 'ADT_A12'

J'espère que cela vous aidera.

La réponse originale de @Marc Mundt  :

Si vous prévoyez d'effectuer des recherches fréquentes sur un segment/champ HL7 spécifique, vous pouvez accélérer considérablement les recherches en utilisant le mécanisme de "tableaux de recherche" d'Ensemble pour ajouter un index pour ce champ.

http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...

Les champs indexés dans le tableau de recherche sont répertoriés dans la liste déroulante de la recherche du visualiseur de messages, ou peuvent être interrogés à l'aide de SQL en joignant EnsLib_HL7.SearchTable :

select msg.ID,msg.TimeCreated,
       msg.DocType,
       msgHdr.SourceConfigName,
       msgHdr.TargetConfigName,
       msg.RawContent 
from EnsLib_HL7.SearchTable srchTbl
join enslib_hl7.message msg on msg.id=srchTbl.docid 
join Ens.MessageHeader msgHdr on msgHdr.MessageBodyId=srchTbl.docid
where  (srchTbl.propid=(select propid from Ens_Config.SearchTableProp where classextent='EnsLib.HL7.SearchTable' and name='PatientSSN')
       and srchTbl.propvalue = '123-25-4612')
       and msgHdr.SourceConfigName='HL7.File.In'

La réponse originale de @Brendan Batchelder :

Pour ce faire, dans le visualiseur de messages, ajoutez un critère étendu à vos paramètres de recherche. Type de critère = VDoc Property Path. Classe = EnsLib.HL7.Message. DocType = Schema:Nom du type de documents que vous recherchez (par exemple 2.3.1:ADT_A01). Route de la propriété = la route VDoc du champ sur lequel vous recherchez (par exemple MSH:SendingApplication).
Il convient de noter que le visualisateur de messages utilise le langage SQL pour obtenir une liste de messages basée sur les "critères de base", puis il boucle sur les résultats en appliquant chacun des "critères étendus" comme filtre. Cette opération peut être très lente. Si cela prend plus de 2 minutes, le visualiseur de messages se bloque et soit les critères de base doivent être affinés afin de renvoyer moins de résultats, soit la recherche de messages doit être effectuée avec du code.
Pour ce faire avec un code, utilisez le SQL intégré pour effectuer une recherche sur les en-têtes de message en fonction de critères de base, puis bouclez sur les résultats en vérifiant les routes VDoc. Voici un exemple qui recherche les messages d'un jour particulier qui ont une valeur particulière dans MSH:3, le champ de l'Application expéditrice :

&SQL(DECLARE C1 CURSOR FOR
      SELECT MessageBodyId INTO :id
        FROM Ens.MessageHeader 
       WHERE MessageBodyClassName='EnsLib.HL7.Message'
         AND TimeCreated BETWEEN '2016-07-15'
         AND '2016-07-16')
&SQL(OPEN C1)
&SQL(FETCH C1)
while (SQLCODE = 0) {
   set msg = ##class(EnsLib.HL7.Message).%OpenId(id)
   if (msg.GetValueAt("MSH:SendingApplication") = "Ensemble") {
      //do something with this message
   }
   &SQL(FETCH C1)
}
&SQL(CLOSE C1)

La réponse originale de @Mike Moulckers:

Scott,
L'astuce consiste à utiliser la syntaxe appropriée pour accéder aux différents champs du message DICOM. Dans l'exemple ci-dessous, nous extrayons des données du message DICOM pour les insérer dans un message de demande de planification simple produit en XML. La même syntaxe peut être utilisée en sens inverse, en écrivant de HL7 vers DICOM. Comme le message DICOM n'est pas entièrement défini dans Ensemble/HealthShare, la vue graphique de l'éditeur DTL n'est pas très jolie...

Class Test.Transform.DICOMToPatientSchedule Extends Ens.DataTransformDTL [ DependsOn = (EnsLib.DICOM.Document, Test.Msg.PatientScheduleReq) ]
{ 
   Parameter IGNOREMISSINGSOURCE = 1; 
   Parameter REPORTERRORS = 1; 
   Parameter TREATEMPTYREPEATINGFIELDASNULL = 0; 
   XData DTL [ XMLNamespace = "http://www.intersystems.com/dtl" ]
   {
      <transform sourceClass='EnsLib.DICOM.Document' targetClass='Test.Msg.PatientScheduleReq' targetDocType='2.3.1:ADT_A01' create='new' language='objectscript' >
         <assign value='source.GetValueAt("DataSet.PatientID")' property='target.PID' action='set' />
         <assign value='"DICOM"' property='target.MessageSource' action='set' />
         <assign value='source.GetValueAt("DataSet.PatientName")' property='target.PatientName' action='set' />
         <assign value='source.GetValueAt("DataSet.ScheduledProcedureStepSequence[1].ScheduledProcedureStepStartDate")' property='target.ExamDateTime' action='set' />
         <assign value='source.GetValueAt("DataSet.ScheduledProcedureStepSequence[1].ScheduledProcedureStepStartDate")' property='target.FileDate' action='set' />
         <assign value='source.GetValueAt("DataSet.ScheduledProcedureStepSequence[1].ScheduledProcedureStepDescription")' property='target.ExamType' action='set' />
         <assign value='source.GetValueAt("DataSet.AccessionNumber")' property='target.AccessionNumber' action='set' />
         <assign value='source.GetValueAt("DataSet.StudyInstanceUID")' property='target.VisitId' action='set' />
         <assign value='source.GetValueAt("DataSet.ScheduledProcedureStepSequence[1].ScheduledPerformingPhysicianName")' property='target.AttendingPhysician' action='set' />
      </transform>
   }
}