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