¡Hola amigos!
No es una innovación, pero a menudo veo páginas de error de aplicaciones CSP que no son demasiado informativas. Algo de este estilo:

InterSystems IRIS es una Plataforma completa de datos.
InterSystems IRIS le proporciona todo lo que necesita para capturar, compartir, comprender y actuar sobre el activo más valioso de su organización, sus datos.
Dado que es una plataforma completa, InterSystems IRIS elimina la necesidad de integrar varias tecnologías de desarrollo. Las aplicaciones necesitan una menor cantidad de código, menos recursos del sistema y poco mantenimiento.
¡Hola amigos!
No es una innovación, pero a menudo veo páginas de error de aplicaciones CSP que no son demasiado informativas. Algo de este estilo:

Recientemente empecé a estudiar interoperabilidad y la documentación oficial fue muy útil para comprender la operación de los business hosts, pero aún me costó lograr hacerlo con mis manos. Mis compañeros de trabajo me ayudaron hasta que logré crear una Demo de un sistema y aprender practicando. Por eso, quise escribir acá para pasar adelante la ayuda que tuve.
¿Cómo convertir de formato de fecha interno a formato de fecha JSON/Web: YYYY-MM-DDTHH:mm:ss (example: 2012-04-23T18:25:43)?
Gracias.
Este es el quinto de una serie de lanzamientos que forman parte del programa de versiones de prueba 2022.2 para desarrolladores. Las próximas versiones de prueba se espera que sean actualizadas cada dos semanas, aproximadamente, y añadiremos funcionalidades según estén listas. Se han añadido muchas actualizaciones y mejoras en 2022.2, en la gestión de SQL, integración cloud, adaptadores Kafka y JMS, SQL Loader y otras áreas. Compartid, por favor, vuestro feedback a través de la Comunidad de Desarrolladores, para que entre todos podamos desarrollar un mejor producto.
Si tu código de Python Embebido llama a la librería tkinter (que es usada por muchas librerías especializadas en la creación de gráficos, como matplotlib), puede que obtengas este error:
<THROW> *%Exception.PythonException <CLASS DOES NOT EXIST> 230 ^^0^DO ##CLASS(User.Test).Test()
<class '_tkinter.TclError'>: Can't find a usable init.tcl in the following directories:
c:/intersystems/irispy/lib/python/lib/tcl8.6
c:/intersystems/irispy/lib/tcl8.6
c:/intersystems/lib/tcl8.6
c:/intersystems/irispy/library
c:/intersystems/library
c:/intersystems/tcl8.6.9/library
c:/tcl8.6.9/library
This probably means that Tcl wasn't installed properly.¡Hola desarrolladores!
Cuando desarrollas con ObjectScript Package Manager, un aspecto crucial es la versión del paquete, que situamos en el fichero module.xml. Cuando añadimos cambios al paquete y estamos listos para publicar una nueva versión del paquete en el registro, también necesitamos aumentar el número de versión. Esto está claro, pero es un poco molesto, y a menudo podemos olvidarnos de hacerlo.
Este breve artículo os ayudará a automatizar ese proceso.

Hace varios años, estaba enseñando los conocimientos básicos de nuestro framework %UnitTest durante la clase de Fundamentos de Caché (ahora llamada Developing Using InterSystems Objects and SQL). Un alumno preguntó si era posible recoger estadísticas de rendimiento mientras se ejecutan pruebas unitarias. Unas semanas más tarde, añadí un código adicional a los ejemplos de %UnitTest para responder a esa pregunta. Ahora lo comparto con la Comunidad.
Tengo una clase %Persistent con propiedades que son de %SerialObject. Quiero añadir un índice a una propiedad de la clase %SerialObject.
¿Es posible?
¡Hola a todos los miembros de la Comunidad!
En este vídeo que os mostramos, aprenderéis a usar el "Data Transformation Wizard" del portal InterSystems IRIS® data platform para convertir mensajes a otros formatos:
⏯ Transforming Healthcare Messages in InterSystems Integrations
¡Hola desarrolladores!
Me gustaría compartir con vosotros un truco útil para presentar código de ObjectScript en ficheros Script en VSCode.
Los ficheros Script son simplemente ficheros con líneas de ObjectScript que introducimos en cualquier sitio, por ejemplo en IRIS durante el procedimiento Docker baking.
Caso de uso típico - este es el Scriptfile
este es el Dockerfile donde lo introducimos.
Y así es como se ve normalmente en VSCode:

