Buscar

Limpiar filtro
Artículo
Ricardo Paiva · 18 feb, 2022

[InterSystems IRIS por primera vez] Interoperabilidad: Mensaje

**Este artículo es una continuación de esta publicación**. En ese artículo revisamos los contenidos de la producción. Ejecutamos el código de muestra y revisamos el contenido de los mensajes que fluyen en la producción en la página de Visual Trace. En este artículo revisaremos el concepto y la definición de los **mensajes** que se utilizan para enviar y recibir datos entre componentes desde el contenido de desarrollo necesario para la integración del sistema. * Producción [ publicación anterior ] * Mensaje * Componentes * Business Services * Business Processes * Business Operations Antes de crear un mensaje, vamos a revisar el caso de estudio. > Una empresa gestiona una tienda online y está cambiando el orden en que se muestra la información de los productos, para que coincida con las estaciones del año.Sin embargo, algunos artículos se venden bien independientemente de la estación del año, mientras otros se venden en momentos inesperados, lo que no coincide con la regla actual de cambiar el orden.Por lo tanto, estudiamos la posibilidad de cambiar el orden para que coincida con la temperatura del día en lugar de con la estación del año. Era necesario saber la temperatura de los productos adquiridos en ese momento. Como se dispone de una API web externa para consultar la información meteorológica, planeamos recopilar la información meteorológica en el momento de la compra y registrarla en la base de datos. En este caso, puedes observar lo siguiente: La información que se recibe del exterior es el "nombre del producto comprado y el nombre de la ciudad". La información que se envía desde IRIS a un sistema externo para solicitar el procesamiento es el "nombre de la ciudad". El resultado de este proceso será la "información meteorológica" para la ciudad que se utilizará como entrada. ![imagen](/sites/default/files/inline/images/image1128.png) A partir de este caso de estudio, implementaremos los componentes necesarios para la integración del sistema. Pero antes, para ejecutar los componentes, es necesario enviar y recibir mensajes, que son datos transmidos; y para utilizar los mensajes, es necesario definir la clase de mensajes. Una clase de mensajes se diseña para considerar **qué información (es decir, mensajes) debe enviarse y recibirse para que el componente se ejecute.** En este proceso, necesitamos estos dos tipos de información: A) El nombre de la ciudad para enviar a una API web externa y así obtener la información meteorológica. B) La información meteorológica y el nombre del producto adquirido para su registro en la base de datos. El **nombre de la ciudad** en A) y el **nombre del producto comprado** en B) pueden incluirse en la información de entrada en IRIS. La información meteorológica en B) puede recuperarse de la información de respuesta de una API web externa. A continuación se muestra un diagrama que considera qué información sería necesaria para enviar y recibir cada componente a partir de los datos disponibles. La **primera línea** en los **globos amarillos** describe el **nombre de la clase de mensajes**, y a partir de la segunda línea se indica lo que se debe establecer en las propiedades. ![imagen](/sites/default/files/inline/images/image1068jp.png) En el código de ejemplo, hay tres tipos de **mensajes**: Start.Request(Mensaje de solicitud)Se utiliza para enviar el nombre del producto comprado y la ciudad para adquirir la información meteorológica. Start.Response(Mensaje de respuesta)Se utiliza para devolver los resultados de las operaciones (información meteorológica) para obtener información meteorológica. Start.InsertRequest(Mensaje de solicitud) Se utiliza para enviar la información meteorológica y el nombre de los productos comprados para el registro en la base de datos. Los mensajes se especifican en una superclase, Request message, y los Response messages derivan de **Ens.Request** y **Ens.Response**, respectivamente. El siguiente es un ejemplo de la definición del mensaje de solicitud Start.Request. ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1069).png) Este es un ejemplo para la definición del mensaje de respuesta. ![](https://community.intersystems.com/sites/default/files/inline/images/images/image(1075).png) El mensaje de solicitud, Start.InsertRequest que se enviará con la solicitud de registro en la base de datos es el siguiente: (Planeamos establecer la propiedad WeatherInfo con la información de Start.Response, que se devolverá después de obtener la información meteorológica). ![](https://jp.community.intersystems.com/sites/default/files/inline/images/images/image(1076).png) Si quieres crearlo en Studio, también puedes utilizar el Asistente para Crear Mensajes. Referencia) Pasos para crear una clase de respuesta en Studio. La clave hasta ahora es Una clase de mensajes se diseña con la idea de "qué información (es decir, mensajes) debe enviarse y recibirse" para que el componente FUNCIONE. Cuando la clase de mensajes (que es la información que dirige cada componente) se implementa, el siguiente paso es crear una clase para el componente.
Artículo
Yuri Marx Pereira Gomes · 23 feb, 2022

Bloques de Construcción de InterSystems IRIS en la Arquitectura TOGAF

![](/sites/default/files/inline/images/images/image(2992).png) **TOGAF** son las siglas de **The Open Group Architecture Framework** (Esquema de Arquitectura del Open Group). Ofrece un enfoque para planificar, diseñar, implementar, desplegar y controlar proyectos de AE (Arquitectura Empresarial). En otras palabras, ofrece un marco de alto nivel para el desarrollo de software empresarial. TOGAF ayuda a organizar el proceso de desarrollo a través de un enfoque sistemático dirigido a reducir los errores, mantener los plazos, mantenerse dentro del presupuesto y alinear la TI con las unidades de negocio para producir resultados de calidad. En un esquema TOGAF se contemplan cuatro **dominios**: de Negocios, de Aplicaciones, de Datos y de Tecnología. TOGAF tiene un concepto llamado **Building Blocks** (Bloques de Construcción). Es cualquier elemento que se puede utilizar, reutilizar y ejecutar para aportar valor y nuevas funciones al negocio. En la imagen superior, os muestro los principales Bloques de Construcción de IRIS para crear aplicaciones fantásticas. Para saber más sobre TOGAF y los Bloques de Construcción, podéis consultar .
Anuncio
David Reche · 16 mar, 2022

Ya está disponible InterSystems Kubernetes Operator 3.3

La versión 3.3 de InterSystems Kubernetes Operator (IKO) ya está disponible a través de la página de descargas del Centro de Soporte Internacional (WRC) y del Registro de Contenedores de InterSystems. IKO simplifica el trabajo de InterSystems IRIS e InterSystems IRIS for Health en Kubernetes, al ofrecer una sencilla definición del recurso irisCluster. Consulta la documentación para conocer la lista detallada de funcionalidades, incluyendo sharding sencillo, mirroring y configuración de ECP. A destacar en IKO 3.3: Soporte a las versiones 2021.2 y 2022.1 de InterSystems IRIS & IRIS for Health Supporte de Kuberentes 1.21 Implementación de las configuraciones comunes de System Alerting and Monitoring (SAM) como parte de irisCluster InterSystems API Manager (IAM) ahora también puede ser implementado y gestionado como parte de irisCluster Etiquetado automático del lado activo de la pareja del mirror, de manera que un servicio siempre apunta al miembro del mirror activo
Anuncio
Jose-Tomas Salvador · 11 mayo, 2022

[Video] Utilizando Python para conectar a InterSystems IRIS

Hola Comunidad, mira cómo puedes desarrollar en Python y conectar a InterSystems IRIS® Data Platform con PyODBC y Native API: ⏯ Utilizando Python para conectar a InterSystems IRIS Disfrútalo en el Canal de InterSystems para Desarrolladores en YouTube y mantente al día!
Anuncio
Esther Sanchez · 17 mayo, 2022

[WEBINAR] Novedades de InterSystems IRIS 2022.1

¡Hola desarrolladores! Os invitamos a todos al webinar "Novedades de InterSystems IRIS 2022.1 / What's New in InterSystems IRIS 2022.1"! Fecha: Martes, 24 mayo, 2022Hora: 11:00 AM (EDT) / 17:00 PM (CEST)Nota: el webinar será en inglés Durante el webinar, mostraremos algunas de las nuevas funcionalidades de InterSystems IRIS e InterSystems IRIS for Health, incluyendo: Soporte completo al desarrollo de aplicaciones usando Python Mejoras en velocidad y escalabilidad, incluyendo Adaptive SQL y SQL Loader Soporte a Apache Kafka para casos de uso en tiempo real Nuevos servicios en la nube y soporte extendido para adaptadores cloud y Kubernetes Soporte a sistemas operativos nuevos y actualizados y a frameworks de clientes Se podrán hacer preguntas al finalizar el webinar. Ponentes:🗣 @Benjamin.DeBoe, Product Manager, InterSystems🗣 @Robert.Kuszewski, Product Manager, Developer Experience, InterSystems ➡️ Podéis registraros aquí ¡Hoy es el webinar! Si quieres conocer lo último en tecnología y las nuevas funcionalidades de InterSystems IRIS, conéctate a las 17:00 PM (CEST), hora peninsular española. ¡Os esperamos!
Artículo
Ricardo Paiva · 9 jun, 2022

Autenticación de usuarios de InterSystems IRIS mediante LDAP

Hola desarrolladores, Estoy seguro de que os habéis encontrado esta situación: necesito autenticar los usuarios - que pueden acceder a la instancia de InterSystems IRIS (for Health) o Health Connect – mediante LDAP (Active Directory u OpenLDAP). En este artículos quiero compartir con vosotros lo sencillo que es la autenticación/integración mediante LDAP. Crearemos una configuración mínima de manera a autenticar los usuarios mediante consulta a OpenLDAP. Para ello usaremos 2 contenedores – uno con OpenLDAP y otro con InterSystems IRIS. Empecemos con OpenLDAP. Usaremos una imagen Docker ya cargada con un dominio y datos de prueba. Podéis mirarlo en github: https://github.com/rroemhild/docker-test-openldap Para lanzar el contenedor habrá que ejecutar los siguientes comandos: $ docker pull rroemhild/test-openldap $ docker run --rm -p 10389:10389 -p 10636:10636 rroemhild/test-openldap Ahora nos toca lanzar la instancia de InterSystems IRIS. Para ello habrá que ejecutar el siguiente comando: docker run --rm --name irisLDAP -d --publish 9091:1972 --publish 9092:52773 store/intersystems/iris-community:2021.2.0.649.0 --check-caps false Ahora habrá que configurar InterSystems IRIS de manera a integrarse con LDAP. Antes de ello se impone dejar claro como lo vamos hacer: La conexión a OpneLDAP se hará de modo no cifrado; Usaremos los atributos ya definidos en OpenLDAP. Debe quedar claro que la manera idónea de hacer esta integración seria mediante conexiones cifradas y creando nuevos grupos en OpenLDAP de manera a controlar los usuarios que se pueden conectar a la instancia de InterSystems IRIS – y en qué condiciones. Habilitar LDAP para la instancia Ir a: Sistema > Gestión de seguridad > Authentication/Web Session Options - (Configuración de seguridad) y activar la autenticación LDAP. Crear una configuración LDAP Para una configuración mínima de LDAP vamos usar los datos disponibles en nuestro servidor LDAP (debidamente documentado en https://github.com/rroemhild/docker-test-openldap). Necesitaremos los siguientes datos: Usuario LDAP para hacer las búsquedas en el directorio - "cn=admin,dc=planetexpress,dc=com" Credenciales del usuario que hace las búsquedas – “GoodNewsEveryone” Nombre del host LDAP - "XXX.XXX.XXX.XXX:10389" DN basado en LDAP que debe utilizarse para búsquedas - "dc=planetexpress,dc=com" Atributo de búsqueda único LDAP – uid (en el caso de ActiveDirectory, usaremos sAMAccountname) En nuestra configuración - y por sencillez - no crearemos nuevos grupos en la AD, usaremos uno de los atributos ya existentes - 'ou'. Sin embargo, se recomienda la creación de los grupos adecuados tal y como sugiere la documentación: role requerido para el login. La configuración necesaria es la siguiente: Testar la configuración LDAP Ir a: Sistema > Gestión de seguridad > Configuraciones de seguridad LDAP/Kerberos, darle a ‘Probar autenticación LDAP’. Teniendo en cuenta los usuarios dados de alta en la AD, habrá que elegir uno para la prueba. En nuestro caso, usaremos el usuario ‘Philip J. Fry’. Para ello usaremos: Nombre de usuario - fry@planetexpress.com Contraseña – fry Resultados de la prueba … User fry authenticated Retrieving user fry attributes Full name: Fry … Using roles from Attribute ou … Testing authentication performance Authenticated user fry 100 times in 3.306638 seconds - 30.242/sec Test completed Activar LDAP para servicios y aplicaciones Habrá que activar los servicio que queremos autenticar mediante LDAP. En este caso, y dado que nos importa la autenticación de los usuarios al acceder al Portal (y al terminal), habremos de activar los servicios %Service_Login y %Service_Terminal. De igual manera hemos de activar el LDAP en las aplicaciones que procedan. En nuestro caso, hemos de activar LDAP en /csp/sys. Dominio de seguridad por defecto En los casos donde haya mas de un dominio de seguridad registrado hemos de elegir el que vamos usar por defecto. Así hemos de acceder a: Sistema > Gestión de seguridad > Parámetros de seguridad del sistema - (Configuración de seguridad) y selecionar demonio que proceda - para nosotros sera planetexpress.com. Crear el role de Login La verdad, y como hemos dicho arriba, se recomienda la creación de los grupos adecuados en la AD. Por sencillez, en este articulo no lo hacemos y basamos la identificación del role del usuario en él atributo 'ou'. Aquí podemos comprobar que nuestro usuario de prueba (fry) tiene definido en su atributo 'ou' el role - Delivering Crew. Desta manera hemos de crear un nuevo role con el mismo nombre - Delivering Crew. Le asignaremos los privilégios que procedan - para nuestro ejemplo, le asignaremos el perfil de operador de interoperabilidad. Estos son los pasos necesarios y suficientes para integrar InterSystems IRIS con un servidor LDAP. Se recomienda la lectura detenida de la documentación aquí.
Anuncio
Esther Sanchez · 7 jun, 2022

Ganadores del 2º Gran Premio de Programación de InterSystems

¡Hola Comunidad! Estamos encantados de anunciar los ganadores del 2º Gran Premio de Programación de InterSystems. ¡Este Gran Premio ha sido un éxito absoluto! Y para mostrar nuestro agradecimiento a nuestros increíbles concursantes, ¡hemos doblado la cuantía de los premios a los finalistas (puestos 4-20)! Estos son los ganadores y sus aplicaciones... Nominación de los expertos 🥇 Primer puesto y $7 000 para Water Conditions in Europe, creada por @Evgeniy.Potapov 🥈 Segundo puesto y $5,000 para CloudStudio, creada por @Sean.Connelly 🥉 Tercer puesto y $1,500 para iris-megazord, creada por @José.Pereira, @Henrique.GonçalvesDias y @Henry.HamonPereira 🥉 Tercer puesto y $1,500 para iris-fhir-client, creada por @Muhammad.Waseem Más ganadores: 🏅 $200 para Docker InterSystems Extension, creada por @Dmitry.Maslennikov 🏅 $200 para FHIR Patient Viewer, creada por @Dan.Berges 🏅 $200 para test-data, creada por @Oliver.Wilms 🏅 $200 para webterminal-vscode, creada por @John.Murray 🏅 $200 para ObjectScript-Syntax-For-GitLab, creada por @Lorenzo.Scalese 🏅 $200 para iris-mail, creada por @Oliver.Wilms 🏅 $200 para FHIR Pseudonymization Proxy, creada por @Marcus.Wurlitzer 🏅 $200 para Disease Predictor, creada por @Yuri.Gomes 🏅 $200 para M-N-Contests, creada por @Robert.Cemper1003 🏅 $200 para FIT REST Operation Framework, creada por @Craig.Regester 🏅 $200 para cryptocurrency-rate-forecasting, creada por @Oleh.Dontsov 🏅 $200 para apptools-infochest, creada por @MikhailenkoSergey 🏅 $200 para IRIS import manager, creada por @Oleh.Dontsov 🏅 $200 para CrossECP-IRIS, creada por @Robert.Cemper1003 🏅 $200 para production-monitor, creada por @Oliver.Wilms 🏅 $200 para ESKLP, creada por @Aleksandr.Kalinin6636 🏅 $200 para db-migration-using-SQLgateway, creada por @Robert.Cemper1003 🏅 $200 para apptools-admin, creada por @MikhailenkoSergey Nominación de la Comunidad 🥇 Primer puesto y $3,000 para iris-megazord, creada por @José.Pereira, @Henrique.GonçalvesDias y @Henry.HamonPereira 🥈 Segundo puesto y $2,000 para iris-fhir-client, creada por @Muhammad.Waseem 🥉 Tercer puesto y $1,000 para Docker InterSystems Extension, creada por @Dmitry.Maslennikov ¡Muchas gracias a todos! ¡Y enhorabuena a todos los participantes! Valoramos mucho el trabajo y esfuerzo dedicado a participar en el concurso y os agradecemos mucho el tiempo que le habéis dedicado. 🙌 ¡Nos vemos en el próximo concurso!
Artículo
Muhammad Waseem · 19 jul, 2022

Índices únicos y valores nulos en InterSystems IRIS

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.Node; Property Name As %String [ Required ]; Index ParentAndName On (Parent, Name) [ Unique ]; Storage Default { <Data name="NodeDefaultData"> <Value name="1"> <Value>%%CLASSNAME</Value> </Value> <Value name="2"> <Value>Parent</Value> </Value> <Value name="3"> <Value>Name</Value> </Value> </Data> <DataLocation>^DC.Demo.NodeD</DataLocation> <DefaultData>NodeDefaultData</DefaultData> <IdLocation>^DC.Demo.NodeD</IdLocation> <IndexLocation>^DC.Demo.NodeI</IndexLocation> <StreamLocation>^DC.Demo.NodeS</StreamLocation> <Type>%Storage.Persistent</Type> } } ¡Y aquí estamos! Pero hay un problema: tal y como está, esta implementación permite que varios nodos raíz tengan el mismo nombre. ¿Por qué? Porque Parent no es (y no debería ser) una propiedad requerida, e IRIS no trata "nulo" como un valor distinto en índices únicos. Algunas bases de datos (por ejemplo, SQL Server) lo hacen, pero el estándar SQL dice que no es correcto [cita requerida; vi esto en StackOverflow en alguna parte, pero eso realmente no cuenta; echa un vistazo al comentario de @Daniel.Pasco en esta publicación sobre esto y la distinción entre índices y restricciones]. La forma de evitar esto es definir una propiedad calculada que se establezca en un valor no nulo si la propiedad a la que se hace referencia es nula y luego poner el índice único en esa propiedad. Por ejemplo: Property Parent As DC.Demo.Node; Property Name As %String [ Required ]; Property ParentOrNUL As %String [ Calculated, Required, SqlComputeCode = {Set {*} = $Case({Parent},"":$c(0),:{Parent})}, SqlComputed ]; Index ParentAndName On (ParentOrNUL, Name) [ Unique ]; Esto también permite pasar $c(0) a ParentAndNameOpen/Delete/Exists para identificar un nodo raíz únicamente por padre (no hay uno) y nombre. Como ejemplo motivador en el que este comportamiento es muy útil, consulta https://github.com/intersystems/isc-rest/blob/main/cls/_pkg/isc/rest/resourceMap.cls. Muchas filas pueden tener el mismo conjunto de valores para dos campos (DispatchOrResourceClass y ResourceName), pero queremos que, como máximo, uno de ellos se trate como el "predeterminado", y un índice único funciona perfectamente para hacer cumplir esto si decimos que el indicador "predeterminado" se puede establecer en 1 o nulo y después poner un índice único en él y los otros dos campos.
Anuncio
Esther Sanchez · 22 ago, 2022

