ir a la publicación Alberto Fuentes · 1 jun, 2023 Hola Kurro, Me parece que en las reglas del enrutador no se puede. Una posible alternativa sería: Desde el enrutador, enviar el mensaje a un Business Process que se encargue de enviar dinámicamente lo que necesites Creas el Business Process anterior, y extraes el valor que necesites del HL7 (e.g. usando .GetValueAt()) y después desde el Business Process sí que puedes hacer envío dinámico utilizando justo esa sintaxis que has puesto (@destino) en la llamada.
ir a la publicación Alberto Fuentes · 5 sep, 2022 Hola Yuri, Una opción muy sencilla es utilizar $zdatetime, por ejemplo: write $translate($zdatetime($horolog, 3, 1)," ","T") En la documentación puedes ver distintos formatos disponibles para fecha y hora con los que puedes jugar con $zdatetime.
ir a la publicación Alberto Fuentes · 2 sep, 2022 Hola Luis, Parece que estás en una versión muy antigua (2012) y utilizando una tecnología (ZEN) también antigua. ZEN se soporta aún por compatibilidad, pero échale un vistazo al InterSystems IRIS Migration Guide en el WRC > Software Distribution > Docs. Sobre tu cuestión, el error probablemente viene dado de que intentas establecer el value de algo nulo. No consigues referencia el parámetro. Prueba con el ejemplo que te ha pasado Mario, o incluso mejor añade un id al parámetro para que puedas referenciarlo directamente a través del identificador. <tablePane id="table" queryClass="MyApp.Employee" queryName="ListEmployees"> <parameter value="Sales" id="param1"/> <parameter value="NEW YORK"/> </tablePane> Mira por ejemplo en Query Parameters
ir a la publicación Alberto Fuentes · 1 ago, 2022 Hola Yone, En los adaptadores de interoperabilidad no hay directamente un adaptador STOW-RS pero puedes intentar implementar la parte de servicios REST en la plataforma y luego enviarlo utilizando los adaptadores DICOM TCP convencionales. Los servicios y operaciones incluidos que utilizan adaptadores DICOM TCP emplean siempre como mensaje EnsLib.DICOM.Document. Y sí, puedes instanciar un documento DICOM desde un fichero (stream) con CreateFromDicomFileStream. Comprueba siempre el resultado de CreateFromDicomFileStream por si devuelve algún error. Si todo va bien, debería ser 1 o lo que es lo mismo un $$$OK. USER>set fileStream = ##class(%Stream.FileBinary).%New() USER>set fileStream.Filename="/shared/dicom/d1I00001.dcm" USER>write fileStream.Size 262878 USER>set sc = ##class(EnsLib.DICOM.Document).CreateFromDicomFileStream(fileStream, .dicom) USER>write sc 1 USER>zwrite dicom dicom=13@EnsLib.DICOM.Document ; <OREF> +----------------- general information --------------- | oref value: 13 | class name: EnsLib.DICOM.Document | reference count: 2 +----------------- attribute values ------------------ | %Concurrency = 1 <Set> | DestinationAET = "" | Modified = 1 | OriginalSourceAET = "" | SourceAET = "" | SourceIPAddress = "" +----------------- swizzled references --------------- | i%CommandSet = "" <Set> | r%CommandSet = "7@EnsLib.DICOM.CommandSet" <Set> | i%FixedDataSet = "" | r%FixedDataSet = "5@EnsLib.DICOM.FixedDataSet" | i%MutableDataSet = "" <Set> | r%MutableDataSet = "4@EnsLib.DICOM.MutableDataSet" <Set> +--------------- calculated references --------------- | (i%DataSet) <Get> | (r%DataSet) <Get> | HasData <Get> +----------------------------------------------------- USER> Una vez tengas tu instancia de EnsLib.DICOM.Document ya puedes enviarlo por DICOM TCP convencional. En tu ejemplo, parece que lo has incluido en otro mensaje. Quizá se haya construido con errores el EnsLib.DICOM.Document, o simplemente sea un tema de representación en el visor de mensajes. Siempre puedes instanciar el mensaje en concreto que quieras en el terminal y examinar su contenido para quedarte seguro.
ir a la publicación Alberto Fuentes · 13 jun, 2022 Hola Yone, Los Streams se utilizan para almacenar cadenas de datos sin límite de tamaño. Si en una clase persistente, incluyes propiedades de tipo Stream serán persistentes. %Stream.GlobalCharacter, %Stream.GlobalBinary: persisten los datos en globals (en la base de datos).%Stream.FileCharacter, %Stream.FileBinary: persisten los datos en ficheros (.stream). Lo que te recomienda la documentación es que utilices estas clases en lugar de sus versiones antiguas, por ejemplo: Utiliza %Stream.GlobalCharacter en lugar de la antigua %GlobalCharacterStream. Utiliza %Stream.FileCharacter en lugar de la antigua %FileCharacterStream. La gestión de los mensajes huérfanos es como siempre. Si tienes un árbol de clases persistente que cuelga de un mensaje de interoperabilidad (incluya o no Streams), recuerda siempre implementar el método %OnDelete para borrar su contenido adecuadamente.
ir a la publicación Alberto Fuentes · 3 jun, 2022 Hola Yone, Si el %Status (tSC) que te devuelve ##class(ITB.HL7.Util.Convert).ER7ToXML es 1 como muestras, entonces el error no lo tienes en la parte de la conversión de ER7 a XML en Healthcare-HL7-XML (ITB). Tendrás que ir examinando el resto de partes que tengas en tu servicio web: No sé si tienes más código antes o después de esa llamada, comprueba que no haya errores. Comprobar logs del servidor web y del CSP Webgateway. Incluso puedes activar ISCLOG Documentación
ir a la publicación Alberto Fuentes · 3 jun, 2022 Hola Yone, Entiendo que estás comparando dos cosas diferentes: Mismo mensaje entrada Ensemble 2018, Healthcare-HL7-XML (ITB) v.2.1, te devuelve HTTP 500 Health Connect 2020, Healthcare-HL7-XML (ITB) v.3.4, te devuelve HTTP 200 Hay más factores que pueden intervenir: servidor web externo, configuración Web Gateway, configuración seguridad aplicación web. Yo te recomendaría que lo primero de todo pongas algunas trazas en el código de tu WebService para comprobar si la llamada está llegando a donde crees. Por ejemplo puedes utilizar una global: set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"before" set ackXML = ##class(ITB.HL7.Util.Convert).ER7ToXML(ackER7,.tSC,"2.5") set ^zdebug($i(^zdebug))="["_$zdt($zts,3,,2)_"] "_"after. tSC="_tSC Y luego échale un vistazo: USER>zw ^zdebug ^zdebug=3 ^zdebug(2)="[2022-06-03 08:35:47.75] before" ^zdebug(3)="[2022-06-03 08:35:57.39] after. tSC=1" Así de entrada estás seguro que está llegando hasta la llamada. Si llega hasta la llamada, luego puedes investigar en particular la conversión para ese mensaje.
ir a la publicación Alberto Fuentes · 6 mayo, 2022 Hola, Necesitas configurar el FHIR Server de IRIS como un OAuth Resource Server. Ten en cuenta que se requiere que cuando envíes el access token al servidor lo hagas como una cabecera Bearer, no como un parámetro de la URL.
ir a la publicación Alberto Fuentes · 27 abr, 2022 Hola Yone, Los procesos de negocio para DICOM tienen que controlar y gestionar lo que sucede con las operaciones DICOM que usan debido a la propia naturaleza dúplex del protocolo. https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI... Por ejemplo, en DICOM.BP.QueryProcess tiene que gestionar llamadas para establecer y liberar las asociaciones en la conexión. Quizá te resulte más sencillo de implementar utilizar varios BP y BO en la producción, según los diferentes sistemas que tengas que integrar.
ir a la publicación Alberto Fuentes · 20 abr, 2022 Hola Yone, Disculpa, ¡no había visto que esta pregunta estaba sin responder! No puedes exportar un documento DICOM a XML y después tratar de escribirlo directamente en la traza. Los documentos DICOM son complejos y la forma de acceder a sus propiedades es a través de los métodos de la clase EnsLib.DICOM.Document. Por ejemplo: pInput.GetValueAt("DataSet.PatientID",,.tSC)