Podría ser más elegante, ¿verdad?
¡Hola a todos!
El módulo de exportación es esencial en muchos de mis proyectos y se usa a menudo en todos mis servidores de productos.
He implementado varios escenarios en el módulo de iniciación del atributo invoke, ambos mayormente con muchos proyectos adicionales para demostrar en GCR , y mínimamente para instalar nativamente en instancia de producción.
zpm "install appmsw-sql2xlsx -Dzpm.demo=none"
Para mostrar las posibilidades, usé los proyectos fileserver y csvgen.
Gracias a las últimas mejoras al soporte de Python en IRIS y al continuo trabajo en el soporte a la DB-API de Python por parte de InterSystems, he implementado el soporte de IRIS en el proyecto Django, en el que la DB-API de Python se usa para trabajar con otras bases de datos.
Vamos a probar una sencilla aplicación en Django, que almacena sus datos en IRIS.

Esta es el cuarta de una serie de lanzamientos que forman parte del programa de versiones de prueba 2022.2 para desarrolladores. Las próximas versiones de prueba se espera que sean actualizadas cada dos semanas, aproximadamente, y añadiremos funcionalidades según estén listas. Se han añadido muchas actualizaciones y mejoras en 2022.2, en la gestión de SQL, integración cloud, adaptadores Kafka y JMS, SQL Loader y otras áreas.
La aplicación Carbon Footprint Counter utiliza el GHG Protocol para medir las emisiones de carbono en las empresas. El Protocolo de Gases de Efecto Invernadero (GHG Protocol) establece marcos estandarizados globales integrales para medir y gestionar las emisiones de gases de efecto invernadero (GHG) de las operaciones del sector público y privado, las cadenas de valor y las acciones de mitigación.
Sobre la base de una asociación de 20 años entre el Instituto de Recursos Mundiales (WRI) y el Consejo Empresarial Mundial para el Desarrollo Sostenible (WBCSD), el GHG Protocol trabaja con gobiernos, asociaciones industriales, ONGs, empresas y otras organizaciones. (fuente: https://ghgprotocol.org/about-us).
La aplicación Carbon Footprint Counter utiliza InterSystems IRIS para implementar APIs REST y la base de datos SQL para administrar el inventario de emisiones de carbono en las empresas. La interfaz es Angular 12 con el framework PrimeNG (líder de código abierto para Angular).
Al igual que los servidores hardware, los servidores virtuales en nubes públicas y privadas pueden generar cuellos de botella en los recursos, según aumentan las cargas de trabajo. Si utilizas y administras instancias de InterSystems IRIS implementadas en nubes públicas o privadas, es posible que te hayas encontrado la situación en la que para solucionar problemas de rendimiento o de otro tipo se requiere aumentar la capacidad del servidor de una instancia (es decir, escalar verticalmente).
Un motivo frecuente es la memoria insuficiente.
¡Hola Comunidad!
Estamos encantados de anunciar que vuelven los webinars de la Comunidad!
Os invitamos al webinar Cómo escalar el servidor FHIR de InterSystems en Amazon Web Services con ECP.
⏱ Fecha: Jueves 18 de agosto, 14:00 (CEST)
👨🏫 Ponente: @sween, Full Stack Architect en Integration Required
➡️ El webinar será en inglés
Si quieres ejecutar el comando sql LOAD DATA, tienes que elegir el driver desde 2021.2! Si seleccionaste el driver incorrecto y utilizas el comando sql LOAD DATA, obtienes algo así:
Error: [SQLCODE: <-1>:<Invalid SQL statement>]
[Location: <Prepare>]
[%msg: < LITERAL ('%qpar') expected, : found^LOAD DATA FROM FILE :%qpar>]He bifurcado el repositorio con los drivers https://github.com/intersystems-community/iris-driver-distribution y añadido el driver desde InterSystems IRIS Versión 2021.2.0.617
Puedes descargar el intersystems-jdbc-3.3.0.
¡Hola desarrolladores!
Solo quiero compartir una antigua pero muy relevante buena práctica en el cambio de namespaces que @Dmitry Maslennikov compartió conmigo.
Consideremos el método:
classmethod DoSomethingInSYS() as %Status
{
set sc=$$$OK
set ns=$namespace
zn "%SYS"
// try-catch in case there will be an error
try {
// do something, e.g. config change
}
catch {}
zn ns ; returning back to the namespace we came in the routine
return sc
}Mientras pensaba en lo que podría desarrollar para el Concurso Full Stack de InterSystems, vi esta pregunta:
https://community.intersystems.com/post/how-access-production-items-through-objectscript
Desarrollé ProductionManager.csp. Muestra elementos en la producción activa. También muestra la Clase en uso y la fecha y hora del último mensaje. Creo que estos puntos de datos pueden ayudar a tomar decisiones sobre qué elementos eliminar de la producción.
Durante una actualización a una versión principal (major) es aconsejable recompilar las clases y rutinas de todos tus namespaces (ver Tareas tras la instalación de una versión major).
do $system.OBJ.CompileAllNamespaces("u")do ##Class(%Routine).CompileAllNamespaces()
Para automatizar esta tarea de administración y mantener un registro de cualquier error, os muestro un ejemplo de una clase para importar y compilar en el namespace USER, que puedes usar después de cada actualización: admin.utils.cls
Docker 20.10.14 (lanzado el 23 de marzo de 2022) cambia las funcionalidades que Linux da a los contenedores de una manera que es incompatible con el Linux capability checkeren los contenedores de InterSystems IRIS 2021.1 (y posteriores).
Los usuarios ejecutando Docker 20.10.14 en Linux encontrarán que los contenedores de IRIS 2021.1+ fallarán al iniciarse y los logs reportarán de forma incorrecta que las funcionalidades requeridas de Linux no se encuentran. Por ejemplo:
[ERROR] Required Linux capability cap_setuid is missing. [ERROR] Required Linux capability cap_dac_override is missing.
![ObjectScript Kernel Logo][ObjectScript Kernel Logo]
Jupyter Notebook es un entorno interactivo formado por celdas que permiten ejecutar código en un gran número de lenguajes de marcado y programación diferentes.
Para hacer esto, Jupyter debe conectarse a un kernel apropiado. No había un Kernel ObjectScript, por lo que decidí crear uno.
Puedes probarlo aquí.
Este es un adelanto de los resultados:

Hay varias formas de crear un Jupyter Kernel. Decidí hacer un kernel contenedor de Python.
Tenemos que crear una subclase de ipykernel.
En este artículo, me gustaría hablar sobre el enfoque spec-first para el desarrollo de una API REST.
Mientras que el desarrollo tradicional code-first de una API REST es así:
Spec-first sigue los mismos pasos, pero a la inversa. Comenzamos con una especificación, — que también actúa como documentación — , generamos el código base de la aplicación REST a partir de ella, y finalmente escribimos la lógica de negocio concreta que nos haga falta.
Esto ofrece varias ventajas:
Esta es el tercera de una serie de lanzamientos que forman parte del programa de versiones de prueba para desarrolladores. Las próximas versiones de prueba se espera que sean actualizadas cada dos semanas, aproximadamente, y añadiremos funcionalidades según estén listas. Se han añadido muchas actualizaciones y mejoras en 2022.2, en la gestión de SQL, integración cloud, adaptadores Kafka y JMS, SQL Loader y otras áreas.
La fecha y la hora son factores importantes en nuestra vida. Porque todas las aplicaciones son interesantes según la fecha y la hora. Pero el mundo está dividido en múltiples zonas horarias. Si nuestro producto se lanza al mundo, para mantener el historial de eventos, debemos convertir todas las horas a nuestra hora local o UTC (Tiempo Universal Coordinado). Por lo que sé, muchos lenguajes de programación conocidos de C#, JavaScript, Java, etc., ofrecían la librería para convertir la fecha y la hora, es decir, con un nombre de zona horaria podemos convertir sin conocer la diferencia horaria.
La base de datos TZ no existe en los productos de InterSystems. En el pasado, escribí la función en C# (C# tiene una librería para esto) y la usé dentro de InterSystems como una clase contenedora.
Pero ahora, IRIS comenzó a ser compatible con Python Embebido. Por eso, podemos usar la conversión de zona horaria de Python en InterSystems fácilmente.
¿No te gustaría que una taza de café caliente te esperara justo al llegar a la oficina? ¡Vamos a automatizar eso!
Cache e IRIS incorporan un Administrador de tareas, que debería resultar familiar a quienes estén acostumbrados a utilizar el programador de tareas de Windows o a usar cron en Linux. Tu cuenta de usuario requerirá tener acceso al recurso %Admin_Task para utilizarlo, y puedes acceder a él desde el portal de administración en System Operation -> Task Manager. Cuando se instala por primera vez, hay aproximadamente 20 tipos de tareas que puedes programar.
Si quieres añadir tus propias tareas, empieza creando una clase que extienda %SYS.Task.Definition. Como mínimo, debes sobreescribir el método OnTask, que tiene una firma de Method OnTask() As %Status. El código de ese método se ejecutará cada vez que se lance la tarea. De hecho, si tu tarea arroja "Error #5003: No implementado (Error #5003: Not Implemented)" cada vez que se ejecuta, es porque este método no se sobreescribió correctamente. De manera muy básica, podría ser:
Hola a todos,
Acabo de actualizar la versión de WebTerminal usando el link, pero ahora no funciona.
Cuando llamas a /terminal está mostrando el siguiente error:
{
"errors":[ {
"code":5002,
"domain":"%ObjectErrors",
"error":"ERROR #5002: Error de cache: <INVALID OREF>zWrite+5^WebTerminal.StaticContent.1",
"id":"ObjectScriptError",
"params":["<INVALID OREF>zWrite+5^WebTerminal.StaticContent.1"
]
}
],
"summary":"ERROR #5002: Error de cache: <INVALID OREF>zWrite+5^WebTerminal.StaticContent.¡Hola desarrolladores!
Solo quiero compartir con vosotros mi conocimiento, es decir, experiencia en algo que os puede hacer ahorrar unas cuantas horas algún día.
Si estás creando una REST API con IRIS que contiene más de un nivel de "/", por ejemplo: '/patients/all', no te olvides de añadir el parámetro 'recurse=1' en tu script de despliegue en %Installer. Si no, todas las entradas de nivel secundario y de mayor profundidad no funcionarán. Y todas las entradas de nivel primario funcionarán.
/patients
- funcionará, pero
/patients/all
- no funcionará.
Este es un ejemplo de sección CSPApplication que arregla el problema y que puede que quieras usar en tu clase %Installer:
Recientemente surgió un patrón interesante en torno a los índices únicos (en una discusión interna re: isc.rest) y me gustaría destacarlo para la Comunidad.
Como caso de uso motivador: supón que tienes una clase que representa un árbol, donde cada nodo también tiene un nombre, y queremos que los nodos sean únicos por nombre y nodo principal. Queremos que cada nodo raíz también tenga un nombre único. Una implementación natural sería:
Class DC.Demo.Node Extends %Persistent
{
Property Parent As DC.Demo.
Publicación Original por: Anton Umnikov
Arquitecto Senior de soluciones en la nube en InterSystems
AWS CSAA, GCP CACE
AWS Glue es un proceso ETL (extraer, transformar y cargar) completamente gestionado, que hace sencillo y rentable clasificar los datos, limpiarlos, enriquecerlos y moverlos de forma fiable entre diferentes almacenes de datos.
En el caso de InterSystems IRIS, AWS Glue permite mover grandes cantidades de datos a IRIS desde fuentes de datos tanto en la nube como en las propias instalaciones (on-premise). Las fuentes de datos potenciales incluyen, pero no se limitan a, bases de datos on-prem, archivos CSV, JSON, Parquet y Avro que residen en buckets S3, bases de datos nativas en la nube como AWS Redshift y Aurora, y muchas otras.