[Video] Transforma los mensajes "Healthcare" en integraciones de InterSystems

¡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 ¡Subscríbete a InterSystems Developers YouTube channel y permanece atento!
Artículo
Maria Gladkova · 27 mar, 2023

Cómo configurar VS Code para trabajar con las tecnologías de InterSystems

¡Hola a todos! En este artículo, me gustaría revisar las extensiones de VS Code que uso para trabajar con InterSystems y que hacen mi trabajo mucho más cómodo. Estoy segura de que este artículo será útil para aquellos que acaban de empezar su viaje aprendiendo las tecnologías de InterSystems. Y también espero que pueda resultar útil para los desarrolladores más experimentados, con muchos años de experiencia, y les descubra nuevas posibilidades cuando usen VS Code para desarrollo. Os recomiendo a todos los que trabajáis con InterSystems que instaléis estas extensiones y en este artículo os mostraré cómo usar algunas de ellas. Podéis leer más sobre las funcionalidades y uso de cada extensión en la sección "Extensions" de VS Code. Ahí también podéis descargar, actualizar y desinstalar extensiones: Después de su instalación, los iconos de extensión aparecen a un lado o debajo del editor de código. Extensiones obligatorias Creo que tiene sentido empezar nuestro viaje con estas extensiones básicas, sin las que trabajar con InterSystems en VS Code resulta imposible. La extensión InterSystems Server Manager para VS Code ayuda a especificar conexiones con servidores. La extensión InterSystems ObjectScript para VS Code ayuda a escribir y compilar archivos de código fuente. La extensión InterSystems Language Server para VS Code ofrece una implementación del lenguaje para ObjectScript, permitiendo coloreado, auto-completado de código, sugerencias, y mucho más. Juntas, estas extensiones ofrecen a los desarrolladores una forma eficiente de crear, probar e implementar aplicaciones construidas con tecnología InterSystems. Extensiones adicionales Además de las necesarias extensiones básicas, VS Code ofrece muchas otras extensiones. Se puede escribir el código sin ellas, pero usándolas el desarrollo es más eficiente al utilizar cualquier conjunto de tecnologías, incluyendo las de InterSystems. Voy a describir algunas de ellas, que me parece que son imprescindibles. La extensión Docker hace un poco más sencilla la gestión de proyectos dockerizados. Se puede generar automáticamente un Dockerfile para proyectos, ejecutar imágenes y gestionar contenedores. SQLTools Driver para InterSystems IRIS y SqlTools - son dos extensiones muy útiles que funcionan juntas. Al usarlas, se pueden crear y ejecutar las consultas SQL de la base de datos en VS Code sin tener que ir al Portal de Gestión y realizar consultas SQL para interactuar con el contenido de la tabla allí. Hoy, es difícil imaginar desarrollar un proyecto sin usar control de versiones. La mayoría de las veces se utiliza Git, y Visual Studio Code tiene un soporte mínimo para Git de forma predetermindada. Pero si eso no es suficiente para vosotros, echad un vistazo a estas dos extensiones: Git Graph - muestra ramas y su estado esquemáticamente. Esto es útil en situaciones en las que se necesita entender rápidamente el estado de las ramas, por ejemplo, cuando se fusionan (merge) Git Lens - permite ver el historial de cambios de la línea resaltada y su autor. ¡Es indispensable para trabajo en equipo! EditorConfig - una extensión para mejorar la apariencia del código. Requiere escribir el fichero .editorconfig, en el que se puede especificar cualquier configuración de formato de código. Es importante destacar que por defecto dicha funcionalidad puede ser implementada por la extensión InterSystems Language Server para VS Code. Para aplicar formato de código ObjectScript estándar en VS Code hay que usar la combinación de teclas: en Windows - [Shift + Alt + F], en Mac - [Shift + Option + F], en Ubuntu - [Ctrl + Shift + I]. Pero cuando se usa el fichero .editorconfig puedes especificar tu propio formato de código para diferentes ficheros dentro del proyecto. En este artículo, sólo he revisado las extensiones que yo uso. Así que estaría muy agradecida si me escribierais en los comentarios qué otras extensiones se pueden usar para hacer más sencillo el desarrollo. Y así este artículo será aún más útil para todos! Muchas gracias.
Artículo
Alberto Fuentes · 10 mayo, 2023

