Limpiar filtro
Anuncio
David Reche · 9 abr, 2021
La versión 2020.4 de InterSystems IRIS, IRIS for Health e IRIS Studio ya ha sido liberada.
InterSystems IRIS Data Platform 2020.4 hace aún más fácil desarrollar, desplegar y gestionar aplicaciones aumentadas y procesos de negocio que canalizan silos de datos y aplicaciones aisladas. Ofrece muchas nuevas funcionalidades, como:
Mejoras para desarrolladores de aplicaciones y de interfaces, incluyendo:
Soporte de Java SE 11 LTS, tanto cuando se usa Oracle OpenJDK como AdoptOpenJDK
Soporte de Connection Pooling para JDBC
Una nueva acción "foreach" en reglas de enrutamiento para segmentos de documentos virtuales
Mejoras para administradores de sistemas y de bases de datos, incluyendo:
Soporte en ICM del despliegue de System Alerting and Monitoring (SAM) y de InterSystems API Manager (IAM)
Extensiones de nuestra sintaxis SQL para tareas administrativas comunes
Despliegue simplificado de InterSystems Reports
InterSystems IRIS for Health 2020.4 incluye todas las mejoras de InterSystems IRIS 2020.4. Además, esta versión incluye:
Soporte mejorado de FHIR, incluyendo soporte a perfiles FHIR
Soporte del perfil IHE RMD
Soporte a DataGate en HL7 Migration Tooling
Todas estas mejoras se detallan en la:
Documentación y notas de la versión de InterSystems IRIS 2020.4
Documentación y notas de la versión de InterSystems IRIS for Health 2020.4
Al ser una versión CD (Continuous delivery, entrega continua), solo está disponible en OCI (Open Container Initiative), es decir, en formato contenedor Docker. Las imágenes para contenedor están disponibles para motores del run-time compatibles con Linux x86-64 y Linux ARM64, como se detalla en el documento de plataformas soportadas.
Las imágenes del contenedor para la Enterprise Edition y todos sus componentes correspondientes están disponibles desde el Registro de Contenedores de InterSystems, usando los siguientes comandos:
docker pull containers.intersystems.com/intersystems/iris:2020.4.0.547.0
docker pull containers.intersystems.com/intersystems/irishealth:2020.4.0.547.0
Para una lista completa de las imágenes disponibles, pueden consultar esta documentación.
Las imágenes del contenedor para la Community Edition también pueden obtenerse desde el Docker store usando los siguientes comandos:
docker pull store/intersystems/iris-community:2020.4.0.547.0
docker pull store/intersystems/iris-community-arm64:2020.4.0.547.0
docker pull store/intersystems/irishealth-community:2020.4.0.547.0
docker pull store/intersystems/irishealth-community-arm64:2020.4.0.547.0
Además, las versiones en formato tarball de todos los contenedores están disponibles en la página de descargas del Centro de Soporte Internacional (WRC).
Nuestros listados correspondientes en los principales marketplaces en la nube serán actualizados durante los próximos días.
InterSystems IRIS Studio 2020.4 es un IDE independiente para usar con Microsoft Windows y puede descargarse a través de la página de descargas de componentes del Centro de Soporte Internacional (WRC). Es compatible con la versión 2020.4 y anteriores de InterSystems IRIS e IRIS for Health. InterSystems también soporta el plugin VSCode-ObjectScript para desarrollar aplicaciones para InterSystems IRIS con Visual Studio Code, disponible para Microsoft Windows, Linux y MacOS.
Otros componentes independientes de InterSystems IRIS 2020.4, como el driver ODBC y el web gateway, también están disponibles en la página de descargas de componentes del Centro de Soporte Internacional (WRC).
Anuncio
Esther Sanchez · 30 mar, 2021
¡Hola Comunidad!
Hace unos meses os mostramos en vídeo cómo crear una API REST con InterSystems IRIS, usando contenedores Docker. Ahora, os traemos el mismo vídeo, pero con subtítulos en español, para una mejor comprensión para toda la Comunidad hispanohablante:
⏯ Cómo crear una API REST con InterSystems IRIS
Aquí podéis ver otro vídeo con subtítulos en español:
⏯ Demo de PEX (Production Extension Framework)
Esperamos que os resulten útiles
¡Recordad que podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en español, para manteneros formados e informados!
Artículo
Jose-Tomas Salvador · 22 sep, 2021
¡Hola desarrolladores!
Muchos de vosotros publicáis vuestras bibliotecas de InterSystems ObjectScript en [Open Exchange](https://openexchange.intersystems.com/) y Github.
Pero, ¿qué puedes hacer para facilitar a los desarrolladores el uso y la colaboración en tu proyecto?
En este artículo, quiero presentar una forma sencilla de poner en marcha y contribuir en cualquier proyecto ObjectScript con solo copiar un conjunto estándar de archivos en tu repositorio.
¡Vamos!
**TLDR**: copia estos archivos desde [el repositorio](https://github.com/intersystems-community/objectscript-docker-template) a tu repositorio:
[Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile)
[docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml)
[Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls)
[iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script)
[settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json "settings.json"){#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73}
[.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore ".dockerignore"){#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637}
[.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes ".gitattributes"){#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1}
[.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore ".gitignore"){#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb}
Y obtienes la forma estándar de poner en marcha y colaborar en tu proyecto. A continuación, se explica detalladamente cómo y por qué funciona esto así.
**Nota:** En este artículo, consideraremos los proyectos que se pueden ejecutar en InterSystems IRIS 2019.1 y versiones posteriores.
**Cómo elegir el entorno de lanzamiento de los proyectos con InterSystems IRIS**
Normalmente, queremos que un desarrollador pruebe el proyecto/biblioteca y esté seguro de que será un ejercicio rápido y seguro.
En mi modesta opinión, el enfoque ideal para poner en marcha cualquier cosa nueva de forma rápida y segura es el contenedor Docker, que ofrece al desarrollador la garantía de que todo lo que inicie, importe, compile y calcule es seguro para el servidor y ningún sistema o código será destruido o estropeado. Si algo sale mal, solo hay que parar y retirar el contenedor. Si la aplicación ocupa una enorme cantidad de espacio en el disco, la retiras junto con el contenedor y vuelves a tener espacio. Si una aplicación estropea la configuración de la base de datos, solo tienes que borrar el contenedor con la configuración estropeada. Así de simple y seguro.
El contenedor Docker ofrece seguridad y estandarización.
La forma más sencilla de ejecutar un contenedor Docker común de InterSystems IRIS es ejecutar una [imagen de la Edición *Community* de IRIS](https://hub.docker.com/_/intersystems-iris-data-platform/plans/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions):
1. Instala [Docker desktop](https://www.docker.com/products/docker-desktop)
2. Ejecuta lo siguiente en el terminal del sistema operativo:
docker run --rm -p 52773:52773 --init --name my-iris store/intersystems/iris-community:2020.1.0.199.0
3. A continuación, abre el Portal de Administración en tu navegador del servidor en:
4. O abre un terminal en IRIS:
docker exec -it my-iris iris session IRIS
5. Deja de usar el contenedor IRIS cuando no lo necesites:
docker stop my-iris
¡Muy bien! Ejecutamos IRIS en un contenedor Docker. Pero quieres que un desarrollador instale tu código en IRIS y tal vez haga algunos ajustes. Esto es lo que discutiremos a continuación.
**Importación de archivos ObjectScript**
El proyecto más sencillo de InterSystems ObjectScript puede contener un conjunto de archivos ObjectScript como clases, rutinas, macros y globales. Consulta el artículo sobre [la convención de nombres](https://community.intersystems.com/post/objectscript-package-manager-naming-convention) y [la estructura de carpetas propuesta](https://community.intersystems.com/post/simplified-objectscript-source-folder-structure-package-manager).
La pregunta es: ¿cómo importar todo este código a un contenedor de IRIS?
Este es el momento en el que nos ayuda Dockerfile y podemos utilizarlo para coger el contenedor común de IRIS e importar todo el código de un repositorio a IRIS, y hacer algunos ajustes con IRIS si es necesario. Necesitamos añadir un Dockerfile en el repositorio.
Vamos a examinar el [Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile) del repositorio [ObjectScript template](https://github.com/intersystems-community/objectscript-docker-template):
ARG IMAGE=store/intersystems/irishealth:2019.3.0.308.0-community
ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0
ARG IMAGE=store/intersystems/iris-community:2019.4.0.379.0
ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0
FROM $IMAGE
USER root
WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp
USER irisowner
COPY Installer.cls .
COPY src src
COPY iris.script /tmp/iris.script # run iris and initial
RUN iris start IRIS \
&& iris session IRIS < /tmp/iris.script
Las primeras líneas ARG establecen la variable $IMAGE, que después utilizaremos en FROM. Esto es adecuado para probar/ejecutar el código en diferentes versiones de IRIS cambiándolas solo por la última línea antes de FROM, para cambiar la variable $IMAGE.
Aquí tenemos:
ARG IMAGE=store/intersystems/iris-community:2020.1.0.199.0
FROM $IMAGE
Esto significa que estamos tomando la versión 199 de la Edición *Community* de IRIS 2020.
Queremos importar el código desde el repositorio. Eso significa que necesitamos copiar los archivos de un repositorio a un contenedor Docker. Las siguientes líneas ayudan a hacer eso:
USER root
WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp
USER irisowner
COPY Installer.cls .
COPY src src
USER root: aquí cambiamos de usuario a root para crear una carpeta y copiar archivos en Docker.
WORKDIR /opt/irisapp: en esta línea configuramos el workdir en el que copiaremos los archivos.
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp : aquí le damos los derechos al usuario irisowner y al grupo que ejecuta IRIS.
USER irisowner: cambia de usuario de root a irisowner
COPY Installer.cls . - copia [Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls) a una raíz de workdir. No te olvides el punto.
COPY src src : copia archivos fuente desde la [carpeta src del repositorio](https://github.com/intersystems-community/objectscript-docker-template/tree/master/src/) a la carpeta src de workdir en el Docker.
En el siguiente bloque ejecutamos el *script* inicial, donde llamamos al instalador y al código ObjectScript:
COPY iris.script /tmp/iris.script # run iris and initial
RUN iris start IRIS \
&& iris session IRIS < /tmp/iris.script
COPY iris.script /: copiamos iris.script en el directorio raíz. Contiene el ObjectScript que queremos llamar para configurar el contenedor.
RUN iris start IRIS\ - inicia IRIS
&& iris session IRIS < /tmp/iris.script - inicia el terminal IRIS e introduce el ObjectScript inicial dentro de él.
¡Bien! Tenemos el Dockerfile, que importa archivos en Docker. Pero nos encontramos con otros dos archivos: installer.cls e iris.script. Vamos a examinarlos.
[**Installer.cls**](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls)
Class App.Installer
{
XData setup
{
}
ClassMethod setup(ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger) As %Status [ CodeMode = objectgenerator, Internal ]
{
#; Let XGL document generate code for this method.
Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "setup")
}
}
Sinceramente, no necesitamos Installer.cls para importar archivos. Esto podría hacerse con una sola línea. Pero a menudo, además de importar el código, es necesario configurar la aplicación CSP, introducir la configuración de seguridad, crear bases de datos y namespaces.
En este Installer.cls creamos una nueva base de datos y un namespace con el nombre IRISAPP, y creamos la aplicación /csp/irisapp predeterminada para este namespace.
Todo esto lo realizamos en el elemento <Namespace>:
E importamos todos los archivos desde SourceDir con la etiqueta Import:
SourceDir aquí es una variable, que se establece en el directorio actual/src:
Cuando Installer.cls cuenta con esta configuración nos da la confianza de que creamos una nueva base de datos IRISAPP limpia en la que importamos el código ObjectScript que queramos desde la carpeta src.
[iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script)
Aquí puedes proporcionar cualquier código de configuración inicial de ObjectScript que quieras para iniciar tu contenedor IRIS.
Por ejemplo, aquí cargamos y ejecutamos installer.cls y después hacemos que las password de usuario no expiren solo para evitar la primera solicitud de cambio de contraseña porque no necesitamos esta línea de comandos para el desarrollo.
; run installer to create namespace
do $SYSTEM.OBJ.Load("/opt/irisapp/Installer.cls", "ck")
set sc = ##class(App.Installer).setup() zn "%SYS"
Do ##class(Security.Users).UnExpireUserPasswords("*") ; call your initial methods here
halt
[docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml)
¿Por qué necesitamos docker-compose.yml? ¿No podríamos simplemente construir y ejecutar la imagen solo con Dockerfile? Sí, podríamos. Pero docker-compose.yml simplifica la vida.
Normalmente, docker-compose.yml se utiliza para lanzar varias imágenes Docker conectadas a una red.
docker-compose.yml también se podría utilizar para hacer más fácil el lanzamiento de una imagen Docker cuando tenemos una gran cantidad de parámetros. Se puede utilizar para pasar parámetros a Docker, como el mapeo de puertos, volúmenes, o parámetros de conexión VSCode.
version: '3.6'
services:
iris:
build:
context: .
dockerfile: Dockerfile
restart: always
ports:
- 51773
- 52773
- 53773
volumes:
- ~/iris.key:/usr/irissys/mgr/iris.key
- ./:/irisdev/app
Aquí declaramos el servicio de iris, que utiliza el archivo Dockerfile y expone los siguientes puertos de IRIS: 51773, 52773, 53773. También este servicio mapea dos volúmenes: iris.key desde el directorio principal del equipo servidor a la carpeta IRIS donde se espera y mapea la carpeta raíz del código fuente a la carpeta /irisdev/app.
Docker-compose nos da el comando más corto y unificado para construir y ejecutar la imagen, independientemente de los parámetros que se hayan configurado en docker compose.
en cualquier caso, el comando para construir y presentar la imagen es:
$ docker-compose up -d
y para abrir el terminal de IRIS:
$ docker-compose exec iris iris session iris
Node: 05a09e256d6b, Instance: IRIS
USER>
Además, docker-compose.yml ayuda a configurar la conexión para el *plugin* VSCode-ObjectScript.
[.vscode/settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json)
La parte que se refiere a la configuración de la conexión del complemento de ObjectScript es esta:
{
"objectscript.conn" :{
"ns": "IRISAPP",
"active": true,
"docker-compose": {
"service": "iris",
"internalPort": 52773
}
}
}
Es aquí donde vemos la configuración, que es diferente de la configuración predeterminada del *plugin* VSCode-ObjectScript.
Aquí podemos decir que queremos conectarnos al namespace IRISAPP (que creamos con Installer.cls):
"ns": "IRISAPP",
y hay una configuración para docker-compose, que dice que en el archivo docker-compose dentro del servicio "iris", VSCode se conectará al puerto 52773 que se mapea a:
"docker-compose": {
"service": "iris",
"internalPort": 52773
}
Si revisamos lo que tenemos para 52773 vemos que el puerto mapeado no está definido para 52773:
ports:
- 51773
- 52773
- 53773
Esto significa que se tomará un puerto aleatorio disponible en un equipo servidor, y VSCode se conectará automáticamente a este IRIS en Docker por medio del puerto aleatorio.
**Esta es una función muy útil, porque te da la opción de ejecutar cualquier cantidad de imágenes Docker con IRIS en puertos aleatorios y tener VSCode conectado a ellos de forma automática.**
¿Qué sucede con los otros archivos?
También tenemos:
[.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore): archivo que se puede utilizar para filtrar los archivos del equipo servidor que no quieres que se copien en la imagen Docker que creaste. Normalmente . git y . DS_Store son líneas obligatorias.
[.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes): atributos para git, que unifican los finales de línea de los archivos ObjectScript en las fuentes. Esto es muy útil si en el repositorio colaboran usuarios de Windows y Mac/Ubuntu.
[.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore): archivos a los que no quieres que git siga el historial de cambios. Por lo general, son algunos archivos ocultos a nivel de sistema operativo, como .DS_Store.
¡Bien!
¿Cómo hacer que tu repositorio sea ejecutable por Docker y fácil para colaborar?
1. Clona [este repositorio](https://github.com/intersystems-community/objectscript-docker-template).
2. Copia todos estos archivos:
[Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Dockerfile)
[docker-compose.yml](https://github.com/intersystems-community/objectscript-docker-template/blob/master/docker-compose.yml)
[Installer.cls](https://github.com/intersystems-community/objectscript-docker-template/blob/master/Installer.cls)
[iris.script](https://github.com/intersystems-community/objectscript-docker-template/blob/master/iris.script)
[settings.json](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.vscode/settings.json "settings.json"){#9f423fcac90bf80939d78b509e9c2dd2-d165a4a3719c56158cd42a4899e791c99338ce73}
[.dockerignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.dockerignore ".dockerignore"){#f7c5b4068637e2def526f9bbc7200c4e-c292b730421792d809e51f096c25eb859f53b637}
[.gitattributes](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitattributes ".gitattributes"){#fc723d30b02a4cca7a534518111c1a66-051218936162e5338d54836895e0b651e57973e1}
[.gitignore](https://github.com/intersystems-community/objectscript-docker-template/blob/master/.gitignore ".gitignore"){#a084b794bc0759e7a6b77810e01874f2-e6aff5167df2097c253736b40468e7b21e577eeb}
a tu repositorio.
Cambia [esta línea en Dockerfile](https://github.com/intersystems-community/objectscript-docker-template/blob/10f4422c105d5c75111fde16a184a83f5ff86d06/Dockerfile#L15) para que coincida con el directorio que cuenta con ObjectScript en el repositorio que quieres importar en IRIS (o no lo cambies si lo tienes en la carpeta /src).
Eso es todo. Todos (y tú también) tendrán tu código importado en IRIS en un nuevo namespace de IRISAPP.
**Cómo lanzará la gente tu proyecto**
La secuencia para ejecutar cualquier proyecto ObjectScript en IRIS sería:
1. Clonar el proyecto localmente con git clone
2. Ejecutar el proyecto:
$ docker-compose up -d
$ docker-compose exec iris iris session iris
Node: 05a09e256d6b, Instance: IRIS
USER>zn "IRISAPP"
**¿Cómo contribuirán los desarrolladores a tu proyecto? **
1. Crea un fork del repositorio y clona el fork en local
2. Abre la carpeta en VSCode (también se necesita que las extensiones [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) y [ObjectScript](https://marketplace.visualstudio.com/items?itemName=daimor.vscode-objectscript&ssr=false#review-details) estén instaladas en VSCode)
3. Haz clic derecho en docker-compose.yml->Reinicia - [VSCode ObjectScript](https://openexchange.intersystems.com/package/VSCode-ObjectScript) se conectará automáticamente y estará listo para editar, compilar o depurar
4. Confirma, envía y extrae los cambios de solicitud a tu repositorio
Aquí os muestro en un breve gif cómo funciona esto:

¡Y esto es todo! Happy coding!
Anuncio
Esther Sanchez · 30 jul, 2021
¡Hola Comunidad!
Os traemos un nuevo vídeo con subtítulos en español, ya disponible en el canal de YouTube de la Comunidad de Desarrolladores de InterSystems en español:
⏯ Demo de IAM, el gestor de APIs de InterSystems
InterSystems API Manager permite a los desarrolladores gestionar múltiples APIs y consumidores. En el vídeo se muestra el ejemplo de un entorno que utiliza el Administrador de APIs de InterSystems (o IAM) para monitorizar y controlar el tráfico de las APIs web que van desde tres fábricas diferentes de Ositos de Gominola hacia un endpoint en InterSystems IRIS.
Aquí podéis ver otros vídeos con subtítulos en español:
⏯ Cómo usar Visual Studio Code y ObjectScritpt⏯ Cómo trabajar con Perfiles FHIR en InterSystems IRIS for Health⏯ Cómo crear una API Rest con InterSystems IRIS⏯ Demo de PEX (Production Extension Framework)
Esperamos que os resulten útiles
¡Y recordad que podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en español, para manteneros formados e informados!
Artículo
Alberto Fuentes · 20 sep, 2021
¡Hola desarrolladores!
Otra forma de empezar a utilizar *InterSystems Objectscript Package Manager* es descargar las imágenes pre-construidas de InterSystems IRIS Community Edition o IRIS for Health Community Edition.
Estas imágenes de IRIS están desplegadas en DockerHub y puedes ejecutarlas directamente con este comando:
```
docker run --rm -p 52773:52773 --init --name my-iris -d intersystemsdc/iris-community:2021.1.0.215.0-zpm
```
A continuación, puedes lanzar una sesión de terminal de esta forma:
```
docker exec -it my-iris iris session IRIS
```
Y por último, instalar un módulo de zpm así:
```
USER>zpm
=============================================================================
|| Welcome to the Package Manager Shell (ZPM). ||
|| Enter q/quit to exit the shell. Enter ?/help to view available commands ||
=============================================================================
zpm:USER>install objectscript-math
[objectscript-math] Reload START (/usr/irissys/mgr/.modules/USER/objectscript-math/0.0.5/)
[objectscript-math] Reload SUCCESS
[objectscript-math] Module object refreshed.
[objectscript-math] Validate START
[objectscript-math] Validate SUCCESS
[objectscript-math] Compile START
[objectscript-math] Compile SUCCESS
[objectscript-math] Activate START
[objectscript-math] Configure START
[objectscript-math] Configure SUCCESS
[objectscript-math] MakeDeployed START
[objectscript-math] MakeDeployed SUCCESS
[objectscript-math] Activate SUCCESS
zpm:USER>
```
Puedes utilizar los mismos comandos para IRIS For Health con el tag `intersystemsdc/irishealth-community:2021.1.0.215.0-zpm`
Estas imágenes se publican para IRIS Community Edition y para IRIS For Health Community Edition en repositorios de DockerHub.
Las etiquetas se actualizan con cada nueva distribución de IRIS.
Happy coding!
Anuncio
Esther Sanchez · 21 oct, 2021
¡Hola desarrolladores!
¿Estáis pensando en asistir a alguna de las Focus Sessions del Virtual Summit, la Convención Anual de InterSystems? Pues no os perdáis la sesión dedicada a la Comunidad de Desarrolladores, Open Exchange y Global Masters!
⚡️ Sesión: "Ganar. Ganar. Ganar con el Ecosistema para Desarrolladores de InterSystems" ⚡️
🎁 Nota: Todos los asistentes a la sesión tendrán un regalo especial.
Ponentes: 🗣 @Anastasia.Dyubaylo, Community Manager, InterSystems 🗣 @Lena.Evsikova, Product Owner of InterSystems Open Exchange🗣 @Olga.Zavrazhnova2637, Customer Advocacy Manager, InterSystems
Descubrid cómo sacar el máximo provecho a la Comunidad de Desarrolladores, Global Masters y Open Exchange.
Temas que se tratarán: la experiencia de los desarrolladores, InterSystems IRIS y las Comunidades de Usuarios.
Todas las Focus Sessions serán grabadas y estarán disponibles bajo demanda. Podrán visualizarse desde las 8:00 PM (CEST) del miércoles 27 de octubre.
Así que...
Uníos a nuestra sesión para disfrutar de la tecnología de InterSystems y de nuestro ecosistema para desarrolladores!
➡️ Podéis registraros y reservar la sesión aquí
(El evento Virtual Summit 2021 es gratuito para todas las personas que se registren).
Anuncio
Mario Sanchez Macias · 22 nov, 2021
19 de Noviembre de 2021
Los kits de InterSystems incluyen un servidor web Apache que ofrece una práctica manera de interactuar con el Portal de Gestión de Caché/IRIS sin necesidad de instalar un servidor web externo. Sin embargo, este servidor web nunca debería usarse para instancias de producción y se debe instalar un servidor web externo que se ajuste a las necesidades específicas y a los requisitos de seguridad y riesgo de cada cliente.
Pruebas recientes han detectado problemas de seguridad con el servidor web Apache incluido en los kits actuales. Como es una tecnología de terceros que InterSystems no controla, InterSystems recomienda instalar la versión del servidor web obtenida directamente desde Apache y deshabilitar el servidor web Apache incluido. Nuestra documentación incluye instrucciones sobre cómo deshabilitar el servidor web proporcionado con nuestros kits. Apache también ofrece instrucciones de desinstalación, que se pueden encontrar en su página web.
InterSystems planea incluir una versión más reciente del servidor web Apache en las próximas actualizaciones. Al igual que en la versión actual, esta versión tampoco podrá ser utilizada para instancias de producción. En futuras actualizaciones de nuestros productos, InterSystems no incluirá ni instalará ningún servidor web. Más adelante daremos más detalles de nuestros planes.
Anuncio
Jose-Tomas Salvador · 23 nov, 2021
Se ha publicado una nueva versión del ZPM - ZPM 0.3.2.
Novedades en esta versión:
Varios cambios en el comando output de la ayuda
Cambios en los colores en las salidas
Añadida la posibilidad de incluir mas tipos de repo
Añadida la posiblidad de especificar un mensaje de post-instalación, con la etiqueta AfterInstallMessage en module.xml
Añadida la variable ${webroot}, que se refiere a la url, con servidor y puerto, donde está disponible el servidor web interno
Arreglado el problema durante la instalación si no se especificada un módulo (asunto #243)
Arreglado el problema con la fuente FileCopy en mayúscula
Algunas otras pequeñas correcciones
Anuncio
David Reche · 13 dic, 2021
Ya están disponibles las versiones de prueba 2021.2 de InterSystems IRIS, IRIS for Health e IRIS Studio.
Al ser versiones de prueba, estamos impacientes por aprender de vuestras experiencias con esta nueva versión antes de su lanzamiento oficial el próximo mes. Podéis compartir vuestros comentarios a través de la Comunidad de Desarrolladores, para crear entre todos un mejor producto.
InterSystems IRIS Data Platform 2021.2 hace aún más fácil desarrollar, desplegar y gestionar aplicaciones aumentadas y procesos de negocio que canalizan silos de datos y aplicaciones aisladas. Ofrece muchas nuevas funcionalidades, como:
Mejoras para desarrolladores de aplicaciones y de interfaces, incluyendo:
Python embebido
Producciones de interoperabilidad en Python
Actualizaciones en Visual Studio Code ObjectScript Extension Pack
Nuevos Business Services y operaciones añadidas, permitiendo a los usuarios definir y ejecutar consultas SQL con mínimo código personalizado
Mejoras en Analytics, incluyendo:
Nuevo comando SQL LOAD, que carga eficientemente datos de fuentes CSV y JDBC en tablas
Mejoras en Adaptive Analytics
Mejoras en tareas de Cloud y de Operations, incluyendo:
Nuevos Conectores Cloud que facilitan el acceso y uso de los servicios cloud dentro de InterSystems IRIS
Mejoras en IKO (IRIS Kubernetes Operator), que mejoran la gestión de los recursos de Kubernetes
Mejoras para administradores de sistemas y de bases de datos, incluyendo:
Online Shard Rebalancing automates distribution of data across nodes without interrupting operations
Adaptive SQL engine uses fast block sampling and automation to collect advanced table statistics and leverages runtime information for improved query planning
Storage needs for InterSystems IRIS are reduced with new stream and journal file compression settings
Support for TLS 1.3 and OpenSSL 1.1.1, using system-provided libraries
New ^TRACE utility reports detailed process statistics such as cache hits and reads
Todas estas mejoras se detallan en la:
Documentación y notas de la versión de InterSystems IRIS 2021.2
Documentación y notas de la versión de InterSystems IRIS for Health 2021.2
Documentación y notas de la versión de HealthShare Health Connect 2021.2
InterSystems IRIS 2021.2 es una versión CD (Continuous Delivery, entrega continua), que ahora viene con los paquetes de instalación clásicos para todas las plataformas soportadas, así como las imágenes para contenedor en OCI (Open Container Initiative), es decir, en formato contenedor Docker. Las imágenes para contenedor están disponibles para motores del run-time compatibles con Linux x86-64 y Linux ARM64, como se detalla en el Documento de Plataformas Soportadas.
Los paquetes de instalación completos para cada producto están disponibles en la página de descargas de productos del Centro de Soporte Internacional (WRC). Usando la opción de instalación "Custom" permite a los usuarios escoger las opciones que necesiten, como InterSystems Studio e IntegratedML, para ajustar el tamaño de instalador a las necesidades reales.
Las imágenes del contenedor para la Enterprise Edition y la Community Edition y todos los componentes correspondientes están disponibles en el Registro de Contenedores de InterSystems usando los siguientes comandos:
docker pull containers.intersystems.com/intersystems/iris:2021.2.0.617.0
docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.617.0
docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.617.0
docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.617.0
Para una lista completa de las imágenes disponibles, se puede consultar esta documentación.
Las versiones en formato tarball de todas las imágenes de los contenedores están disponibles en la página de descargas para pruebas del Centro de Soporte Internacional (WRC).
El número de compilación de esta versión es 2021.2.0.617.0.
Artículo
Eduardo Anglada · 23 mar, 2022
¡Hola desarrolladores!
A veces necesitamos publicar la imagen Docker de la solución InterSystems IRIS en la que estamos trabajando. Existen diferentes posibilidades, por ejemplo:
Usar la imagen en un cluster de Kubernetes.
Que un compañero ejecute la imagen desde un repositorio público sin tener que generarla.
La mejor solución es subir la imagen al Registro Hub de Docker o al Registro de Github.
En este breve artículo, propongo una forma de hacerlo automáticamente cada vez que subas (usando git push) cambios a tu repositorio GitHub.
Simplemente añade el siguiente fichero a la carpeta .github/workflows de tu repositorio:
Spoiler
name: Build and publish a Docker image to ghcr.io
on:
# publish on pushes to the main branch (image tagged as "latest")
# image name: will be: ghcr.io/${{ github.repository }}:latest
# e.g.: ghcr.io/intersystems-community/intersystems-iris-dev-template:latest
push:
branches:
- master
jobs:
docker_publish:
runs-on: "ubuntu-20.04"
steps:
- uses: actions/checkout@v2
# https://github.com/marketplace/actions/push-to-ghcr
- name: Build and publish a Docker image for ${{ github.repository }}
uses: macbre/push-to-ghcr@master
with:
image_name: ${{ github.repository }}
github_token: ${{ secrets.GITHUB_TOKEN }}
# optionally push to the Docker Hub (docker.io)
# docker_io_token: ${{ secrets.DOCKER_IO_ACCESS_TOKEN }} # see https://hub.docker.com/settings/security
Podemos usar cualquier nombre de archivo. Mira el ejemplo en iris-dev-template.
Cada vez que subas cambios al repositorio, Github ejecutará este workflow para crear y publicar la imagen en el registro de imágenes de Github.
Cualquiera puede puede obtener y ejecutar la imagen publicada, por ejemplo, como este iris-dev-template:
# docker run --rm --name my-iris -d --publish 9091:1972 --publish 9092:52773 ghcr.io/intersystems-community/intersystems-iris-dev-template:latest
El fichero puede funcionar en cualquier repositorio sin ningún cambio. Las imágenes tendrán diferentes URLS: ghcr.io/repositorio/imagen:latest
Tomé la idea de este enfoque a partir de la documentación de GitHub
¡Espero que os resulte útil!
Anuncio
David Reche · 26 ene, 2022
El equipo de Plataformas de Datos está encantado de anunciar el lanzamiento de la versión 2021.2 de InterSystems IRIS, InterSystems IRIS for Health y HealthShare Health Connect, ya disponible (GA) para clientes y partners.
Novedades de la versión
InterSystems IRIS Data Platform 2021.2 hace aún más sencillo desarrollar, desplegar y gestionar aplicaciones aumentadas y procesos de negocio que canalizan silos de datos y aplicaciones aisladas. Ofrece muchas funcionalidades nuevas, como:
Mejoras para desarrolladores de aplicaciones y de interfaces, incluyendo:
Python embebido
Producciones de interoperabilidad en Python
Actualizaciones en el paquete de extensiones Visual Studio Code ObjectScript
Nuevos Business Services y operaciones, que permiten a los usuarios configurar y ejecutar SQL query con mínimo código personalizado
Mejoras en Analytics e Inteligencia Artificial, incluyendo:
Nuevo comando SQL LOAD, que carga de forma eficiente datos desde CSV y JDBC en tablas
Mejoras en Adaptive Analytics
Mejoras en tareas de Cloud y Operations tasks, incluyendo:
Nuevos Conectores Cloud, que facilitan el acceso y uso de los servicios cloud en las aplicaciones de InterSystems IRIS
Mejoras en el Operador InterSystems Kubernetes (IKO) para mejorar la gestión de los recursos Kubernetes
Mejoras para administradores de sistemas y de bases de datos, incluyendo:
Online Shard Rebalancing que automatiza la distribución de datos a través de nodos sin interrumpir la operación
Adaptive SQL engine usa un sampleado rápido y automatizado para recolectar estadísticas avanzadas de tablas mejorando así la información disponible del runtime y la ejecución del planificador de queries
Se ha reducido el almacenamiento necesario para el sistema de InterSystems IRIS mediante compresión de streams y journals
Soporte para TLS 1.3 y OpenSSL 1.1.1, usando librerías incluidas en el sistema
Nueva utilidad de reporte detallado de estadísticas de procesamiento ^TRACE
Todas estas mejoras se detallan en la documentación de producto:
Documentación y notas de la versión de InterSystems IRIS 2021.2
Documentación y notas de la versión de InterSystems IRIS for Health 2021.2
Documentación y notas de la versión de HealthShare Health Connect 2021.2
Cómo obtener el software
InterSystems IRIS 2021.2 es una versión CD (Continuous Delivery, entrega continua), que ahora viene con los paquetes de instalación clásicos para todas las plataformas soportadas, así como con las imágenes del contenedor en OCI (Open Container Initiative), es decir, en formato Docker. Las imágenes para contenedor están disponibles para motores del run-time compatibles con Linux x86-64 y Linux ARM64, como se detalla en el documento de plataformas soportadas.
Los paquetes de instalación completos para cada producto están disponibles en la página de descargas del Centro de Soporte Internacional (WRC). La opción de instalación "Custom" permite a los usuarios escoger las opciones que necesitan, como InterSystems Studio e IntegratedML, para ajustar el footprint adecuado para la instalación.
Las imágenes del contenedor para la Enterprise Edition, Community Edition y todos sus componentes correspondientes están disponibles desde el Registro de Contenedores de InterSystems usando los siguientes comandos:
docker pull containers.intersystems.com/intersystems/iris:2021.2.0.649.0
docker pull containers.intersystems.com/intersystems/iris-ml:2021.2.0.649.0
docker pull containers.intersystems.com/intersystems/irishealth:2021.2.0.649.0
docker pull containers.intersystems.com/intersystems/irishealth-ml:2021.2.0.649.0
Para una lista completa de las imágenes disponibles, se puede consultar esta documentación.
También, las versiones en formato tarball de todas las imágenes de contenedores están disponibles en la página de descargas del Centro de Soporte Internacional (WRC).
Nuestros listados correspondientes en los principales marketplaces en la nube serán actualizados durante los próximos días.
Comparte tu experiencia
Estamos ansiosos de ver esta versión cubriendo los objetivos del hito de la Disponibilidad General y estamos deseando conocer vuestras experiencias con el nuevo software. Poneos en contacto con vuestro equipo de InterSystems habitual o aquí en la Comunidad de Desarrolladores si tenéis cualquier comentario sobre la tecnología o los casos concretos que estáis tratando.
Para algunas funcionalidades y productos específicos, hemos puesto en marcha Early Access Programs (Programas de Acceso Preferente), para permitir a nuestros usuarios evaluar el software antes de su lanzamiento. A través de estas iniciativas de sondeo, podemos aprender de nuestra audiencia objetivo y asegurarnos de que los nuevos productos satisfacen sus necesidades cuando son lanzados. Si estáis interesados en participar en estos programas, contactad por favor con vuestro equipo de InterSystems habitual o a través de la Comunidad de Desarrolladores.
Artículo
Ricardo Paiva · 24 mar, 2022
**Este artículo es una continuación de esta publicación.**
En ese artículo, analizamos el desarrollo de *business processes*, que forman parte de los componentes necesarios para la integración del sistema y sirven como coordinadores de la producción.
En este artículo mostraremos la creación de un *business service*, que es la ventana de entrada de información para la producción.
* Producción
* Mensaje
* **Componentes**
* **Business Services**
* Business Processes (publicación anterior)
* Business Operation
Y, finalmente, llegamos al último artículo de "¡Utilicemos la interoperabilidad!"
El *business service* proporciona una ventana de entrada para la información enviada desde fuera de IRIS, con o sin utilizar el adaptador para I/F externo.
Hay tres tipos de business services en la muestra (los enlaces entre paréntesis son enlaces al código de la muestra):
1. [*Business services* para archivos que utilizan adaptadores de entrada](#fileinboundadapter)(Start.FileBS)
2. [*Business services* para servicios web que utilizan el adaptador de entrada SOAP](#soapinboundadapter)(Start.WS.WebServiceBS)
3. [*Business services* llamados por procedimientos almacenados o REST sin utilizar adaptadores](#nonadapter)(Start.NonAdapterBS)
Los diferentes métodos de conexión que se utilizan para introducir la información solo aumentarán el número de *business services*; sin embargo, el procesamiento realizado dentro de un *business service* es
Crear un mensaje de solicitud que se enviaráusando información introducida externamente y simplemente llamar al business component
Sin ningún esfuerzo.
Ahora, describiremos cómo crear componentes que utilizan adaptadores de entrada de archivos.
Los business services se escriben en *scripts*, que pueden crearse en VSCode o Studio.
### 1. Business services para archivos que utilizan adaptadores de entrada(Start.FileBS)
Si creas una clase en VSCode, deberías crear una clase que hereda de Ens.BusinessService. Para los adaptadores, puedes utilizar el parámetro **ADAPTER** como nombre de la clase ADAPTER (por ejemplo, especificar una clase de adaptador de entrada de archivos).
Si no utilizas el adaptador, no será necesaria ninguna configuración.
```objectscript
Class Start.FileBS Extends Ens.BusinessService
{
Parameter ADAPTER = "EnsLib.File.InboundAdapter";
```
En el adaptador de entrada de archivos, puedes especificar el directorio que se supervisará en Settings→File Path para el *business service* de la producción.

Si el archivo localizado en "File Path" coincide con la información especificada en "File Spec", este abre el archivo como un objeto de flujo. Lo define como la primera variable cuando se llama al business service **ProcessInput()**.
Cuando se inicia **ProcessInput()**, se llama automáticamente a **OnProcessInput()**. OnProcessInput() se transmite directamente a **OnProcessInput()** con los parámetros transmitidos a ProcessInput().

En **OnProcessInput()** la sentencia inicial recibe la información del objeto *file stream*, que se transmite como primer parámetro, después crea un mensaje que se dará al siguiente componente, escribe el proceso de llamada al siguiente componente y completa la lógica básica.
* * *
【Memo】En el caso de Studio, inicia el Asistente (Wizard) de Business Services en el menú de New Creation, selecciona el adaptador y haz clic en el botón Finalizar.
* * *
La definición del método **OnProcessInput()** es la siguiente:
```objectscript
Method OnProcessInput(pInput As %Stream.Object, Output pOutput As %RegisteredObject) As %Status
```
**pInput** es proporcionado con una instancia de la clase **%Stream.FileCharacter** para archivos de texto o de la clase **%Stream.FileBinary** para archivos binarios.
En el ejemplo, se introducirá un archivo en formato texto, y lo hemos escrito para aceptar solicitudes de varias líneas y una solicitud por línea.
**La propiedad AtEnd** se establece en 1 cuando se detecta EndOfFile. Puedes utilizar esta propiedad para detener el bucle.
En un bucle, leemos las líneas utilizando el método **ReadLine()**, que nos permite obtener información sobre los contenidos del archivo una línea cada vez ( consulta la documentación para más información sobre el adaptador de archivos).
Escribe el mensaje, recuperando información línea a línea. Después, ejecutamos el método ..SendRequestAsync() , que llama al resto de los componentes.
Cuando se ejecute el método, el primer parámetro debería ser el nombre del componente al que quieres llamar en forma de *string*, y el segundo parámetro debería ser el mensaje de solicitud que hayas creado.
Ten en cuenta que ..SendRequestAsync() es una llamada asincrónica y no espera recibir una respuesta.
Nota: También existe SendRequestSync() para las llamadas sincronizadas.。
El código de ejemplo es el siguiente:

Referencia: explicación del uso de la función $piece() en el texto de ejemplo anterior
$piece(“string”, ”delimiter mark”, ”position number”)
La función para establecer/obtener una string con un delimitador, en el ejemplo, para obtener el primer y segundo valor de datos separados por comas, se escribe con la siguiente sintaxis:
```objectscript
set request.Product=$piece(record,",",1)
set request.Area=$piece(record,",",2)
```
Ahora, revisemos la función de Start.FileBS tal y como aparecía en la descripción anterior.
En la producción del ejemplo, el "File Path" se estableció en **/irisdev/src**, y el "File Spec" se estableció en **check.txt**. Prepara el mismo directorio o cámbialo a otro y registra los datos de la muestra en el archivo check.txt con el siguiente formato: nombre del producto adquirido, nombre de la ciudad.
※Si estás utilizando el contenedor de muestra, cambia el nombre de [Test-check.txt] en el directorio src en el directorio que se creó con el clon de git.


### 2. Business services para servicios web que utilizan el adaptador de entrada SOAP (Start.WS.WebServiceBS)
Posteriormente, describiremos la creación de business services para los servicios web.
La clase de Business Service para servicios web actúa como proveedor de servicios web = servidor de servicios web.
En el ejemplo, tenemos dos parámetros en el método del servicio web para esta producción de ejemplo, para tener información que se envía desde el cliente del servicio web. El método web utiliza los datos introducidos en los parámetros para crear una clase de mensaje y llamar a otros componentes.

Cuando se define una clase de servicio web, se crea una pantalla de prueba. Sin embargo, no se muestra de forma predeterminada.
Inicia sesión en IRIS (o inicia un terminal), ve al *namespace* donde se encuentra la producción y haz lo siguiente:
Para tu referencia:Acceso al catálogo y a las páginas de prueba
Esta es una configuración de código de ejemplo en el ajuste, donde el contenedor se inició con docker-compose up -d (ejecutar en el namespace %SYS)
set $namespace="%SYS"
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInfo")=1
set ^SYS("Security","CSP","AllowClass","/csp/user/","%SOAP.WebServiceInvoke")=1
【Atención】Ten en cuenta que la frase distingue entre mayúsculas y minúsculas y debe escribirse con cuidado. Además, según el namespace en el que se utilice el producto, cambia el script especificado. La oración del ejemplo fue escrita considerando que el ejemplo se importa en el namespace USER.Si importas el código del ejemplo en el namespace ABC, el cuarto subíndice debería ser "/csp/abc/".
Cuando se haya completado la configuración, ve a la siguiente URL:
http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls

Si quieres ofrecer el WSDL a tu cliente de servicios web, especifica WSDL=1 al final de la siguiente URL
http://localhost:52773/csp/user/Start.WS.WebServiceBS.cls?WSDL
### 3. Business services llamados por procedimientos almacenados o REST sin utilizar adaptadores(Start.NonAdapterBS)
A continuación, introduciremos el *Business Service* sin adaptadores (Start.NonAdapterBS).

Para los *business services* que utilizan adaptadores, el adaptador llama al método ProcessInput() del business service para detectar la información.
Si no utilizas adaptadores, puedes seguir llamando al método ProcessInput(), pero este método no es público. Por lo tanto, si implementas un business service que no utiliza adaptadores, tendrás que considerar ProcessInput().
La muestra utiliza los dos métodos siguientes:
* Procedimientos almacenados(Start.Utils)
* Clase dispatch para REST(Start.REST)→Este es el servicio que ejecutamos en este artículo.
Este es un ejemplo del procedimiento almacenado.

Después de añadir un business service (Start.NonAdapterBS) que no utiliza adaptadores a la producción (estado incorporado en la muestra), ejecuta el siguiente procedimiento almacenado
call Start.Utils_CallProduction('piroshki','Russia')

Un rastreo de los resultados de la ejecución es el siguiente:

A continuación, se muestra un ejemplo de creación de una clase dispatch para REST:

El XML descrito en el mapa de la URL de XData define qué métodos se llaman como respuesta a la URL en el momento que se realiza la llamada de REST.
En el ejemplo se describe una definición que llama al método **WeatherCheck()** cuando se proporcionan las URL's del **/weather/first parameter (purchased product name)/ second parameter (name of the city)** en la **solicitud GET**.
```objectscript
```
A continuación, define la URL base para la URL anterior en la pantalla de Configuración de la ruta de acceso a la aplicación web del Portal de administración, y estará completo.
Consulta este artículo para más detalles sobre la configuración.
Cuando esté listo, intenta ejecutar la información usando un *business service* que te permita enviar la información REST.
Ejemplo)http://localhost:52773/start/weather/Takoyaki/Osaka


Si no utilizas un adaptador, como ProcessInput() no se puede llamar directamente desde fuera, hemos creado un objeto para el business service en la lógica que se ejecuta por medio de REST o procedimientos almacenados (utilizando el método CreateBusinessService() de la clase Ens.Director) y llamado a ProcessInput()
Si utilizas un adaptador, este detecta la entrada y almacena la información en un objeto único y la transmite al business service. En cambio, si no utilizas un adaptador, el resto es prácticamente igual, la diferencia solo se encuentra en la parte del proceso mencionada anteriormente.
El business service está diseñado simplemente para utilizar la información que se introduce fuera de IRIS para crear mensajes de solicitud y llamar a los business components.
Durante la producción de la muestra, pudimos ver lo siguiente:
Los distintos componentes desempeñan diferentes funciones en la ejecución de una producción (business services, business processes, business operations).
Para transmitir información entre componentes, utiliza el mensaje.
Los mensajes se almacenan en la base de datos a menos que se borren y, por ello, se pueden rastrear en cualquier momento.
Algunos adaptadores facilitan el proceso que rodea a la conexión.
Estas son las operaciones básicas sobre cómo utilizar la interoperabilidad en IRIS.
También hay mapas de registros y herramientas de conversión de datos que son útiles para la entrada y salida de archivos CSV y otros archivos con formato específico.
Además, IRIS for Health también es compatible con las transmisiones FHIR y HL7 (incluyendo SS-MIX2).
Estaré encantado de explicarlo en otra publicación. Si tienes algo interesante que compartir, ¡deja un comentario!
Por último, también hay cursos de formación para aprender a utilizar la Interoperabilidad.
Artículo
Ricardo Paiva · 4 mar, 2022
**Este artículo es una continuación de esta publicación.**
En ese artículo revisamos cómo crear y definir mensajes que se utilizan para enviar y recibir datos entre componentes.
En este artículo, explicaré cómo crear una *business operation* a partir de los métodos para crear componentes.
* Producción
* Mensaje(artículo anterior)
* **Componentes**
* Business Services
* Business Processes
* **Business Operations**
Revisaremos rápidamente el código al referirnos a la muestra.。

| Nombre del componente | Función |
| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Start.FileBS | Un servicio (BS) que utiliza el adaptador para la entrada de archivos para leer los archivos ubicados en un directorio específico a intervalos regulares. |
| Start.NonAdapterBS | Servicios (BS) que permiten a las aplicaciones y a los usuarios introducir información directamente sin utilizar un adaptador. |
| Start.WS.WebServiceBS | Servicios (BS) que permiten introducir información mediante servicios web. |
| Start.WeatherCheckProcess | Un proceso (BP) que controla el procedimiento para adquirir información meteorológica y después registrarla en una base de datos. |
| Start.GetKionOperation | La operación (BO) para transmitir del nombre de la ciudad al servicio web que proporciona la información meteorológica y la devuelve. |
| Start.SQLInsertOperation | Operaciones (BO) que utilizan adaptadores de salida SQL para solicitar el registro de la información meteorológica y de la compra en la base de datos. |
| Start.InsertOperation | Operaciones (BO) que realizan actualizaciones en las tablas de InterSystems IRIS sin utilizar adaptadores. |
Nota: BS significa "*Business Service*", BP significa "*Business Process*" y BO significa "*Business Operation*".
Hay que escribir ObjectScript en *Business Services* y *Business Operations* y se pueden crear en VSCode o en Studio. Los *Business Processes* también se pueden llevar a cabo en el Portal de Administración.
No hay un orden particular para crearlos, pero el sitio externo al que se conectará es un sitio público y puede utilizarse inmediatamente en este ejemplo. En este caso, es conveniente comenzar con la *business operation* para que las pruebas sean más fáciles.
Después de crear los componentes, hay una página de prueba en la producción para los *business processes* y las *business operations*. Sin embargo, las pruebas están desactivadas de forma predeterminada en la definición de la producción, para evitar pruebas aleatorias en el entorno de producción.
Para saber más sobre cómo permitir las "Pruebas activadas" en la producción, utiliza la siguiente configuración (la producción de muestra se ha configurado como "Pruebas activadas" de forma anticipada):

### 1) Business Operations
En el ejemplo, aparecen dos tipos de *business operations*.
Una de las operaciones consiste en transmitir el nombre de la ciudad a una API web externa mediante REST y solicitar que se obtenga la información meteorológica. La otra operación consiste en dar la información meteorológica y el nombre del producto comprado a la base de datos de InterSystems IRIS y solicitar el proceso actualizado.
#### **1)-1 Business Operations de REST**
Comencemos creando una operación que llame a una API web externa por medio de REST.
Esta operación inicia el método GetKion() cuando se introduce un mensaje Start.Request, consulta a un sitio externo y devuelve la información meteorológica en un mensaje Start.Response.
Consulta aquí los detalles del código.
Para crear una *business operation* para REST, deberá heredarla de **EnsLib.REST.Operation**.
```objectscript
Class Start.GetKionOperation Extends EnsLib.REST.Operation
```
La herencia de esta clase ofrece los siguientes métodos en IRIS que coinciden con los métodos de HTTP. Consulta la documentación para obtener más información.
GetURL(): se utiliza para las operaciones GET de HTTP.
PostURL(): se utiliza en las operaciones POST de HTTP.
PutURL(): se utiliza en las operaciones PUT de HTTP.
DeleteURL(): se utiliza en las operaciones DELETE de HTTP.
Para REST, utiliza el adaptador **EnsLib.HTTP.OutboundAdapter**. Establece el nombre del adaptador en el parámetro **ADAPTER** y la propiedad Adapter, como se muestra en el ejemplo.
El parámetro INVOCATION configura la **Fila**.
```objectscript
Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";
Property Adapter As EnsLib.HTTP.OutboundAdapter;
Parameter INVOCATION = "Queue";
```
Es necesario especificar la clave de la API OpenWeather que se obtendrá en el momento de la ejecución. Hay una forma de mostrar la configuración que varía según el entorno en la configuración de la producción.
El procedimiento es el siguiente:
1. Define las propiedades
2. Especifica el nombre de la propiedad que se creó en el parámetro SETTINGS (si hay varias propiedades, sepáralas con comas). De manera opcional, también se puede especificar una categoría (utilizando “property name: category name”).
A continuación se muestra un código de ejemplo.
```objectscript
/// APIキーを指定します
Property appid As %String;
/// specify lang option for OpenWeather API (default = ja = japanese)
Property lang As %String [ InitialExpression = "ja" ];
Parameter SETTINGS = "lang:OpenWeatherMap,appid:OpenWeatherMap";
```
La página de Configuración de la producción se muestra lo siguiente. La descripción que aparece en la línea inmediatamente anterior a la definición de la propiedad también se muestra en la página de configuración de la producción, como se muestra en la figura.
Después, revisaremos el mapa de mensajes, que es un escenario esencial para business operations.
.png)
La definición anterior permite que el método GetKion() funcione cuando se envíe el mensaje **Start.Request**.
En el método GetKion(), **el nombre de la ciudad** puede obtenerse a partir de la propiedad Area para solicitar mensajes transmitidos como información de entrada.
Estableciendo el **nombre de la ciudad** como parámetro de la URL publicada por la API web externa y llamándolo, se puede obtener la información meteorológica.
La configuración del servidor HTTP y de la URL se realiza en la página de Producción del Portal de Administración. Para obtener la configuración, utiliza la propiedad del **Adapter** que le proporciona el adaptador de salida de HTTP.
Ejemplo) para especificar una URL, utiliza ..Adapter.URL
Utiliza el método GetURL() que proporcionan las business operations de REST para llamar a un sitio externo. El primer parámetro es la URL que se ejecutará (es decir, la URL que se especifica en los parámetros requeridos como el **nombre de la ciudad**). El segundo parámetro es la respuesta de HTTP con parámetros transmitidos como referencia.
Como la información meteorológica se almacena en formato JSON en la respuesta HTTP, la operación se completa cuando los datos se registran en el mensaje de respuesta (=pResponse).
El nombre de la clase de los mensajes de respuesta se especifica en el segundo parámetro del método creado cuando se transmite la referencia.
```objectscript
Method GetKion(pRequest As Start.Request, Output pResponse As Start.Response) As %Status
```
Para devolver un mensaje de respuesta a la persona que lo llama, crea una instancia del mensaje de respuesta, almacénalo en la segunda variable del parámetro (_**pResponse**_), y establece la información necesaria en las propiedades.
```objectscript
set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"
set pResponse.Area=weatherinfo.name
// this code is fit to Japan time because weatherinfo.dt is UTC
set unixEpochFormat=weatherinfo.dt+32400
set dt=$system.SQL.Functions.DATEADD("s",unixEpochFormat,"1970-01-01 00:00:00")
set pResponse.AreaPublicTime=dt
```
Como las respuestas HTTP de los sitios externos se devuelven en formato JSON, el flujo que podría obtenerse de la respuesta HTTP se utiliza para convertirla en un objeto dinámico que sea cómodo para llevar a cabo operaciones JSON dentro de IRIS.
```objectscript
set weatherinfo={}.%FromJSON(tHttpResponse.Data)
```
El siguiente es un ejemplo de una cadena JSON de respuesta:
```json
{
"coord": {
"lon": 135.5022,
"lat": 34.6937
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"base": "stations",
"main": {
"temp": 11.38,
"feels_like": 8.33,
"temp_min": 11,
"temp_max": 12.22,
"pressure": 1007,
"humidity": 62
},
"visibility": 10000,
"wind": {
"speed": 2.57,
"deg": 220
},
"clouds": {
"all": 75
},
"dt": 1611820991,
"sys": {
"type": 1,
"id": 8032,
"country": "JP",
"sunrise": 1611784750,
"sunset": 1611822143
},
"timezone": 32400,
"id": 1853909,
"name": "Osaka",
"cod": 200
}
```
La temperatura máxima, mínima y el tiempo se pueden obtener de la siguiente manera:
```objectscript
set pResponse.AreaDescription=weatherinfo.weather.%Get(0).description
set pResponse.KionMax=weatherinfo.main."temp_max"
set pResponse.KionMin=weatherinfo.main."temp_min"
```
Si quieres saber más sobre la manipulación de JSON en IRIS, consulta la [documentación](https://docs.intersystems.com/).
Ahora, utilizaremos la herramienta para realizar pruebas de producción para ver si podemos obtener la información meteorológica de forma correcta.
Abre la página de Producción (Management Portal> Interoperability> Configuration> Production), haz clic en Start.GetKionOperation y, a continuación, haga clic en el **botón "Test"** en la pestaña "**Action**".
Especifica un **nombre de ciudad** (Naha, Sapporo, Nagano, Shinjuku, etc.) en **Area**, y haz clic en el botón “**Run Test Service**”.
Aquí puedes ver los resultados de la prueba, con las temperaturas máximas y mínimas y el tiempo registrado.
Continúa para saber cómo utilizar la página Trace.
Al seleccionar un rectángulo horizontal como  en la pantalla izquierda hace que la información en la pantalla derecha, se modifique.
Los mensajes que se envían y reciben durante el proceso de integración del sistema se guardan automáticamente en la base de datos. Mediante la página de mensajes de Visual Trace, se puede ver en detalle qué mensajes se enviaron a qué componentes en orden cronológico y si hubo respuesta o no.
Además, si se produce un error
"Se produjo un error al enviar/recibir/recibir □ mensaje al componente de ○ a △".
aparecerá una marca roja donde se produjo el error para que se pueda ver. Por supuesto, además del seguimiento, también tenemos una página para registrar eventos. **(Management Portal > [Interoperability] > [View] > [Event Log])**
Seguimos. Vamos a revisar la operación para solicitar una actualización a la base de datos.
#### **1)-2 Business Operations que solicitan actualizaciones a la base de datos**
La muestra ofrece dos tipos de operaciones: Start.SQLInsertOperation y Start.InsertOperation.
Cada una de ellas es una operación para solicitar una actualización de la base de datos, pero Start.SQLInsertOperation utiliza el adaptador de salida de SQL, mientras que Start.InsertOperation no tiene ningún adaptador.
La diferencia entre ambos es
se asume que se accede mediante conexiones ODBC/JDBC a la operación que utiliza el adaptador de salida SQL, por lo que el destino de la conexión a la base de datos puede cambiarse en la configuración de la producción.
Para las operaciones que no utilizan adaptadores, se asume que el destino de la actualización de la BD es una base de datos dentro del rango de visibilidad de la configuración de producción y que no se produce ningún cambio en el destino de la conexión.
La base de datos IRIS puede utilizarse para almacenar datos arbitrarios durante la integración del sistema. Sin embargo, supongamos que la configuración del sistema cambia por cualquier razón unos años más tarde, y surge la necesidad de conectarse a una base de datos ubicada en un servidor diferente. En ese caso, la operación sin el adaptador no podrá continuar .
En cambio, las operaciones que utilizan el adaptador de salida SQL pueden funcionar si no hay cambios que procesen el contenido de las especificaciones del destino (si no hay ningún problema con la sentencia SQL que se ejecutará, puede conectarse con bases de datos de diferentes productos).
Durante la integración del sistema, puede haber casos en los que la información de la conexión cambia debido a razones externas al sistema. Por ello, es vital poseer un diseño que pueda responder con flexibilidad a los cambios. Por esta razón, se recomienda crear componentes que soporten conexiones externas de una forma libre de acoplamientos.
Sin embargo, supongamos que no hay ningún cambio en la configuración en el futuro. En ese caso, se podrá acceder a la base de datos en IRIS sin utilizar la conexión ODBC/JDBC, por lo que se podrá optar por utilizar el adaptador o no, dependiendo del tipo de uso.
Vamos a ver el código Start.SQLInsertOperation que utiliza el adaptador.
El adaptador que se utiliza en el ejemplo es un adaptador de salida SQL, que permite solicitar a la base de datos que ejecute sentencias SQL. Distintos adaptadores ofrecen diferentes métodos. Consulta la documentación para más detalles sobre los métodos que proporcionan los adaptadores.
Después, revisa el código de Start.InsertOperation, sin utilizar el adaptador.
Tanto si se utiliza un adaptador como si no, se requiere el mapa de mensajes y las definiciones de los métodos de la operación. Si no se utiliza un adaptador, no se necesita definir “Paramter” y “Property” para el adaptador.
.png)
Business Operations sin adaptadores: En Start.InsertOperation, SQL se ejecuta usando ObjectScript (el comentario de la afirmación es el proceso de actualización en las operaciones de objetos).
La implementación es satisfactoria si la base de datos que se actualiza no se separa de IRIS.
Descubrimos que las operaciones que utilizan adaptadores ofrecen un método fiable para solicitar el procesamiento desde el destino. También confirmamos que es posible crear operaciones sin utilizar adaptadores y escribir código de forma libre para ellas.
En el siguiente artículo, me gustaría explicar cómo crear un *business process* que llame a las operaciones para obtener información meteorológica y actualizar la base de datos en el orden correcto.
Artículo
Ricardo Paiva · 11 mar, 2022
**Este artículo es una continuación de esta publicación.**
En ese artículo, analizamos la creación de *business operations* a partir de los componentes necesarios para la integración del sistema.
En este artículo, mostraré cómo crear un *business process* que llama a las dos *business operations* definidas en el orden de la secuencia.
* Producción
* Mensaje
* **Componentes**
* Business Services
* **Business Processes**
* Business Operations (publicación anterior)
El *business process* actúa como coordinador (centro de mando) del proceso.
Los ajustes en el proceso que se pueden implementar en la muestra son los siguientes:
Paso 1: Proporcionar el nombre de la ciudad a una API web externa y solicitar información meteorológica.
Paso 2: Registrar el resultado de la consulta (información meteorológica) del paso 1 y el nombre del producto comprado que se recibió al inicio de la producción.
En el *business process* de muestra, esperaremos la respuesta al paso 1 y ajustaremos el paso 2 para que funcione.
En el proceso de espera de una respuesta (es decir, de sincronización), por ejemplo, ¿qué ocurre si el paso 1) no responde durante unos días?
Si se entregan nuevos mensajes al *business process* mientras se espera una respuesta durante unos días, los mensajes no serán descartados ya que se almacenan en una cola. Sin embargo, el *business process* no procesará nuevos mensajes y habrá un retraso en la operación.
Nota: Los business processes y las business operations tienen colas.
Por lo tanto, en producción, cuando hay una llamada sincronizada, hay dos maneras de que el *business process* pueda moverse: **A) Hacer una sincronización perfecta**, y B) Guardar el estado del propio *business process* en la base de datos y transferir el entorno de ejecución para que otros procesos puedan ejecutarse mientras esperan una respuesta.
**A) Cómo hacer una sincronización perfecta:**
Mientras se realiza una llamada sincronizada, el procesamiento del business process está en marcha, y esperando a que se procese el siguiente mensaje hasta que se complete todo el procesamiento.➡Esta función se utiliza cuando se necesita garantizar el orden del procesamiento en el método "primero en entrar, primero en salir".
B) El método para guardar el estado del propio *business process* en la base de datos y transferir el entorno de ejecución para que otros procesos puedan ejecutarse mientras esperan una respuesta es
Cuando se realiza una llamada sincronizada, el proceso guarda su estado en la base de datos. Cuando se recibe un mensaje de respuesta, y es el momento de procesar el mensaje, se abre la base de datos y se ejecuta el siguiente proceso. (IRIS gestionará el almacenamiento y la reapertura de los business processes en la base de datos). ➡ Se utiliza cuando es aceptable cambiar el orden para procesar los mensajes (es decir, cuando se permiten procesar más y más mensajes diferentes recibidos mientras se espera una respuesta).
En la muestra, se utiliza **B)**.
Hay dos tipos de editores para crear business processes: un Editor de Business Processes que permite colocar cuadros de procesamiento (actividades) e implementarlos mientras se define su ejecución, y un método para crearlos mediante ObjectScript en Studio o VSCode.
Si utilizas el Editor de Business Processes, utilizarás la actividad de llamada para invocar al componente, pero esta actividad está **implementada** de la forma **B)**. **Por supuesto, también puedes implementar el método** **A)** en el Editor de Business Processes, excepto que en ese caso no utilizará la actividad de llamada (utilizará la actividad del código).
En esta sección, explicaré cómo crearla.
Si se utiliza el Editor de *Business Processes*, deben escribirse en el Portal de Administración.
También puedes abrir el *business process* desde la página de configuración de la producción. La siguiente imagen muestra el procedimiento.

Iconos como .png) en este editor se llaman actividades, y las que están marcadas como son actividades que pueden invocar otros componentes.
Este símbolo.png) indica que se devolverá un mensaje de respuesta (es decir, se realizará una llamada sincronizada). La actividad se ajusta de forma predeterminada a la configuración de la llamada no sincronizada, que puede cambiarse según sea necesario.
Ahora observemos los *business processes*, que son componentes que se invocan al recibir un mensaje de solicitud, así como las *business operations*.
En la muestra, el mensaje de solicitud: Se pone en marcha cuando recibe un Start.Request y no devuelve un mensaje de respuesta.

En el *business process*, los mensajes aparecen en varias situaciones.
Mensajes de solicitud que se envían a los business processes.
Mensaje de solicitud (más un mensaje de respuesta) que se envía cuando se llama a otro componente usando la actividad.
En el Editor de Business Processes, los nombres de los objetos que almacenan mensajes están claramente separados para poder ver qué mensaje se envió desde qué destino.

* solicitud(requisitos básicos)
El mensaje que activó el inicio del business process, en nuestro ejemplo, es Start.Request (el mensaje que se debe especificar en la configuración de la Solicitud en la pestaña Contexto dentro del Editor de Business Processes)
* respuesta(respuesta básica)
Mensaje de respuesta para devolver a la persona que llama al business process (no se utiliza en el ejemplo) (mensaje que se debe especificar en la configuración de la respuesta que aparece en la pestaña Contexto en el Editor de Business Processes)
* callrequest(mensaje de solicitud)
Mensaje de solicitud que se envía al llamar al componente determinado por la actividad.
* callresponse(mensaje de respuesta)
Mensaje de respuesta devuelto desde el componente especificado por la actividad.
**callrequest y callresponse son objetos que se eliminarán cuando se complete el procesamiento de llamada de la actividad.** Todos los demás objetos no desaparecerán hasta que finalice el *business process*.
Ahora se presenta el problema cuando desaparece callresponse.
Esto es porque, como se puede ver en este ejemplo, **Cuando se llama a un componente, si se quiere utilizar el resultado de la respuesta de un componente llamado previamente, se perderá el mensaje de respuesta, y se borrará la información que se iba a utilizar en el siguiente componente.**
Es un problema 😓
¿Qué deberíamos hacer?・・・・・
En este caso, se puede utilizar el objeto de contexto.
El objeto de contexto, al igual que la solicitud/respuesta, es un objeto que sobrevive hasta el final del business process.
Además, como el contexto es un objeto genérico, se puede definir en el editor de proceso.
Además del contexto, también se puede utilizar el objeto de respuesta si tiene una propiedad que coincida con lo que guarda la información heredada.
Ahora, vamos a repasar los pasos de nuevo.

El mensaje de respuesta en el globo azul claro: Start.Response es un objeto que se eliminará cuando termine el proceso.
Como queremos utilizar el mensaje de respuesta (Start.Response) que contiene la información meteorológica como el mensaje que se enviará a la siguiente [Business Operation para la actualización de la base de datos], tenemos que implementar el objeto de contexto de tal forma que todos los valores de la propiedad del mensaje de respuesta (Start.Response) se puedan asignar a él.
Entonces, ¿cuál es la configuración para la propiedad de contexto?
Las propiedades se definen en "Context Properties" en la pestaña Context del Editor de business processes.
En este caso, nos gustaría guardar todas las propiedades del mensaje de respuesta (Start.Response) en el objeto de contexto. Por lo tanto, la especificación del tipo de propiedad se establece en Start.Response.

A continuación, consulta la configuración en la actividad.

Los mensajes de solicitud y de respuesta tienen un botón llamado ○○ Builder.
Al hacer clic en este botón se iniciará un editor de líneas que permite especificar lo que se quiere registrar en las propiedades de cada mensaje.

Después de esto, la *business operation* para solicitar una actualización de la base de datos (Start.SQLInsertOperation o Start.InsertOperation) se llama de la misma manera con la actividad, y todo estará listo.
(Para más información, consulta Configuring .png) para Business Processes).
Cuando se haya completado la verificación, se podrá probar. El método de prueba es el mismo que se utiliza para probar las business operations (consulta este artículo).
El seguimiento después de la prueba es el siguiente:

Como el business process es el coordinador, pudimos ver que invocaba de forma secuencial los componentes definidos, lo que mantiene la ejecución sincronizada.
Nota 1: Este ejemplo solo se refiere a la actividad sobre las llamadas, pero hay otras actividades, como la transformación de datos.
Nota 2: Los business processes creados únicamente por ObjectScript, distintos al Editor de Business Processes, se heredan de la clase Ens.BusinessProcess. Si se crea en el Editor de Business Processes, se hereda de la clase Ens.BusinessProcessBPL.
El business process es el coordinador del proceso de integración del sistema.El Editor de Business Processes ofrece los siguientes tipos de variables para los mensajes (request/response/callrequest/callreponse/context).Un business process creado con el Editor de Business Processes puede funcionar de forma que no retrase otros mensajes, incluso si hay sincronización en la llamada del componente.
En el próximo artículo, mostraré finalmente cómo desarrollar el último componente: los *business services*.
Anuncio
Esther Sanchez · 17 ene, 2023
¡Hola desarrolladores!
Os invitamos a un nuevo webinar en español: "Validación de perfiles FHIR con InterSystems IRIS for Health", el jueves 2 de febrero, a las 3:00 PM (CET).
El webinar está dirigido a desarrolladores y emprendedores.
Durante el webinar, vamos a armar un servidor FHIR y repositorio. Además, vamos a añadir un perfil local con sus extensiones para validar recursos sobre esta guía. Lo vamos a realizar utilizando InterSystems IRIS, el validador de FHIR (Java) y SUSHI.
Con estas herramientas, podemos contar con lo necesario para que puedas validar tus perfiles antes de enviarlos a un repositorio central y además probar tus aplicaciones FHIR consumiendo estos recursos que quedan almacenados en el Repositorio FHIR de InterSystems IRIS for Health.
¡Os esperamos!
🗣 Ponente: @Ariel.Arias , Sales Engineer en InterSystems Chile.
➡️ Podéis registraros aquí >> Este jueves es el webinar. ¿Os habéis registrado ya? ✍️ Dentro de poco es el webinar... ¡Ya hay más de 50 personas inscritas! Y hay hueco para más, así que animaos lo que faltáis por inscribiros.
Os recuerdo que durante el webinar podéis hacer preguntas en el chat disponible para ello. Y al terminar el webinar, Ariel responderá a todas las preguntas.
¡Nos vemos pronto!