Limpiar filtro
Anuncio
Esther Sanchez · 17 mayo, 2022
¡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
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
¡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
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
¡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 Gladkov · 27 mar, 2023
¡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
¡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
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
¡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
¡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
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 >>
Anuncio
Sergio Farago · 16 abr, 2025
Hola, desarrolladores:
¡Muchas gracias por formar parte del Ecosistema de la Comunidad de Desarrolladores de InterSystems un año más! Nos encanta que participéis en la vida de la Comunidad de Desarrolladores, Open Exchange, Global Masters y el Portal de Ideas.
Nos gustaría saber cómo os sentís con respecto a nuestros portales. Por favor, tomad un momento para contarnos qué pensáis y qué se podría mejorar:
👉 Encuesta Anual del Ecosistema de Desarrolladores de InterSystems 2025 👈
Nota: La encuesta os llevará menos de 10 minutos en completarla.
Vuestros comentarios también son bienvenidos en la sección de comentarios de esta publicación.
¡Estamos deseando conocer vuestras opiniones! 😉
Anuncio
Sergio Farago · 16 mayo, 2025
Hola comunidad,Nos complace anunciar que ya tenéis una lista preliminar de sesiones disponible para que la reviséis con calma mientras esperáis el evento Ready 2025.
En InterSystems READY 2025 estamos planificando más de 60 sesiones individuales. Tenemos sesiones para todos, sobre una amplia variedad de temas y tecnologías.
Todas las sesiones están divididas en 8 categorías según los puntos de interés:
Poner la IA en acción
Transformar los planes de salud
Impulsar el impacto del producto
Conectar los datos de salud
Seguro. Rápido. Escalable. Robusto.
Desarrollar soluciones innovadoras
Maximizar vuestra arquitectura de datos
Aprovechar al máximo la nube
Todavía estamos ultimando las descripciones y el calendario de las sesiones. ¡Permaneced atentos para más actualizaciones e información muy pronto!
Comentarios
Admin GlobalMasters · 7 jul, 2025
¿Cómo fue vuestra experiencia en READY?
Hemos preparado un cartón de bingo: echad un vistazo y comprobad cuántas casillas podéis marcar.Tachad las que coincidan con vuestra experiencia o enumeradlas en los comentarios.Y si ocurrió algo memorable que no está en el cartón, ¡nos encantaría saberlo! ✨
Elementos del bingo:
Participasteis en el torneo de golf o en el partido de fútbol
Descubristeis una función que no sabíais que existía
Asististeis a un taller práctico el domingo
Aprendisteis algo nuevo
Tuvisteis una reunión individual con un experto de InterSystems
Asististeis al menos a una demo del Tech Exchange
Contestasteis correctamente las 5 preguntas del quiz (en el stand de Developer Community)
Hicisteis un examen de certificación gratuito
Girasteis la Rueda de la Fortuna en el stand de Developer Community
Asististeis a las ponencias principales y a las sesiones de la tarde
Conocisteis a alguien nuevo / hicisteis una nueva conexión
Conocisteis a otro miembro de la Developer Community
¿Cuántos de los 12 pudisteis marcar?Copiad los que completasteis en vuestra respuesta, ¡nos da curiosidad saber qué actividades fueron las más populares! 🤩
Artículo
Jose-Tomas Salvador · 18 jul, 2025
En los hackatones en los que participó InterSystems y en los que dimos soporte, muchos estudiantes preguntaban cómo podían hacer para que todos los miembros de su equipo usaran la misma base de datos IRIS que habían levantado en un contenedor. Sugerí usar *ngrok* para exponer su instancia local de IRIS y me di cuenta de que no tenemos documentación al respecto. Por eso pensé que sería una gran idea dar a conocer esta técnica tan útil para mejorar la colaboración durante el desarrollo y las pruebas.
## Guía paso a paso para exponer InterSystems IRIS con ngrok
Esta guía os llevará a través del proceso de exponer vuestra instancia local de InterSystems IRIS utilizando *ngrok*. Seguid estos pasos para empezar rápidamente.
### Paso 1: Configurar vuestro contenedor de IRIS
1. **Instalad Docker**: Aseguraos de que Docker esté instalado en vuestra máquina.
2. **Iniciad el Contenedor de IRIS**: Usad el siguiente comando para iniciar un contenedor de InterSystems IRIS:
```bash
docker run --name iris -d --publish 52773:52773 containers.intersystems.com/intersystems/iris-community:latest
```
Este comando descarga la última versión de IRIS Community Edition y la ejecuta en el puerto 52773.
### Paso 2: Instalad ngrok
1. **Descargad ngrok**: Id a la [página web de ngrok](https://ngrok.com/download) y descargad la versión adecuada para vuestro sistema operativo.
2. **Instalad ngrok**:
- Para **MacOS**: Usad Homebrew:
```bash
brew install ngrok/ngrok/ngrok
```
- Para **Windows**: Usad Chocolatey:
```bash
choco install ngrok
```
- Para **Linux**: seguid los pasos de instalación en la web de ngrok
### Paso 3: Configurad ngrok
1. **Autenticar ngrok**: Después de instalarlo, necesitáis autenticar vuestra cuenta de ngrok. Ejecutad el siguiente comando:
```bash
ngrok config add-authtoken YOUR_AUTHTOKEN
```
Sustituid `YOUR_AUTHTOKEN` por el token real que encontráis en el panel de ngrok.
### Paso 4: Iniciad el Tunnel
1. **Exponed vuestra instancia de IRIS**: Ejecutad este comando para crear un túnel hacia vuestra instancia local de IRIS:
```bash
ngrok http 52773
```
2. **Acceded a la URL pública**: Acceded a la URL pública: Tras ejecutar el comando, ngrok os proporcionará una URL pública (por ejemplo, https://abc123.ngrok.io). Cualquiera podrá acceder a esta URL desde internet.
### Paso 5: Compartid acceso
- Compartid la URL pública con vuestros compañeros o colaboradores para que puedan acceder a la base de datos IRIS que está ejecutándose en vuestra máquina local.
## Buenas Prácticas
- **Seguidad**: Implementar autenticaión y autorización para tu instancia de IRIS para proteger datos sensibles.
- **Uso temporal**: Recordad que *ngrok* está pensado principalmente para desarrollo y pruebas; evitad usarlo en entornos de producción.
- **Monitorización de conexiones**: Vigilad el panel de ngrok para consultar estadísticas de conexión y posibles problemas.
## Conclusión
Exponer vuestro contenedor de InterSystems IRIS usando *ngrok* es un proceso sencillo que mejora la colaboración durante el desarrollo. Siguiendo esta guía paso a paso, podréis hacer que vuestra base de datos local sea accesible para el equipo, facilitando un mejor trabajo en equipo e innovación. Siempre priorizad la seguridad al exponer servicios locales, ¡y disfrutad de un desarrollo fluido con IRIS y *ngrok*!