Cómo configurar el servidor FHIR de InterSystems con un solo comando

¡Hola desarrolladores! Se acaba de actualizar la plantilla para desarrollo FHIR de forma que ahora publica el paquete IPM fhir-server que hace que la configuración del servidor FHIR de InterSystems sea una sencilla tarea manual, automática o programática vía un solo comando. Os explico más abajo cómo podéis utilizarlo. TLDR USER>zpm "install fhir-server" Todos los detalles aquí: Configurar el servidor FHIR de InterSystems sin IPM Por supuesto puedes configurar el servidor FHIR de InterSystems sin usar el gestor de paquetes IPM. Estas son las opciones: 1. Configurar un servidor FHIR en la nube con una prueba durante varios días siguiendo estas instrucciones. Esto será un servidor FHIR de InterSystems FHIR en la nube de AWS. 2. Configurar un servidor FHIR de InterSystems ejecutando InterSystems IRIS for Health siguiendo estos pasos. 3. Y también se puedes clonar el repositorio de esta plantilla y ejecutar en un directorio clonado: $ docker-compose up -d para tener el servidor FHIR de InterSystems en marcha en tu equipo. Lo que propongo en este artículo es el punto 2, con el que se pueden saltar todos los pasos manuales y tener el servidor FHIR funcionando en tu equipo tanto en docker como en una instalación nativa. Configurar el servidor FHIR con IPM DESCARGO DE RESPONSABILIDAD - Los pasos descritos más abajo se refieren a una instancia de IRIS for Health recién instalada o para usarse con imágenes docker. El paquete crea un nuevo namespace y una nueva aplicación web, lo que quizá pueda dañar la configuración que se haya establecido antes. IPM significa InterSystems Package manager (antes se llamaba ZPM). Aseguraos de tener instalado el IPM-client. Podéis comprobarlo si ejecutáis el comando zpm en el terminal de IRIS y veis lo siguiente: IRISAPP>zpm ============================================================================= || Welcome to the Package Manager Shell (ZPM). || || Enter q/quit to exit the shell. Enter ?/help to view available commands || ============================================================================= zpm:IRISAPP> Necesitarás IRIS for Health versión 2022.x o posteriores. ¿Cómo ejecutar IRIS for Health en tu equipo? Ejecutar en una instalación local En la página de evaluación de InterSystems descargad la última versión de IRIS for Health adecuada para vuestra plataforma (Windows, Mac, Linux) e instaladla. Instalad IPM. Aquí tenéis un solo comando para hacer la instalación de IPM: USER>zn "%SYS" d ##class(Security.SSLConfigs).Create("z") s r=##class(%Net.HttpRequest).%New(),r.Server="pm.community.intersystems.com",r.SSLConfiguration="z" d r.Get("/packages/zpm/latest/installer"),$system.OBJ.LoadStream(r.HttpResponse.Data,"c") Ejecutar una versión docker Llamad al terminal para lanzarlo: docker run --rm --name iris4h -d --publish 9091:1972 --publish 9092:52773 intersystemsdc/irishealth-community Después, iniciad el terminal: docker exec -it iris4h iris session IRIS Instalar el servidor FHIR Una vez se tiene IRIS ejecutándose, en el terminal de IRIS escribe lo siguiente: USER>zpm "install fhir-server" Esto instalará el servidor FHIR en el namespace FHIRSERVER con parámetros: Set appKey = "/fhir/r4" Set strategyClass = "HS.FHIRServer.Storage.Json.InteractionsStrategy" set metadataPackages = $lb("hl7.fhir.r4.core@4.0.1") Set metadataConfigKey = "HL7v40" La API Rest de FHIR estará disponible en http://yourserver/fhir/r4. También añadirá algunos datos generados. ¿Cómo saber si el servidor está funcionando? Para probarlo en la versión servidor: http://localhost:52773/fhir/r4/metadata Para probarlo en la versión docker: http://localhost:9092/fhir/r4/metadata Este paquete IPM también instala una interfaz sencilla que está disponible en: http://yourserver/fhirUI/FHIRAppDemo.html Y se verá algo parecido a esto (introduciendo patient id=1): ¿Cómo funciona? Puede comprobar lo que se ha instalado con este módulo IPM echando un vistazo al module.xml. Se puede ver que importa el código, instala la aplicación UI sencilla y ejecuta el script post-instalación, que llama al siguiente método. El script en el método realiza la configuración del servidor FHIR. Instalar el servidor FHIR programáticamente También se puede instalar programáticamente a través del siguiente comando: set sc=$zpm("install fhir-server") ¡Feliz desarrollo FHIR!
Artículo
Ramón Rodríguez · 26 feb, 2023

