En la última competición de InterSystems "Convirtiendo Ideas en Realidad", estuve explorando el portal de ideas en busca de problemas de interfaz de usuario para intentar resolverlos.
Es la experiencia en el sector de la tecnología de InterSystems que resuelve algún problema en particular de una manera elegante o inusual.
En la última competición de InterSystems "Convirtiendo Ideas en Realidad", estuve explorando el portal de ideas en busca de problemas de interfaz de usuario para intentar resolverlos.
Si queréis generar un error personalizado arbitrario en un bloque TRY, podéis pasar una excepción con un throw de la siguiente manera. En el siguiente ejemplo, se genera un error personalizado si el valor de Stcount es menor que 1.
ClassClassMethodtryEn el ejemplo anterior, si Stcount es menor que 1, aparecerá un error como el siguiente:
USER>A la hora de construir una imagen de IRIS, podéis usar archivos CPF Merge.
Aquí tenéis un ejemplo de CPF Merge:
[Actions]
CreateDatabase:Name=IRISAPP_DATA,Directory=/usr/irissys/mgr/IRISAPP_DATA
CreateDatabase:Name=IRISAPP_CODE,Directory=/usr/irissys/mgr/IRISAPP_CODE
CreateNamespace:Name=IRISAPP,Globals=IRISAPP_DATA,Routines=IRISAPP_CODE,Interop=1
ModifyService:Name=%Service_CallIn,Enabled=1,AutheEnabled=48
CreateApplication:Name=/frn,NameSpace=IRISAPP,DispatchClass=Formation.REST.Dispatch,AutheEnabled=48
ModifyUser:Name=SuperUser,PasswordHash=a31d24aecc0bfe560a7e45bd913ad27c667dc25a75cbfd358c451bb595b6bd52bd25c82cafaa23ca1dd30b3b4947d12d3bb0ffb2a717df29912b743a281f97c1,0a4c463a2fa1e7542b61aa48800091ab688eb0a14bebf536638f411f5454c9343b9aa6402b4694f0a89b624407a5f43f0a38fc35216bb18aab7dc41ef9f056b1,10000,SHA512
Se puede obtener con una consulta de lista de la clase %SYS.Namespace.
1. Creáis una rutina como esta:
getnsp
set##class2. Ejecutadla en vuestro terminal.
El método para ejecutar consultas de clase presentado en este artículo se puede aplicar en una variedad de casos.
Podéis ver diversas consultas de clase en la referencia de clases. Por ejemplo:
%SYS.DatabaseQuery: GetFreeSpace() Espacio libre en la base de datos
%SYS.GlobalQuery: DirectoryList
InterSystems IRIS proporciona un entorno completo para el desarrollo de aplicaciones, diseñado para crear aplicaciones sofisticadas centradas en datos y análisis intensivo, conectando silos de datos y aplicaciones. Está preparado para trabajar con todas las tecnologías comunes de desarrollo de manera abierta y basada en estándares, y admite tanto la programación del lado del servidor como del lado del cliente.
InterSystems IRIS permite el desarrollo de aplicaciones del lado del servidor utilizando Python y ObjectScript de InterSystems.
La capacidad de reenviar mensajes fácilmente siempre ha sido una de las características más destacadas de nuestras capacidades de interoperabilidad.
Con la versión 2024.3 que se lanzará pronto (ya disponible como Developer Preview), ¡lo hemos hecho aún más sencillo!
Por defecto, el orden de las columnas en una tabla lo determina automáticamente el sistema. Para cambiar el orden, estableced explícitamente el orden de cada propiedad utilizando la palabra clave SqlColumnNumber al definir la clase.
Ejemplo:
Property Name As %String [SqlColumnNumber = 2];
Por favor, consultad la documentación a continuación.
Si queréis cambiar el nombre de la tabla SQL, especificad SqlTableName. Si queréis cambiar el nombre de la columna (nombre del campo), especificad SqlFieldName
Si el archivo de journal es demasiado grande para buscarlo o filtrarlo mediante el Portal de administración, podemos consultarlo mediante los dos métodos siguientes.
① Usando la utilidad ^JRNDUMP
② Usandolo en código
================================================== ==========
① Usando la utilidad ^JRNDUMP. Por ejemplo, si deseamos seleccionar todos los registros del archivo de journal que incluyen la referencia global ^ABC, hagamos lo siguiente:
*Ejecuta todos los comandos a continuación en el espacio de nombres %SYS.
He estado trabajando en este proceso con algunos compañeros de equipo y pensé que podría ser útil para otros, especialmente si trabajáis con HL7 y Ensemble/HealthConnect/HealthShare y rara vez os aventuráis más allá de la sección de Interoperabilidad.
Primero, me gustaría establecer que este tutorial es una extensión de la documentación ya existente sobre la importación y exportación de datos SQL, que se encuentra aquí: https://docs.intersystems.com/iris20241/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_impexp#GSQL_impexp_import
Escribo esto para compartir algo que me pasó anoche: ¡¡¡IRIS 2024.3 ya no viene con Python por defecto!!!
¡Eso significa que hay que instalarlo uno mismo como usuario! 😅 La ventaja es que puedo elegir mi versión de Python 😁🤭💃 Pero el problema es que, al principio... no sabía qué hacer 😥. Al revisar la comunidad (me gusta mucho más que la documentación oficial, lo siento equipo de documentación de InterSystems 😓), encontré el siguiente enlace:
https://docs.intersystems.com/iris20242/csp/docbook/DocBook.UI.Page.
Hola a todos, hoy comentamos con un ejemplo cómo solucionar problemas relacionados con el TimeOut cuando se hacen llamadas a servicios SOAP.
Tomemos como ejemplo aplicaciones que proporcionen servicios SOAP que utilizan consultas SQL basadas en "DSTIME" para devolver registros que han sido añadidos o modificados recientemente. Como estos registros no cambian con frecuencia, estas consultas suelen devolver un número reducido de registros, lo cual implica un tiempo de procesamiento corto.
Sin embargo, en ocasiones realizamos cambios en una tabla que afectan a todos los registros en ella.
Cuando utilizáis InterSystems IRIS como motor de interoperabilidad, todos sabemos y apreciamos lo fácil que es usar el Visor de Mensajes para revisar las trazas de los mensajes y ver exactamente qué está ocurriendo en vuestra producción. Sin embargo, cuando un sistema maneja millones de mensajes al día, puede que no sepáis por dónde empezar vuestra investigación.
A lo largo de mis años apoyando producciones en IRIS, a menudo me encuentro investigando cosas como...
¡Muy buenas a todos! Os paso un ejemplo de resolución de problemas a la hora de implementar transformaciones de datos que es muy interesante: estaba trabajando en un transformación de datos (DTL) de mensajes HL7 pero no paraba de obtener errores del tipo ERROR #5002... MAXSTRING. El problema era que la mayor parte de acciones en la interfaz gráfica de DTL utilizan el tipo de datos %String al trabajar con segmentos de un mensaje HL7.
Un %String tiene un límite de 3,641,144 caracteres, y mi OBX5.1
En Windows, esto no se puede cambiar, pero en plataformas tipo Unix, se puede cambiar utilizando el comando iris rename.
iris rename instname(<current instance name>) newname(<new instane name>)
Para obtener más información sobre el comando iris rename, por favor consultad el siguiente documento:
Podéis comprobar el espacio libre en disco en cualquier momento usando la clase de utilidad del sistema: SYS.Database y la consulta: FreeSpace.
Aquí tenéis cómo probarlo en el terminal de IRIS (id al espacio de nombres %SYS y luego ejecutadlo):
zn"%SYS"setEl resultado de salida es el siguiente:
Existen muchas aplicaciones para trabajar con mensajes HL7 V2, pero las herramientas para trabajar con XML en el Portal de Gestión o los IDE de IRIS son limitadas. Aunque hay muchas utilidades externas e IDEs que funcionan con mensajes XML e incluso documentos C-CDA, hay una razón convincente para poder hacer pruebas directamente en el marco de trabajo C-CDA de IRIS.
Hacer pruebas dentro del entorno de IRIS os proporciona el contexto necesario:
Los globales temporales almacenados en las bases de datos IRISTEMP/CACHETEMP se utilizan cuando un proceso no necesita almacenar datos de manera indefinida, pero requiere el potente rendimiento de los globales. Las bases de datos IRISTEMP/CACHETEMP no se registran en el diario, por lo que el uso de globales temporales no genera archivos de diario.
El sistema utiliza las bases de datos IRISTEMP/CACHETEMP para almacenamiento temporal y están disponibles para vosotros para el mismo fin.
El siguiente código descarga https://www.intersystems.com/assets/intersystems-logo.png y guarda el archivo como c:\temp\test.png.
Es necesario definir una configuración SSL llamada SSLTEST antes de ejecutar este código.
ClassMethodAs%Status
¡Hola a todos los estimados miembros de la comunidad de desarrolladores de InterSystems en español!
Aunque suelo consultar la comunidad de desarrolladores y alguna vez he dejado alguna pregunta por aquí, este será mi primer artículo y qué mejor ocasión para hacerlo que participando en el 3er concurso de artículos técnicos.
El tema que trataré en este artículo será el de las diferentes herramientas que nos proporciona InterSystems IRIS para optimizar tanto las bases de datos como las consultas que ejecutamos así como los nuevos tipos de almacenamiento y de datos.
Revisando los diferentes artículos que he ido publicando he caído en la cuenta de que me faltaba explicar una funcionalidad bastante práctica dentro de nuestro EMPI (Enterprise Master Patient Index) y no es otra que la notificación de altas y vinculaciones a sistemas externos al EMPI.
Esta funcionalidad es francamente útil en una herramienta como es el EMPI y sobretodo en entornos como el sanitario en el cual es muy habitual que un mismo paciente tenga sus datos duplicados en diferentes sistemas y que al final es necesario identificar univocamente.
Si necesita migrar su servidor por algún motivo, se puede reducir el trabajo de configuración del nuevo entorno. Bastará copiar la información de configuración del entorno previo al nuevo entorno.
Se puede migrar la siguiente información de configuración.
Este error ocurre cuando una instancia de la clase ya está abierta en el momento de la compilación.
Hay dos formas de abordar este problema:
Si desea determinar qué proceso está utilizando la clase, pruebe la rutina de ejemplo siguiente.
/// Test.mac¿Alguna vez habéis estado editando ficheros en VS Code, pero necesitábais comprobar el valor de un global o ejecutar algunos comandos de ObjectScript? Ahora podéis hacerlo, sin necesidad de configuración! Si tenéis la versión 2.10.0 o posterior de la extensión vscode-objectscript y estáis conectados a InterSystems IRIS 2023.2 o posterior, ahora podéis abrir una conexión del terminal a vuestro servidor, sin importar dónde se encuentre.
Hay tres formas de abrir este nuevo terminal:
Hola Comunidad:
En este artículo, enumero 5 funciones bastánte útiles de SQL, con sus explicaciones y algunos ejemplos de consultas👇🏻
Las 5 funciones son:
¡Empezamos!
Para resolver el error <PROTECT>, hay que eliminar el atributo de solo lectura de la base de datos de la biblioteca de todo el sistema (IRISLIB para InterSystems IRIS, CACHELIB para Caché/Ensemble/HealthShare (basado en Caché))
Una vez se haya terminado de importar la rutina, hay que acordarse de volver a cambiarla a solo lectura.
[Versión 2013.1 y superior]
[Portal de Gestión] > [Administración] > [Configuración] > [Configuración de Sistema] > [Bases de Datos Local] Desmarcad "Mount Read-Only" (Montar solo lectura) en el enlace del nombre de la base de datos.
.png)
Si el sistema no se para durante 24 horas, los archivos journal serán eliminados a las 0:30 según la "Configuración de la eliminación de archivos journal".
Una posible causa de que los archivos journal permanezcan más tiempo del establecido en la "Configuración de la eliminación de archivos journal" es que hay transacciones que permanecen abiertas.
En ese caso, se podrá eliminar el archivo journal buscando procesos que estén ejecutando transacciones y finalizando las transacciones.
Si se establece una relación y hay una gran cantidad de n en una proporción de 1:n, se puede consumir una gran cantidad de memoria debido al procesamiento secuencial de la relación.
Después de hacer referencia a un objeto de muchos lados en un programa y cambiarlo internamente, simplemente liberar la variable que contiene el OREF (eliminarla, establecer otro valor, etc.) no liberará el objeto de muchos lados ni el objeto de relación. Ésta es la causa.
Se puede obtener usando el comando Size query de la clase del sistema %SYS.GlobalQuery.
A continuación os dejo unos ejemplos de uso.
*Por favor comprueba la documentación de la clase para ver el detalle de las columnas y parámetros.
set dir="C:\intersystems\iris\mgr\user" // IRIS.DAT(or CACHE.DAT) folder
set rs = ##class(%ResultSet).%New("%SYS.GlobalQuery:Size")
do rs.Execute(dir) // You can also specify a mask with the 3d parameter
while (rs.Next()) {
set gname= rs.Get("Name") // global name
set gsize= rs.Get("Used MB") // global size (MB)
write gname," : ",gsize,!
}
La cache de las consultas SQL puede ser purgada mediante programación usando el método Purge* de la clase %SYSTEM.SQL.
*Para ver el detalle de cada uno de los métodos, por favor consulta los siguientes enlaces:
① Comando para borrar todas las consultas SQL cacheadas en el sistema
Do $SYSTEM.SQL.PurgeAllNamespaces()
② Comando para borrar las consultas SQL cacheadas en el namespace actual
// borra todas las consultas SQL cacheadas en el namespace actual
Do $SYSTEM.SQL.
Cuando ejecutéis comandos del SO, utilizad el comando $ZF(-100).
do $ZF(-100,"",program,args) // Execute the Windows command [synchronously].do $ZF(-100,"/ASYNC",program,args) // Executes a Windows command [asynchronously].Cuando ejecutéis comandos de la shell del SO, como mkdir o copy, hemos de especificar /SHELL.
do $zf(-100,"/shell /async","mkdir","c:\temp\x")