¡Hola, Comunidad!
¿Trabajáis con grandes volúmenes de datos? Descubrid cómo los streams pueden ayudar:
Almacenamiento de grandes cantidades de datos con Streams en ObjectScript
InterSystems ObjectScript es un lenguaje de programación para operar con datos mediante cualquier modelo de datos que se encuentre en InterSystems Data Platform (Objetos, relacionales, valores clave, documentos, globales) y desarrollar lógica empresarial para aplicaciones del lado del servidor en InterSystems Data Platform.
¡Hola, Comunidad!
¿Trabajáis con grandes volúmenes de datos? Descubrid cómo los streams pueden ayudar:
Almacenamiento de grandes cantidades de datos con Streams en ObjectScript
Hola:
La migración de datos a menudo suena como una simple “tarea de mover datos de A a B” hasta que te pones a ello. En realidad, es un proceso complejo que combina planificación, validación, pruebas y precisión técnica.
A lo largo de varios proyectos en los que gestioné la migración de datos a un HIS que funciona sobre IRIS (TrakCare), me di cuenta de que el éxito proviene de una mezcla de disciplina y automatización.
Aquí tenéis algunos puntos que quiero destacar.
1. Empezad con un formato de datos definido.
Antes incluso de abrir vuestro primer archivo, aseguraos de que todos, especialmente los proveedores de datos, entienden claramente el formato exacto de datos que esperáis. Definir plantillas desde el principio evita idas y venidas innecesarias y retrabajos más adelante.
Aunque los formatos Excel o CSV son comunes, personalmente considero que usar un archivo de texto delimitado por tabuladores (.txt) para la carga de datos es lo mejor. Es ligero, consistente y evita problemas con comas dentro de los campos de texto.
PatID DOB Gender AdmDate
10001 2000-01-02 M 2025-10-01
10002 1998-01-05 F 2025-10-05
10005 1980-08-23 M 2025-10-15Aseguraos de que los formatos de fecha que aparecen en el archivo son correctos y constantes en todo el documento, porque normalmente todos estos archivos se convierten desde un Excel y un usuario básico de Excel puede cometer errores al daros los formatos de fecha incorrectos. Los formatos de fecha erróneos pueden desesperaros al convertirlos a horolog.
ObjectScript permite definir métodos que aceptan un número variable de argumentos usando la sintaxis `args...`. En lugar de fijar cuántos parámetros recibe un método, dejas que el llamante decida cuántos enviar.
Se pueden invocar de dos formas:
1. Con argumentos individuales: `metodo(val1, val2, val3)`
2. Expandiendo un array: `metodo(args...)`
Puedes definir un método con un parámetro fijo y un número variable de extras:
ClassMethod MiMetodo(fijo As %String,Visión general
Embedded Python es un cambio radical para InterSystems IRIS, ya que ofrece acceso al vasto ecosistema de Python directamente dentro de la base de datos. Sin embargo, salvar la brecha entre ObjectScript y Python a veces puede parecer bastante complicado.
Para hacer que esta transición sea fluida, podéis usar embeddedpy-bridge.
¿Cuantas veces habéis tenido que recibir o generar un JSON y habéis añorado el poder trabajar sobre él haciendo uso de DTLs y sin tener que ir manejando DynamicObjects intentando recordar cual era el nombre de cada campo?
¿Deseas trocear y hacer más digerible tu gigantesco JSON?

En mi caso, nunca, pero he pensado que a alguien le podría resultar de utilidad una funcionalidad que capture tu JSON y lo descomponga en una serie de clases de ObjectScript con las que puedas trabajar de forma más cómoda y sencilla.
Pues bien...¡contemplad el JSON2Class en toda su gloria!
Hola Comunidad,
Estamos emocionados de invitaros a participar en la creación de la próxima generación de herramientas de desarrollo para ObjectScript. Estamos trabajando en un asistente de codificación en ObjectScript potenciado por IA, diseñado específicamente para desarrolladores de IRIS. No es una IA genérica adaptada a ObjectScript, sino una solución construida desde cero para entender los modismos de ObjectScript, las APIs de IRIS, producciones de interoperabilidad y los flujos de trabajo reales de los desarrolladores.
Para asegurarnos de construir algo realmente útil, necesitamos vuestra opinión.
👉 Encuesta para desarrolladores del Agente de Codificación en ObjectScript 👈

SETasigna un valor a la variable en TIEMPO DE EJECUCIÓN.
#DIM declara la variable y su tipo de datos en TIEMPO DE COMPILACIÓN.
SET |
#DIM |
|
Hace que las variables sean dinámicas. |
Mejora la legibilidad. |
|
Sin declaración de tipo de datos. |
Permite la autocompletación en el IDE. |
|
Tiempo de ejecución |
Útil para referencias a objetos. |
#DIM name As %String
Set name = "Micheal Scott"
#DIM age As %Numeric
Set age = 36
#DIM employer As App.Employer ; compile time
Set employer = ##class(App.Employer).%New() ; runtime
SET o #DIM?Existen numerosas herramientas excelentes para probar vuestras APIs REST, especialmente cuando están en funcionamiento. Postman, distintas extensiones de navegador e incluso código personalizado en ObjectScript usando objetos %Net.HttpRequest pueden hacer el trabajo. Sin embargo, a menudo resulta complicado probar únicamente la API REST sin involucrar, sin querer, el esquema de autenticación, la configuración de la aplicación web o incluso la conectividad de red. Son muchos obstáculos solo para probar el código dentro de vuestra clase dispatch.
La buena noticia es que, si nos tomamos el tiempo para comprender cómo funciona internamente la clase %CSP.REST, encontraremos una alternativa que permite probar únicamente el contenido de la clase dispatch. Podemos configurar los objetos de request y response para invocar los métodos directamente.
Al trabajar con InterSystems Interoperability (IRIS / Health Connect / Ensemble), los datos de configuración a menudo están distribuidos en muchos elementos de producción: servicios, procesos, operaciones, adaptadores y sus configuraciones.
Una necesidad operativa o de seguridad común es responder preguntas como:
Probablemente os suene esta situación:
Hace tiempo encontraste una función muy especial, $ZU, para un tipo de problema muy concreto. Como una especie de fórmula mística. Esta se popularizó y muchos desarrolladores la utilizaron en su código.
Tras varias versiones y actualizaciones, ISC informa de que vuestro mágico $ZU está obsoleto y ya no es soportado. Se os recomienda reemplazarlo por un nuevo $loquesea().
Entonces, ¿cómo podrías localizar y documentar el uso de este mágico $ZU? Puede estar en clases, en código MAC, INT o INC o incluso distribuido en múltiples namespaces.
Este código muestra los elementos de producción configurados e indica si están habilitados o deshabilitados.
Class Test.ProductionConfig
{
ClassMethod GetConfigItems() As %Status
{
Set tStatement = ##class(%SQL.Statement).%New()
Set tSC = tStatement.%PrepareClassQuery("Ens.Config.Production","EnumerateConfigItems")
Write tSC,!
Write "ConfigItemName"," ","Enabled",!
#Dim exp As %Exception.SystemException
#Dim rset As %SQL.StatementResult
Set rset = tStatement.%Execute()
Write rset,!
Write rset.%SQLCODE,!
While rset.%Next() {
Try {
Set tConfigName = rset.
Hay un patrón con el que me he encontrado varias veces en el que necesito usar un archivo o carpeta temporal y que se limpie en algún momento más adelante.
Lo natural aquí es seguir los patrones de "Robust Error Handling and Cleanup in ObjectScript" usando un try/catch/pseudo-finally o un objeto registrado para gestionar la limpieza en el destructor. %Stream.File* también tiene una propiedad “RemoveOnClose” que podéis activar… pero usadla con cuidado, porque podríais eliminar accidentalmente un archivo importante, y este indicador se reinicia al llamar a %Save(), así que tendréis que volver a ponerlo a 1 después de hacerlo.
Pero hay un caso complicado: imaginad que necesitáis que el archivo temporal sobreviva en un nivel de pila superior. Por ejemplo:
Hola,
Cuando abrimos un terminal en IRIS, entramos en el shell de ObjectScript. Dentro de este shell, podemos ejecutar comandos de IRIS, como:

En otras palabras, el comando ObjectScript se ejecuta en el shell actual. Pero siempre es bueno recordar que IRIS tiene otros shells.
Un aspecto muy interesante son los atajos. Podemos acceder a estos shells mediante sus llamadas o a través de atajos, como se muestra en la tabla siguiente:
|
Shell |
Llamada |
Atajo |
|
SQL |
Do $SYSTEM.SQL.Shell() |
:sql |
|
Python |
Do $SYSTEM.Python. |
Como desarrollador que usa IRIS como base de datos en un par de proyectos, uso APIs REST todo el tiempo. En mi opinión, saber cómo consumir un recurso de una API REST es crucial para poder utilizar APIs REST externas con %Net.HttpRequest, porque permite la integración con aplicaciones y servicios web modernos, y es una habilidad esencial para un desarrollador backend que ama y utiliza IRIS como base de datos.
¿Qué es y para quién sirve %Net.HttpRequest?
Es solo una clase, pero es la forma adecuada de hacer solicitudes fuera del framework.
El lenguaje ObjectScript cuenta con un soporte increíble para JSON gracias a clases como %DynamicObject y %JSON.Adaptor. Este soporte se debe a la enorme popularidad del formato JSON, que sustituyó el dominio previo de XML. JSON trajo consigo una representación de datos menos verbosa y una mayor legibilidad para las personas que necesitaban interpretar su contenido. Para reducir aún más la verbosidad y aumentar la legibilidad, se creó el formato YAML.
Empezar con ObjectScript es realmente emocionante, pero también puede resultar un poco extraño si estáis acostumbrados a otros lenguajes. Muchos principiantes tropiezan con los mismos obstáculos, así que aquí tenéis algunas "trampas” a las que debéis prestar atención. (Y también algunos consejos para evitarlas)
PONER NOMBRES AL AZAR
Todos hemos caído en la tentación de llamar a algo Test1 o MyClass solo para avanzar rápido. Pero una vez que vuestro proyecto crece, esos nombres se convierten en una pesadilla.
➡ Elegid nombres claros y coherentes desde el principio.
Me uní a InterSystems hace menos de un año. Sumergirme en ObjectScript e IRIS fue emocionante, pero también estuvo lleno de pequeñas sorpresas que me hicieron tropezar al principio. En este artículo recojo los errores más comunes que yo, y muchos compañeros nuevos, cometemos, explico por qué ocurren y muestro ejemplos concretos junto con soluciones prácticas. Mi objetivo es ayudar a otros desarrolladores que empiezan a ahorrar tiempo y evitar los mismos obstáculos en el camino.
Una ventaja de usar Doxygenerate es que Doxygen hace más que generar salida en HTML. Ajustad el Doxyfile que le indica a Doxygen qué hacer y podréis crear fácilmente un PDF. Nuestro ejemplo de la aplicación MARINA produjo un PDF de 524 páginas. Así se ve la página 94:

Podéis explorar el archivo completo aquí.
En la captura de pantalla de arriba, fijaos en que solo obtenemos detalles de la superclase que forma parte de la aplicación (AuditHistory). La superclase principal, %Library.SerialObject, aparece atenuada y sin detalles de lo que BankDetails hereda de ella.
Al comenzar con InterSystems IRIS o Caché, los desarrolladores a menudo se encuentran con tres conceptos fundamentales: Dynamic Objects, Globals y Relational Table. Cada uno tiene su papel en la construcción de soluciones escalables y mantenibles. En este artículo recorreremos ejemplos prácticos de código, destacaremos buenas prácticas y mostraremos cómo estos conceptos se relacionan entre sí.
1. Trabajando con Dynamic Objects:
Los objetos dinámicos (%DynamicObject y %DynamicArray) permiten a los desarrolladores manipular estructuras similares a JSON directamente en ObjectScript.
ObjectScript puede parecer solo otro lenguaje de programación, pero aquí está el giro:
Vuestro código aquí puede vivir para siempre (sí, incluso después de que os hayáis pasado a otro proyecto). Por eso es importante mantenerlo ordenado, fácil de leer y a salvo de errores misteriosos.
(Una guía para principiantes para mantener vuestro código ordenado, amigable y preparado para el futuro)
Bienvenidos a la jungla de ObjectScript, donde vuestro código puede tener un alcance global y ser persistente por naturaleza.
Mantengamos las cosas limpias, legibles y resistentes a errores.
Revisando mis paquetes publicados, identifiqué un error grave en la API Nativa de IRIS.
%Net.DB.Iris llamado function().
$$etiqueta^rutina(param) en ObjectScript.
<PROTECT>.
Trabajar en TI para el sector salud como un desarrollador joven, especialmente en InterSystems TrakCare, te hace darte cuenta rápidamente de una cosa: no se trata solo de mensajes HL7 o integraciones backend. Una gran parte de lograr que TrakCare funcione sin problemas en los hospitales depende de cómo se configura, personaliza y da soporte desde el lado de la aplicación.
Ahí es donde entramos personas como yo: desarrolladores tecno-funcionales que entendemos tanto la tecnología como su impacto en los flujos de trabajo reales del hospital.
Los documentos de Word se utilizan ampliamente en el mercado. Los usuarios crean con frecuencia contratos, memorandos, currículums, informes, análisis y otros documentos que pueden requerir datos de InterSystems IRIS o que este los capture. Sin embargo, IRIS no dispone de una API, SDK, biblioteca ni adaptador para ello. Esta limitación ya no existe.
La nueva biblioteca de Open Exchange, iris4word (https://openexchange.intersystems.com/package/iris4word), ofrece un SDK de ObjectScript donde el desarrollador pasa cualquier %DynamicObject como parámetro, una plantilla de archivo de Word y recibe un documento listo para usar, con la estructura y el formato definidos en su plantilla.


Este será un artículo breve sobre PEP 8, la guía de estilo de Python.
En pocas palabras, PEP 8 proporciona directrices y buenas prácticas sobre cómo escribir código Python.
Estoy escribiendo esta publicación principalmente para recopilar un consenso informal sobre cómo los desarrolladores están utilizando Python junto con IRIS, ¡así que por favor responded a la encuesta al final del artículo! En el cuerpo del artículo, daré un poco de contexto sobre cada una de las opciones proporcionadas, así como sus ventajas, pero si lo preferís, podéis hacer una lectura rápida y simplemente responder la encuesta.
InterSystems IRIS permite crear APIs REST utilizando clases ObjectScript y el framework %CSP.REST. Esta funcionalidad permite desarrollar servicios modernos para exponer datos a aplicaciones web, móviles o integraciones externas.
En este artículo aprenderás cómo crear una API REST básica en InterSystems IRIS, incluyendo:
GET y POST
Demo.ProductoClass Demo.Producto Extends (%Persistent, %JSON.Hola a todos,
Estamos desarrollando una aplicación de citas médicas que conecta las agendas de los médicos con un proveedor de citas.
El proveedor nos está devolviendo la cita en el siguiente formato:
Thu Jul 03 08:20:00 CEST 2025
Significa, 03 de julio de 2025 a las 08:20:00 Hora de verano de Europa central (UTC+2)
Pero necesitamos el siguiente formato:
2025-07-03 08:20:00+02:00
¿Existe alguna opción para convertir el código horario de zona (CEST) a UTC+x?
¿Cómo convertir el código horario de zona (CEST, CET, ET, EDT, etc..) en su zona horaria UTC (UTC+2, UTC+1, UTC-5, etc..)?
Saludos cordiales
InterSystems IRIS permite ejecutar consultas SQL directamente desde ObjectScript mediante:
Que es SQL (Structured Query Language) es un lenguaje estándar utilizado para interactuar con bases de datos relacionales.
Uso de Python en InterSystems Iris
Hola
En este artículo veremos el uso de python como lenguaje de programación en InterSystems Iris. Para ello, utilizaremos como referencia la versión de Community 2025.1 que está disponible para ser descargada en https:// download.intersystems.com iniciando sesión en el entorno. Para obtener más información sobre cómo descargar e instalar Iris, consulte el enlace de la comunidad https://community.intersystems.com/post/how-download-and-install-intersystems-iris
Una vez instalado el iris, ahora necesitamos tener python disponible en nuestro entorno.
Explorar un enfoque de validación estructural adaptativa para mantener estables las pruebas automatizadas frente a cambios en la estructura del JSON generado a partir de datos expuestos desde una base de datos InterSystems IRIS.
Se busca minimizar falsos positivos ante cambios no críticos, siempre que la respuesta siga siendo coherente con la estructura real de la base. En estos casos, la ejecución continúa y se deja registro del evento en un archivo estructurado, que permite trazabilidad y análisis evolutivo.