Mi primera experiencia con InterSystems IRIS! (API REST)

Buenas desarrollador! En este artículo te voy a contar mi experiencia y conocimientos en el poco tiempo que llevo utilizando los distintos productos de InterSystems. A parte de contar mis vivencias también veremos como hacer una pequeña API Rest con la que poder hacer un CRUD con la base de datos SQL de InterSystems. Mi historia: Me presento. Soy Ramón, tengo 23 años y acabo de comenzar mi carrera profesional. Agradezco la oportunidad que tengo de expandir mis fronteras en el mundo de la programación, así como también de poder contar con unos compañeros de trabajo magníficos con los que poder aprender más y mejor. Mis comienzos utilizando InterSystems se remontan a finales del año pasado realizando algunas pequeñas integraciones y poco a poco asimilando conceptos básicos de una producción. Antes de esto solo realizaba las formaciones de InterSystems Learning donde aprendí ObjectScript entre otros. Considero que InterSystems tiene una curva de aprendizaje compleja pero una vez comprendes su funcionamiento, te provee de utilidades como el "visor de mensajes" que facilitan tus desarrollos al poder consultar en todo momento el flujo de tus mensajes. También se agradece poder hacer componentes en modo gráfico "BPL" e implementar lógica con las reglas de negocio mediante el editor de reglas. Actualmente quiero poder sacar provecho a la parte de ciencia de datos con python embebido y poder entrenar modelos con instrucciones SQL con IntegratedML. Y esto sería mi resumen, gracias por leer acerca de mí. Y sin mas dilación... Ahora sí, comencemos con la prueba. Para realizar esta práctica crearemos un contenedor en docker con la imagen de irishealt-community:2022 version: '3.6' services: iris: #image: containers.intersystems.com/intersystems/iris-community:2022.1.0.209.0 image: containers.intersystems.com/intersystems/irishealth-community:2022.1.0.209.0 hostname: prueba container_name: prueba ports: - 51773:51773 - 52773:52773 - 53773:53773 - 54773:54773 - 2188:2188 - 1972:1972 - 9980:9980 - 5000:5000 command: - --check-caps false - --password-file /shared/pass.txt volumes: - type: bind source: ./shared # Carpeta en la que se guardará la persistencia de datos target: /shared # Path en el que se monta la carpeta environment: - ISC_DATA_DIRECTORY=/shared/iris Crearemos un archivo yml con ese contenido y una carpeta shared con un pass.txt donde pondremos la contraseña que queramos utilizar para acceder al portal web. Una vez realizado los pasos anteriores, abriremos docker desktop y ejecutaremos el siguiente comando en la terminal (es necesario tener docker desktop abierto o nos dará un problema): Esto nos creará el contenedor. Accederemos al portal web: http://localhost:52773/csp/sys/utilhome.csp y haremos login con superuser y la contraseña que pusimos en pass.txt A continuación crearemos nuestra tabla en SQL. Para ello realizaremos lo siguiente: Iremos a Explorador > SQL Como "curiosidad" tendremos dos opciones para abrirlo, doble click en SQL o click en SQL y después click en el botón "Ir" Código para crear nuestra tabla: CREATE TABLE Prueba.juego ( id_juego VARCHAR(128), nombre VARCHAR(128), precio DECIMAL(10,2), plataformas VARCHAR(128), fecha_lanzamiento VARCHAR(128) ) Insertaremos esa instrucción en el siguiente recuadro "Ejecutar Consulta" y la ejecutaremos. Una vez creada la base de datos crearemos una API Rest para realizar un CRUD con la base de datos: Para crear la API Rest he utilizado el estándar que utiliza mi empresa para desarrollar una producción por lo cual voy ha hacer un escueto resumen para que se entienda el funcionamiento. He creado una producción la cual he llamado PruebaProduction y la he provisto de un servicio web "wsRest", un proceso "Proceso" y para finalizar una operación "Prueba" con un método que ejecuta una SQL embebida para insertar datos en la tabla creada anteriormente. Al servicio le llegará nuestra petición, lo mandará al proceso y este lo redirigirá a la operación donde esta llamará al método. Para probar que funciona lo que he creado utilizaremos Postman para hacer una llamada a nuestro servicio web escuchando en el puerto 9988 y con la siguiente url: localhost:9980/ws/publicarJuego Podremos visualizar el flujo de nuestra petición desde el visor de mensajes. Una manera de abrirlo es pinchar en nuestro servicio y en su menú pinchar en "Ir al visor de mensajes" Una vez ahí buscaremos en los criterios básicos el tipo "Comienzo de sesión" y le daremos al botón Buscar. Para acceder a la traza del mensaje deberemos hacer click en el número de la sesión (marcado con fondo verde). La traza será algo grande y vamos a ver solo el fragmento que nos interesa que es nuestro "POST". Este mensaje lleva lo siguiente: <?xml version="1.0" ?> <!-- type: prueba.msg.PublicarJuegoRequest --> <PublicarJuegoRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://www.w3.org/2001/XMLSchema"> <idJuego>Skyrim</idJuego> <nombre>Skyrim</nombre> <precio>50.5</precio> <plataformas>PC, XBOX, PS</plataformas> <fechaLanzamiento>11/11/2011</fechaLanzamiento> </PublicarJuegoRequest> y devuelve lo mismo una vez comprobado de que se ha creado. El método que se ejecuta en la operación es el siguiente: Class prueba.bo.core.PruebaCore Extends %RegisteredObject { ClassMethod publicarJuego(pRequest As prueba.msg.PublicarJuegoRequest, Output pResponse As prueba.msg.PublicarJuegoResponse, bo As prueba.bo.Prueba) As %Status { #dim sc As %Status = $$$OK set pResponse = ##class(prueba.msg.PublicarJuegoResponse).%New() set pResponse.exito = 1 try { &sql(INSERT INTO Prueba.juego (id_juego, nombre, precio, plataformas, fecha_lanzamiento) VALUES (:pRequest.idJuego, :pRequest.nombre, :pRequest.precio, :pRequest.plataformas, :pRequest.fechaLanzamiento)) if (SQLCODE=0) { set pResponse.idJuego = pRequest.idJuego set pResponse.nombre = pRequest.nombre set pResponse.precio = pRequest.precio set pResponse.plataformas = pRequest.plataformas set pResponse.fechaLanzamiento = pRequest.fechaLanzamiento } } catch (err) { // Si ha ocurrido un error, crear el objeto Status: if (err.%ClassName(1)="common.err.exception") && ($$$ISERR(err.status)) { set sc = err.status } else { set sc = $system.Status.Error(err.Code,err.Name,err.Location,err.InnerException) } set pResponse.exito = 0 set pResponse.trace = ##class(util.Util).generarTraza("Proceso", "Error en crear juego 3: "_$System.Status.GetErrorText(sc)) set sc = $$$OK } quit sc } } Y el mapeo del servicio web será el siguiente: Class prueba.ws.Rest Extends (rest.ws.RestBase, prueba.ws.RestMethods) { XData UrlMap { <Routes> <Route Url="/publicarJuego" Method="POST" Call="publicarJuego"/> </Routes> } } Class prueba.ws.RestMethods Extends rest.ws.RestBase { Method publicarJuego(pInput As %Library.AbstractStream, Output pOutput As %Stream.Object) As %Status { #dim params As %ListOfObjects = ##class(%ListOfObjects).%New() quit ..enviar(pInput, .pOutput, "wsRest", "publicarJuego", "publicarJuego", "prueba.msg", params, 0) } } Ya por último podemos comprobar si en la base de datos se ha insertado el registro y efectivamente así ha sido. Sí, soy consciente de que solo he hecho el método POST, no he creado los métodos PUT, DELETE y GET por no hacer demasiado extenso el artículo. Simplemente tendríamos que crear nuevos métodos a la operación y hacer una SQL para cada método. Estructura del proyecto en VSCode: Aún me queda mucho por aprender!! Gracias por haber leído este artículo hasta el final, espero que te haya gustado y si te ha servido para algo aún mejor. ¡Muchas gracias por publicar el artículo, Ramón! ¡Y mucha suerte en el Concurso de Artículos! Hola Ramón! Bienvenido a la Comunidad... Gracias por compartir!! Interesante artículo, con un caso de uso que es bastante común y que otros seguro aprovechan. La ventaja de ir a través de una BO es que igual que en este caso tu has decidido realizar directamente la inserción vía SQL en IRIS, esa misma BO y toda la lógica de negocio anterior, podría estar dirigida a otra BD externa, que puede ser IRIS o no, e incluso a otra tabla. Es decir, la BO te encapsula el almacenamiento. El Business Process o Business Service que la llama, no sabe ni cómo ni dónde se va a almacenar la información... el BO se encarga y puede cambiar sin afectar al resto. Este desacople nos simplifica muchísimo el trabajo de mantenimiento y evolución de la solución!! Estaría muy bien si pudieras poner tu código en un GitHub y compartirlo junto con el artículo. Seguro que otros lo pueden aprovechar.
Anuncio
Esther Sanchez · 10 mar, 2023

Global Masters: Puntos por vuestras ideas en InterSystems Ideas

¡Hola Comunidad! Desde el pasado 22 de febrero, si publicáis ideas en el Portal InterSystems Ideas, obtendréis puntos en Global Masters! 100 puntos - por publicar ideas. Los puntos se obtienen cuando la idea pase la moderación inicial y tenga el estatus .500 puntos - cuando la idea sea promocionada para su implementación y tenga los estatus o .3000 puntos - cuando la idea sea implementada y tenga los estatus o. Nota: los puntos solo se dan por ideas enviadas a la categoría "InterSystems Products". Así que ya lo sabéis... ¡publicad vuestras increíbles ideas y ganad puntos por ellas! Psss... Si aún no pertenecéis a Global Masters, la plataforma de gamificación de InterSytems, podéis daros de alta aquí usando vuestras credenciales SSO de InterSystems.
Anuncio
Esther Sanchez · 18 jul, 2023

InterSystems Developer Hub, el nuevo portal para los desarrolladores

¡Hola Comunidad! Compartimos con vosotros una fantástica noticia - ya está en marcha InterSystems Developer Hub, el nuevo portal para los desarrolladores de InterSystems. (De momento, solo está disponible en inglés). Allí encontraréis todos los recursos útiles para vuestro trabajo. Todo en un mismo lugar: Formación Documentación La Comunidad de Desarrolladores Open Exchange Echadle un vistazo y contadnos qué os parece. ¡Esperamos vuestros comentarios! sdf sdf @Alex.Kanashevskiy
Anuncio
Sergio Farago · 1 abr, 2025

¡El jueves tenemos webinar! "Conectando sensores con InterSystems IRIS"

Hola a todos... ¡Aún con la resaca del Meetup? Os esperamos en el webinar gratuito que tenemos el jueves a las 16.00 CEST. Jairo nos hará una demostración práctica de algo que conecta InterSystems con deporte y con datos en tiempo real... ¡Preparaos para flipar! Webinar dirigido a Desarrolladores, analistas de integración y todos aquellos interesados en las posibilidades de la tecnología InterSystems :) ¡Os esperamos! 🗣 Ponente: , Jairo Ruiz Sales Engineer en InterSystems Colombia ➡️ Registro >>