#Principiante

0 Seguidores · 94 Publicaciones

La etiqueta de Principiante une los artículos y preguntas para aquellos que apenas comienzan a utilizar InterSystems Data Platform

Anuncio Esther Sanchez · sep 21, 2022

Si no sabes por dónde empezar a aprender ObjectScript... ¡te lo ponemos fácil!

Acabamos de actualizar el curso “Getting Started with InterSystems ObjectScript” ("Introducción a InterSystems ObjectScript") con tres nuevos vídeos de 5 minutos + un ejercicio final para ayudarte a recapitular todo lo que has aprendido.

Contenido del curso:

🤝 Introducción a InterSystems ObjectScript

🤿 Análisis a fondo de los comandos y las funciones

🤔 Entendiendo los tipos de datos y las variables

👨‍💻 Creando una definición de clase

Ya puedes hacer el curso completo aquí:

🎓Getting Started with InterSystems ObjectScript >>🎓
 

Nota.- La formación oficial de InterSystems es en inglés. Si prefieres la formación en español:

1
0 166
Pregunta Yone Moreno · sep 21, 2022

Buenos días,

💭🧱🧑‍💻 Hemos estado indagando y construyendo gracias al enorme apoyo, soporte, y asistencia ofrecida por el siguiente ejemplo:

https://es.community.intersystems.com/post/ejemplo-de-integraci%C3%B3n-…

Y del código de Github de los circuitos de ejemplo para el FIND y el MOVE:

https://github.com/intersystems-ib/iris-dicom-sample

Sería de agradecer si ustedes nos leen y responden a las siguiente cuestiones:

Desarrollando el MOVE, nos hemos encontrado con que en los primeros envíos sí se realiza y obtenemos respuesta:

MOVE

STORE

3
0 208
Artículo Joel Espinoza · oct 28, 2019 5m read

¡Hola a todos!

Hoy instalaremos Jupyter Notebook y vamos a conectarlo con Apache Spark e InterSystems IRIS.

Nota: Los siguientes procedimientos los hice en Ubuntu 18.04 y Python 3.6.5.

Introducción

Si estás buscando un bloc de notas que sea reconocido, difundido ampliamente y muy popular entre los usuarios de Python, en lugar de utilizar Apache Zeppelin, deberías elegir Jupyter notebook. Jupyter notebook es una excelente y muy poderosa herramienta para la "ciencia de datos", que cuenta con una comunidad muy grande, además de muchas funciones y software adicional. Jupyter notebook permite crear y compartir documentos que contienen código en tiempo real, ecuaciones, visualizaciones y texto narrativo. Sus aplicaciones incluyen la limpieza y transformación de los datos, simulaciones numéricas, modelamiento estadístico, visualización de datos, machine learning y muchas funciones más. Y lo más importante, existe una gran comunidad que  ayuda a resolver los problemas que surjan.

1
0 595
Artículo Dmitrii Kuznetsov · sep 19, 2022 17m read

Una sesión simultánea en IRIS: SQL, Objects, REST y GraphQL  

Kazimir Malevich, "Deportistas" (1932)

"¡Pues claro que no lo entiende! ¿Cómo puede una persona que siempre ha viajado en un carruaje tirado por caballos entender los sentimientos e impresiones del viajero expres o del piloto de aviones?"
Kazimir Malevich (1916)

Introducción

Ya hemos abordado el tema de por qué la representación de objetos/clases es superior a la de SQL para implementar modelos de áreas temáticas. Y esas conclusiones y hechos son tan ciertos ahora como lo han sido siempre. Entonces, ¿por qué deberíamos dar un paso atrás y hablar sobre las tecnologías que arrastran las abstracciones de vuelta al nivel global, donde habían estado en la era pre-objetos y pre-clases? ¿Por qué debemos fomentar el uso de "código espagueti", que provoca errores que son difíciles de rastrear y se basa en las habilidades de desarrolladores virtuosos? 

Hay varios argumentos a favor de la transmisión de datos por medio de APIs basadas en SQL/REST/GraphQL en lugar de representarlos como clases/objetos:

0
0 2512
Artículo Javier Lorenzo Mesa · jul 8, 2022 4m read

Este artículo describe un diseño arquitectónico de complejidad intermedia para DeepSee. Al igual que en el ejemplo anterior, esta implementación incluye bases de datos separadas para almacenar la información, la implementación y la configuración de DeepSee. También presenta dos nuevas bases de datos: la primera para almacenar los globals necesarios para la sincronización, la segunda para almacenar tablas de hechos e índices.

0
0 195
Artículo Alberto Fuentes · mayo 31, 2022 2m read

¡Hola desarrolladores!

Gracias a todos los que habéis empezado el desarrollo con InterSystems IRIS desde la plantilla de desarrollo básico!

Recientemente, gracias a las contribuciones de @Dmitry Maslennikov,he actualizado el Dockerfile para hacer el desarrollo más sencillo, las imágenes más ligeras y el proceso de construcción más rápido. Y también parece más bonito ;)

Esto es lo que ha cambiado:

0
0 165
Artículo Ricardo Paiva · mar 24, 2022 9m read

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.

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 entradaStart.FileBS
  2. Business services para servicios web que utilizan el adaptador de entrada SOAPStart.WS.WebServiceBS
  3. Business services llamados por procedimientos almacenados o REST sin utilizar adaptadoresStart.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.

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.

imagen

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().

imagen

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:

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:

imagen

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:

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.

imagen

imagen

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.

imagen

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

imagen

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).

imagen

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:

Este es un ejemplo del procedimiento almacenado.

imagen

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')

imagen

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

imagen

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

imagen

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.

<Route Url="/weather/:product/:arecode" Method="GET" Call="WeatherCheck"/>

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

imagen

imagen

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.

0
0 224
Artículo Ricardo Paiva · mar 11, 2022 8m read

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.

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étodoA) 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.

imagen

Iconos como en este editor se llaman actividades, y las que están marcadas como son actividades que pueden invocar otros componentes.

Este símbolo 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.

imagen

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.

imagen

  • 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.

imagen

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.

imagen

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

imagen

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.

imagen

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 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:

imagen

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.

0
0 286
Artículo Ricardo Paiva · feb 18, 2022 4m read

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.

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

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

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.

Este es un ejemplo para la definición del mensaje de respuesta.

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).

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.

0
0 341
Artículo Ricardo Paiva · feb 8, 2022 7m read

Este artículo es una continuación de esta publicación.

En ese artículo, expliqué cómo funciona el menú de Interoperabilidad para su integración en el sistema.

En este artículo, me gustaría explicar cómo desarrollar una integración de sistemas utilizando el menú de interoperabilidad.

En primer lugar, ¿qué tipo de proceso quieres crear? Mientras piensas en ello, prepara el siguiente contenido.

  • Producción
  • Mensaje
  • Componentes
    • Business Services
    • Business Processes
    • Business Operations

Producción es una definición que se utiliza para especificar los componentes necesarios para la integración de sistemas y para almacenar la configuración de los componentes, que se configuran mediante el Portal de Administración (almacenado de forma interna como una definición de clase para la Producción).

Por ejemplo, supón que quieres crear un businessservice que procese los archivos colocados en un directorio específico a intervalos regulares. En ese caso, es necesario configurar exactamente qué directorios monitorizar y qué archivos procesar. Hay una Producción disponible para almacenar dicha configuración.

La configuración depende del adaptador usado por el componente que envía y recibe los datos.

Los adaptadores son clases para simplificar la conexión a los sistemas externos. Algunos son específicos de protocolos, como Mail/File/SOAP/FTP/HTTP/SQL/TCP, y otros son de específicos de estándares, como HL7.

Consulta la documentación (adaptadores específicos de protocolos y adaptadores relacionados con la documentación EDI) para más información sobre los adaptadores.

Como definiremos los componentes necesarios para la Producción, "Start Production" iniciará la integración del sistema, y "Stop Production" detendrá la integración del sistema.

El desarrollo necesario para completar la Producción es la creación de los componentes necesarios para la integración del sistema, concretamente los siguientes contenidos:

  • Mensaje
  • Componentes (Business Services, Business Processes, Business Operations)
  • Conversión de datos, etc.

El contenido anterior se explicará con más detalle en próximos artículos.

Primero vamos a iniciar la Producción utilizando la muestra Producción y comprobaremos el proceso de los mensajes al procesar los datos mientras se verifica la configuración.

La muestra puede descargarse en https://github.com/Intersystems-jp/selflearning-interoperability.

Para utilizar un contenedor, descarga el código de muestra por medio del clon en Git, ve al directorio del clon y ejecuta docker-compose up -d ¡Es así de fácil!

Consulta aquí el procedimiento (lleva un poco de tiempo crear un contenedor).

Si no utilizas contenedores, crea un nuevo namespace después de descargar la muestra, e importa todos los archivos de definición de clases (extensión .cls) a la carpeta src en el namespace creado.

Para más información sobre el proceso para crear un namespace, consulta el video desde el minuto 07:03 que aparece en este artículo.

Consulta el archivo README para más información sobre el código de muestra.

Cuando estés listo, ve al Portal de Administración (cambia el número de puerto del servidor web para que coincida con tu entorno).

http://localhost:52773/csp/sys/UtilHome.csp

Ve a Management Portal > Interoperability > Configuration > Production.

Si utilizas un método distinto al de los contenedores, conéctate al namespace donde importaste el código fuente, accede a [Configuration] > [Production], haz clic en el botón [Open], selecciona [Start] > [Production], y después haz clic en el botón [Start].

※ Si utilizas algo que no sea un contenedor, tendrás que hacer unos ajustes iniciales. Configura los contenidos descritos más abajo antes de probar los siguientes contenidos.

imagen

La página de producción se mostrará como [Component Name] para cada uno de los componentes "Service", "Process" y "Operation".

Haz clic sobre el nombre del componente para cambiar el contenido de la pestaña "Settings" en la parte derecha de la pantalla.

Por ejemplo, cuando haces clic sobre Start.GetKionOperation (un solo clic), se mostrará lo siguiente.

imagen

Este componente tiene la configuración de [HTTP Server] y de la [URL] para conectarse a la API Web. Hay un campo [appid] en la parte inferior de la configuración, donde se puede introducir la clave de la API que recibes. Hay un campo [lang] cerca de [appid] y se configura "ja" ("ja" = japonés). [lang] establece el idioma de la respuesta de OpenWeather. En el caso del inglés, selecciona "en". Cuando termines de definir esta configuración, haz clic en el botón "Apply".

imagen

Si utilizas un contenedor, la configuración está completa. Para más información, haz clic aquí.


Si estás probando con algo distinto a los contenedores

Realiza estos dos ajustes por adelantado:

  1. Configurar el cliente SSL.

Debido a que la API Web a la que se conectará estará comunicada mediante HTTPS, configura previamente el cliente SSL en el lado de IRIS.

Para que coincida con la configuración de la producción de muestra, utilizaremos el nombre [openweather]. La configuración de la Producción es la siguiente:

imagen

Haz clic en Management Portal > [System Administration] > [Security] > [SSL/TLS Configuration] > [Create New Configuration], escribe "openweather" en el campo "Configuration Name", y haz clic en el botón "Save" para terminar.

imagen

  1. Crear una URL base para REST

En la producción de muestra, lo configuramos para que la información se pueda introducir mediante REST, y la URL base para REST debe configurarse en el lado de IRIS.

En la muestra, definimos /start como la URL base. Dado que la clase Start.REST se encuentra en el namespace donde se importó la muestra, especificaremos esta clase como clase dispatch y añadiremos %All como el rol de aplicación para omitir la autenticación en el momento del acceso.

Management Portal > System Administration > Security > Applications > Web Application Path > Haz clic en el botón "Create new web application".

En el campo Name, especifica /start; en el campo Namespace, especifica el namespace desde el que se importó la muestra; en el campo Dispatch Class, especifica Start.REST; en el campo Allowed Authentication Method, selecciona "Unauthenticated", y guarda el archivo.

Después de guardar, añade %All al rol de aplicación en la pestaña "Application Roles".

imagen

imagen


Tratar de enviar datos

En cuanto tengas todo configurado, intenta utilizar un business service para enviar información a través de REST y hazlo funcionar.

http://localhost:52773/start/weather/Takoyaki/Osaka

El ejemplo anterior es una URL donde se supone que alguien compró "Takoyaki" en la ciudad de Osaka.

Después de la ejecución, en la pantalla aparece esto:

imagen

Comprueba los mensajes que se han enviado a la Producción.

En Management Portal > Interoperability > Configuration > Production, haz clic en el servicio que aparece a continuación:

Seleccione la pestaña "Messages " que aparece en la parte derecha de la pantalla y haz clic en cualquier número que se encuentre debajo de la columna "Header". Si no lo encuentras, vuelve a cargar tu navegador.

imagen

A través de la página de Visual Trace, se puede ver la información de messages enviados y recibidos entre los componentes. Puedes ver que la información meteorológica se recupera de la API web y se envía de nuevo en el marco azul claro.

De esta manera, se puede utilizar el seguimiento para ver qué datos se enviaron y recibieron en ese momento y en qué orden.

En este artículo, confirmamos que en la Producción se definieron los componentes necesarios y sus configuraciones para la integración del sistema, basándose en las configuraciones del código de muestra.

Además, confirmamos que podemos consultar los mensajes que circulan dentro de la Producción en orden cronológico, utilizando la página Visual Trace.

En los siguientes artículos, analizaremos el concepto que hay detrás de la creación del "mensaje" que se muestra en este recorrido y cómo se define realmente.

0
1 422
Artículo Alberto Fuentes · dic 17, 2021 6m read

¡Hola desarrolladores!

Hace un tiempo lanzamos InterSystems Package Manager - ZPM. Uno de los objetivos de ZPM es permitir empaquetar soluciones y enviarlas al registro de ZPM para que su implementación sea tan sencilla como el comando "install tu-paquete".

Para ello es necesario introducir el archivo module.xml en tu repositorio, que describe en qué consiste tu paquete de InterSystems IRIS.

En este artículo se describen las diferentes partes de module.xml, que te ayudarán a configurar el tuyo.

Comenzaré por el paquete samples-objectscript, que instala en IRIS la aplicación Sample ObjectScript y se puede instalar mediante:

zpm: USER>install samples-objectscript

Este es probablemente el paquete más sencillo y aquí está el archivo module.xml, que describe el paquete:

<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
  <Document name="samples-objectscript.ZPM">
    <Module>
      <Name>samples-objectscript</Name>
      <Version>1.0.0</Version>
      <Packaging>module</Packaging>
      <SourcesRoot>src</SourcesRoot>
      <Resource Name="ObjectScript.PKG"/>
    </Module>
    
  </Document>
</Export>

Vamos a revisar el documento detalladamente.

<Export generator="Cache" version="25">

El archivo module.xml pertenece a la familia de documentos de Cache/IRIS xml, por lo que en esta línea se establece la relación para que las librerías internas reconozcan el documento.

La siguiente sección es &lt;Document> 

 <Document name="samples-objectscript.ZPM">

Tu paquete debe tener un nombre. El nombre puede contener letras en minúscula y el signo "-". Por ejemplo, samples-objectscript en este caso. Coloca el nombre de tu paquete en la cláusula name de la etiqueta Document con la extensión .ZPM.

Los elementos internos de Document son:

<Name> - el nombre de tu paquete. En este caso:

<Name>samples-objectscript</Name>

<Version> - la versión del paquete. En este caso:

<Version>1.0.0</Version>

<Packaging>module</Packaging> - el tipo de paquete. Coloca aquí el parámetro del módulo.

<Packaging>module</Packaging>

<SourcesRoot> - una carpeta, donde ZPM buscará a ObjectScript para su importación. 

En este caso, te aconsejamos que busques ObjectScript en la carpeta /src:

<SourcesRoot>src</SourcesRoot>

<Resource Name> - los elementos de ObjectScript que se importarán. Pueden ser paquetes, clases, inclusiones, globals, dfi, etc. 

La estructura en la carpeta SourceRoot puede ser la que se genera con el VS Code al trabajar con ObjectScript por defecto.

Aunque también puedes utilizar la versión clásica que tenía esta forma:

/cls - todas las clases de ObjectScript en formato Folder=Package, Class=file.cls. Los subpaquetes son subcarpetas.

/inc - todos los archivos incluidos en formato file.inc.

/mac - todas las rutinas en mac. 

/int - todas las rutinas "intermedias" (alias "otro" código, el resultado de una compilación de código mac, u ObjectScirpt sin clases ni macro).

/gbl - todos los globals en formato xml de exportación.

/dfi - todos los archivos DFI en formato xml de exportación. Cada tabla dinámica se incluye en el archivo pivot.dfi, y todos los paneles de control se incluyen en el archivo dashboard.dfi.

Por ejemplo, aquí importaremos la página de ObjectScript. Esto indicará a ZPM que busque la carpeta /src/cls/ObjectScript y que importe todas las clases procedentes de ella:

<Resource Name="ObjectScript.PKG"/>

Así que para preparar tu solución para el empaquetado, coloca las clases de ObjectScript en alguna carpeta de tu repositorio dentro de la carpeta /cls y pon todos los paquetes y clases en package=folder, class=file.cls.

Rutinas para empaquetar con mac

Esto es muy similar a las clases. Basta con colocar las rutinas en la carpeta /mac. Por ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25">
  <Document name="DeepSeeButtons.ZPM">
    <Module>
      <Name>DeepSeeButtons</Name>
      <Version>0.1.7</Version>
      <Packaging>module</Packaging>
      <SourcesRoot>src</SourcesRoot>
      <Resource Name="DeepSeeButtons.mac"/>
    </Module>
  </Document>
</Export>

Otros elementos

También hay elementos opcionales como:
<Author>

Que pueden contener elementos como <Organization> y <CopyrightDate>.

Por ejemplo:

<Author>
        <Organization>InterSystems</Organization>
        <CopyrightDate>2019</CopyrightDate>
</Author>

Empaquetado de aplicaciones CSP/Web

ZPM también puede implementar aplicaciones web.

Para que funcione, introduce el elemento CSPApplication con las cláusulas de los parámetros de la aplicación CSP. 

Por ejemplo, observa la etiqueta CSPApplication de module.xml en DeepSeeWeb:

<CSPApplication
        Url="/dsw"
        DeployPath="/build"
        SourcePath="${cspdir}/dsw"
        ServeFiles="1"
        Recurse="1"
        CookiePath="/dsw"
       />

Esta configuración creará una aplicación web con el nombre /dsw y copiará todos los archivos de la carpeta /build del repositorio a la carpeta ${cspdir}****/dsw, una carpeta que se encuentra debajo del directorio IRIS csp.

Aplicación API REST

Si se trata de una aplicación API-REST, el elemento CSPApplication contendrá la clase dispatch y podría ser similar al módulo MDX2JSON.xml:

<CSPApplication
    Path="/MDX2JSON"
    Url="/MDX2JSON"
    CookiePath="/MDX2JSON/"
    PasswordAuthEnabled="1"
    UnauthenticatedEnabled="1"
    DispatchClass="MDX2JSON.REST"
    />

Dependencias

Tu módulo podría esperar la presencia de otro módulo que esté instalado en el sistema de destino. Esto se podría describir mediante el elemento <Dependencies> situado dentro del elemento <Document>, que podría contener varios elementos <ModuleReference>, cada uno de los cuales tiene <Name> y <Version> y que indican qué otros módulos, con qué versión deberían instalarse antes que la tuya. Esto hará que ZPM verifique si los módulos están instalados y, en caso contrario, realice la instalación.

Este es un ejemplo de dependencia del módulo DSW en el módulo MDX2JSON:

<Dependencies>
        <ModuleReference>
          <Name>MDX2JSON</Name>
          <Version>2.2.0</Version>
        </ModuleReference>
      </Dependencies>

Otro ejemplo, donde ThirdPartyPortlets depende de Samples BI (holefoods):

<Dependencies>
        <ModuleReference>
          <Name>holefoods</Name>
          <Version>0.1.0</Version>
        </ModuleReference>
      </Dependencies>

Además hay opciones para ejecutar tu código de forma arbitraria para configurar los datos y el entorno, pero hablaremos sobre esto en los siguientes artículos.

Cómo crear tu propio paquete

¡Muy bien! Una vez que tengas un module.xml, puedes intentar crear el paquete y probar si la estructura de module.xml es acertada.

Puedes probarlo por medio del cliente zpm. Instala ZPM en un sistema IRIS y carga el código del paquete con el comando load:

zpm: NAMESPACE>load path-to-the-project

La ruta indica la carpeta que contiene los recursos correspondientes para el paquete y tiene el module.xml en la carpeta raíz. 

Por ejemplo, puedes probar el paquete creando este proyecto. Compruébalo y crea un contenedor con docker-compose-zpm.yml.

Abre el terminal en el namespace SAMPLES y llama a ZPM:

zpm: SAMPLES>

zpm: SAMPLES>load /iris/app

[samples-objectscript]  Reload START
[samples-objectscript]  Reload SUCCESS
[samples-objectscript]  Module object refreshed.
[samples-objectscript]  Validate START
[samples-objectscript]  Validate SUCCESS
[samples-objectscript]  Compile START
[samples-objectscript]  Compile SUCCESS
[samples-objectscript]  Activate START
[samples-objectscript]  Configure START
[samples-objectscript]  Configure SUCCESS
[samples-objectscript]  Activate SUCCESS

La ruta es "/iris/app" porque en docker-compose-zpm.yml indicamos que mapeamos la raíz del proyecto en la carpeta /iris/app en el contenedor. Por tanto, podemos utilizar esta ruta para indicar a ZPM desde dónde cargar el proyecto.

¡El proyecto se cargó correctamente! Esto significa que module.xml podría utilizarse para enviar un paquete al repositorio de la Comunidad de Desarrolladores.

Ahora ya sabes cómo crear un archivo module.xml adecuado para tu aplicación. 

Cómo enviar la solicitud al repositorio de la Comunidad de InterSystems

  1. Tu aplicación debe estar en Open Exchange

  2. Al dar de alta tu aplicación, simplemente marca el checkbox Publish in Package Manager. A continuación simplemente espera a que pase el proceso de aprobación para que se publique.

¡Y deberías tener un module.xml funcionando correctamente!

0
0 217
Anuncio Esther Sanchez · nov 19, 2021

¡Hola desarrolladores!

Os traemos el sexto y último tutorial grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Persistencia de Objetos con InterSystems IRIS.

En este tutorial de siete minutos, David nos explicará la persistencia de objetos con InterSystems IRIS.

Tutorial 6: Persistencia de objetos con InterSystems IRIS

0
0 155
Artículo Ricardo Paiva · nov 12, 2021 21m read

Este curso de formación está dirigido a todas las personas interesadas en conocer el framework de Interoperabilidad de IRIS. Utilizaremos Docker y VSCode.

GitHub: https://github.com/grongierisc/formation-template

1. Formación en Ensemble/Interoperabilidad

El objetivo de esta formación es aprender el framework de interoperabilidad de InterSystems, y en particular el uso de:

  • Producciones
  • Mensajes
  • Business Operations
  • Adaptadores
  • Business Processes
  • Business Services
  • Operaciones y servicios REST

ÍNDICE:

2. Framework

Este es el framework de IRIS.

FrameworkFull

Los componentes que están en el interior de IRIS representan una producción. Los adaptadores de entrada y de salida nos permiten utilizar diferentes tipos de formato como entrada y salida para nuestra base de datos. Las aplicaciones compuestas nos darán acceso a la producción a través de aplicaciones externas como los servicios REST.

Las flechas que están entre todos estos componentes son mensajes. Estos pueden ser solicitudes o respuestas.

3. Adaptación del framework

En nuestro caso, leeremos las líneas desde un archivo CSV y las guardaremos en la base de datos IRIS.

Entonces, añadiremos una operación que nos permitirá guardar los objetos en una base de datos externa, utilizando JDBC. Esta base de datos se ubicará en un contenedor de Docker, utilizando postgre.

Por último, veremos cómo utilizar aplicaciones compuestas para insertar nuevos objetos en nuestra base de datos, o para consultar esta base de datos (en nuestro caso, a través de un servicio REST).

El framework adaptado a nuestro propósito nos ofrece:

FrameworkAdapted

4. Requisitos previos

Para esta formación, necesitarás:

5. Configuración

5.1. Contenedores de Docker

Para tener acceso a las imágenes de InterSystems, hay que ir a esta URL: http://container.intersystems.com. Después de iniciar sesión con nuestras credenciales de InterSystems, obtendremos nuestra contraseña para conectarnos al registro. En el addon de Docker para VSCode, que se encuentra en la pestaña de imágenes, hacemos clic en Conectar Registro, introducimos la misma URL que antes (http://container.intersystems.com) como registro genérico y se nos pedirá que demos nuestras credenciales. El inicio de sesión es el habitual pero la contraseña es la que obtuvimos del sitio web.

A partir de ahí, deberíamos ser capaces de crear y componer nuestros contenedores (con los archivos docker-compose.yml y Dockerfile que se nos dieron).

5.2. Portal de Administración

Abriremos un Portal de Administración. Esto nos dará acceso a una página web desde la que podremos crear nuestra producción. El portal debe estar ubicado en la URL: http://localhost:52775/csp/sys/UtilHome.csp?$NAMESPACE=IRISAPP. Necesitarás las siguientes credenciales:

LOGIN: SuperUser

PASSWORD: SYS

5.3. Guardar el progreso

Una parte de las cosas que haremos se guardarán localmente, pero todos los procesos y producciones se guardan en el contenedor de Docker. Con el fin de conservar todo nuestro progreso, necesitamos exportar todas las clases que se crean desde el Portal de Administración con ayuda del addonObjectScript de InterSystems:

ExportProgress

Tendremos que guardar de esta forma nuestra producción, mapa de registros, business processes y transformaciones de datos. Después de hacerlo, cuando cerremos nuestro contenedor Docker y hagamos la compilación nuevamente, aún tendremos todo nuestro progreso guardado de forma local (por supuesto, hay que hacer esto después de cada cambio que hagamos a través del portal). Para que sea accesible a IRIS de nuevo, tenemos que compilar los archivos exportados (cuando los guardemos, los addons de InterSystems se encargarán del resto).

6. Producciones

Ahora podemos crear nuestra primera producción. Para hacerlo, nos moveremos por los menús [Interoperability] y [Configure]:

ProductionMenu

Ahora hacemos clic en [New], seleccionamos el paquete [Formation] y elegimos un nombre para nuestra producción:

ProductionCreation

Inmediatamente después de crear nuestra producción, hay que hacer clic en la opción [Production Settings], situada encima de la sección [Operations]. En el menú de la barra lateral derecha, tendremos que activar la opción [Testing Enabled] en la sección [Development and Debugging] de la pestaña [Settings] (no te olvides de hacer clic en [Apply]).

ProductionTesting

En esta primera producción añadiremos ahora las business operations.

7. Operaciones

Una business operation (BO) es un tipo de operación específica que nos permitirá enviar solicitudes desde IRIS hacia una aplicación/sistema externo. También se puede utilizar para guardar lo que queramos directamente en IRIS.

Crearemos esas operaciones de forma local, es decir, en el archivo Formation/BO/. Cuando guardemos los archivos los compilaremos en IRIS.

En nuestra primera operación, guardaremos el contenido de un mensaje en la base de datos local.

Para hacerlo, primero necesitamos tener una forma de almacenar este mensaje.

7.1. Creación de nuestra clase de almacenamiento

En IRIS, las clases de almacenamiento extienden el tipo %Persistent. Se guardarán en la base de datos interna.

En nuestro archivo Formation/Table/Formation.cls tenemos lo siguiente:

Class Formation.Table.Formation Extends %Persistent
{

Property Name As %String;

Property Salle As %String;

}

Ten en cuenta que al guardar, de forma automática se añaden líneas adicionales al archivo. Son obligatorias y las añaden los addons de InterSystems.

7.2. Creación de nuestra clase para mensajes

Este mensaje contendrá un objeto Formation, situado en el archivo Formation/Obj/Formation.cls:

Class Formation.Obj.Formation Extends (%SerialObject, %XML.Adaptor)
{

Property Nom As %String;

Property Salle As %String;

}

La clase Message utilizará el objeto Formation, src/Formation/Msg/FormationInsertRequest.cls:

Class Formation.Msg.FormationInsertRequest Extends Ens.Request
{

Property Formation As Formation.Obj.Formation;

}

7.3. Creación de nuestra operación

Ahora que ya tenemos todos los elementos que necesitamos, podemos crear nuestra operación, en el archivo Formation/BO/LocalBDD.cls:

Class Formation.BO.LocalBDD Extends Ens.BusinessOperation
{

Parameter INVOCATION = "Queue";

Method InsertLocalBDD(pRequest As Formation.Msg.FormationInsertRequest, Output pResponse As Ens.StringResponse) As %Status
{
    set tStatus = $$$OK

    try{
        set pResponse = ##class(Ens.Response).%New()
        set tFormation = ##class(Formation.Table.Formation).%New()
        set tFormation.Name = pRequest.Formation.Nom
        set tFormation.Salle = pRequest.Formation.Salle
        $$$ThrowOnError(tFormation.%Save())
    }
    catch exp
    {
        Set tStatus = exp.AsStatus()
    }

    Quit tStatus
}

XData MessageMap
{
<MapItems>
    <MapItem MessageType="Formation.Msg.FormationInsertRequest"> 
        <Method>InsertLocalBDD</Method>
    </MapItem>
</MapItems>
}

}

El MessageMap nos proporciona el método que debemos lanzar, dependiendo del tipo de solicitud (el mensaje que se envió a la operación).

Como podemos ver, si la operación recibió un mensaje del tipo Formation.Msg.FormationInsertRequest, se llamará al método InsertLocalBDD. Este método guardará el mensaje en la base de datos local de IRIS.

7.4. Cómo añadir la operación a la producción

Ahora necesitamos añadir esta operación a la producción. Para hacerlo, utilizaremos el Portal de Administración. Al hacer clic en el signo [+] junto a [Operations], tendremos acceso al [Business Operation Wizard]. Allí, elegiremos la clase de la operación que acabamos de crear en el menú desplegable.

OperationCreation

7.5. Pruebas

Si hacemos doble clic en la operación podremos activarla. Después de hacerlo, al seleccionar la operación e ir a las pestañas [Actions] que están en el menú de la barra lateral derecha, deberíamos poder probar la operación (si no ves la sección para crear la producción, puede que tengas que iniciar la producción si se encuentra detenida).

De este modo, enviaremos a la operación un mensaje del tipo que declaramos anteriormente. Si todo sale bien, los resultados deberían ser similares a los que se muestran a continuación:

OperationTest

Mostrar el registro visual nos permitirá ver lo que ocurrió entre los procesos, servicios y operaciones. Aquí, podemos ver el mensaje que se envía a la operación por parte del proceso, y a la operación cuando envía de vuelta una respuesta (que en este caso solo es una cadena vacía).

8. Business Processes

Los business processes (BP) son la lógica empresarial de nuestra producción. Se utilizan para procesar las solicitudes o retransmitirlas a otros componentes de la producción.

Los business processes se crean dentro del Portal de Administración:

BPMenu

8.1. Business processes simples

8.1.1. Creación del proceso

Ahora estamos en el Diseñador de Business Process. Vamos a crear un business process simple que llamará nuestra operación:

BPAddingCall

8.1.2. Modificación del contexto de un business process

Todos los business processes tiene un contexto. Se compone de una clase para la solicitud, la clase de la entrada, una clase para la respuesta y la clase de la salida. Los business processes solo tienen una entrada y una salida. También es posible agregar propiedades.

Como nuestro business process solo se utilizará para llamar a nuestra business operation, podemos poner la clase del mensaje que hemos creado como clase para la solicitud (no necesitamos una salida ya que solo queremos insertarlo en la base de datos).

BPContext

Ahora, elegiremos el objetivo de la función Call: nuestra business operation. Esa operación, al ser llamada tiene una propiedad callrequest. Necesitamos vincular esa propiedad callrequest con la solicitud del business process (ambos pertenecen a la clase Formation.Msg.FormationInsertRequest) y para ello, hacemos clic en la función Call y utilizaremos el creador de peticiones:

BPBindRequests

Ahora podemos guardar este business process (en el paquete 'Formation.BP' y, por ejemplo, con el nombre 'InsertLocalBDD' o 'Main'). Al igual que las operaciones, pueden crearse instancias de los procesos y se pueden probar mediante la Configuración de la producción, aunque para esto necesitan compilarse previamente (en la pantalla del Business Process Designer).

Por ahora, nuestro proceso solo pasa el mensaje a nuestra operación. Vamos a aumentar la complejidad para que el business process tome como entrada una línea de un archivo CSV.

8.2. Cómo hacer que el business process lea líneas CSV

8.2.1. Creación de un mapa de registro

Para leer un archivo y poner su contenido en otro archivo, necesitamos un Mapa de Registros (RM). En el menú [Interoperability > Build] del Portal de Administración hay un servicio para mapear los registros, especializado en archivos CSV:

RMMenu

Crearemos el servicio para elaborar mapas de esta manera:

RMCreation

Ahora deberías tener el siguiente Mapa de Registros:

RMDetails

Ahora que el mapa está creado, debemos generarlo (con el botón Generate). También debemos efectuar una Transformación de datos desde el formato del Mapa de registros y un mensaje de inserción.

8.2.2. Creación de una transformación de datos

Encontraremos el Generador para la Transformación de datos (DT) en el menú [Interoperability > Builder]. A continuación, crearemos nuestra DT de esta forma (si no encuentras la clase Formation.RM.Csv.Record, tal vez no se generó el Mapa de Registros):

DTCreation

Ahora, podemos mapear los diferentes campos juntos:

DTMap

8.2.3. Añadir la transformación de datos al business process

Lo primero que debemos modificar es la clase de la solicitud del business process, ya que necesitamos tener una entrada en el Mapa de Registros que creamos.

BP2ChangeContext

Entonces, podemos añadir nuestra transformación (el nombre del proceso no cambia nada, a partir de aquí elegimos llamarlo Main):

BP2AddingTransform

La actividad de transformación tomará la solicitud del business process (un registro del archivo CSV, gracias a nuestro servicio para mapear los registros) y la transformará en un mensaje FormationInsertRequest. Si deseamos almacenar ese mensaje para enviarlo al business operation, necesitamos añadir una propiedad al contexto del business process.

BP2MsgContext

Ahora podemos configurar nuestra función de transformación para que tome su entrada como entrada del business process y guarde su salida en la propiedad recién creada. El origen y el objetivo de la transformación RmToMsg son request y context.Msg, respectivamente:

BP2RmToMsg

Tenemos que hacer lo mismo para Call BO. Su entrada, o callrequest, es el valor almacenado en context.msg:

BP2CallBO

Al final, el flujo en el business process puede representarse de esta manera:

BP2Diagram

8.2.4. Configuración de la producción

Con el signo [+], podemos añadir nuestro nuevo proceso a la producción (si aún no lo hemos hecho). También necesitamos un servicio genérico para utilizar el Mapa de Registros, para ello utilizamos EnsLib.RecordMap.Service.FileService (lo añadimos con el botón [+] que está junto a los servicios). A continuación, parametrizamos este servicio:

ServiceParam

Ahora deberíamos poder probar nuestro business process.

8.2.5. Pruebas

Probamos toda la producción de esta manera:

TestProductionCSV

En el menú System Explorer > SQL, puedes ejecutar el comando

SELECT 
ID, Name, Salle
FROM Formation_Table.Formation

para ver los objetos que acabamos de guardar.

9. Obtener acceso a una base de datos externa usando JDBC

En esta sección, crearemos una operación para guardar nuestros objetos en una base de datos externa. Utilizaremos la API de JDBC, así como el otro contenedor Docker que configuramos, con postgre en él.

9.1. Creación de nuestra nueva operación

Nuestra nueva operación, en el archivo Formation/BO/RemoteBDD.cls es así:

Include EnsSQLTypes

Class Formation.BO.RemoteBDD Extends Ens.BusinessOperation
{

Parameter ADAPTER = "EnsLib.SQL.OutboundAdapter";

Property Adapter As EnsLib.SQL.OutboundAdapter;

Parameter INVOCATION = "Queue";

Method InsertRemoteBDD(pRequest As Formation.Msg.FormationInsertRequest, Output pResponse As Ens.StringResponse) As %Status
{
    set tStatus = $$$OK

    try{
        set pResponse = ##class(Ens.Response).%New()
        set ^inc = $I(^inc)
        set tInsertSql = "INSERT INTO public.formation (id, nom, salle) VALUES(?, ?, ?)"
        $$$ThrowOnError(..Adapter.ExecuteUpdate(.nrows,tInsertSql,^inc,pRequest.Formation.Nom, pRequest.Formation.Salle ))
    }
    catch exp
    {
        Set tStatus = exp.AsStatus()
    }

    Quit tStatus
}

XData MessageMap
{
<MapItems>
    <MapItem MessageType="Formation.Msg.FormationInsertRequest"> 
        <Method>InsertRemoteBDD</Method>
    </MapItem>
</MapItems>
}

}

Esta operación es similar a la primera que creamos. Cuando reciba un mensaje del tipo Formation.Msg.FormationInsertRequest, utilizará un adaptador para ejecutar solicitudes SQL. Esas solicitudes se enviarán a nuestra base de datos de postgre.

9.2. Configuración de la producción

Ahora, desde el Portal de Administración, crearemos una instancia de esa operación (añadiéndola con el signo [+] en la producción).

También necesitaremos añadir el JavaGateway para el controlador JDBC en los servicios. El nombre completo de este servicio es EnsLib.JavaGateway.Service.

JDBCProduction

Ahora necesitamos configurar nuestra operación. Como hemos configurado un contenedor postgre, y conectado su puerto 5432, los valores que necesitamos en los siguientes parámetros son:

DSN: jdbc:postgresql://db:5432/DemoData

Controlador de JDBC: org.postgresql.Driver

JDBC Classpath: /tmp/iris/postgresql-42.2.14.jar

JDBCParam

Finalmente, necesitamos configurar las credenciales para tener acceso a la base de datos remota. Para ello, necesitamos abrir el Visualizador de credenciales:

JDBCCredentialMenu

Tanto el nombre de usuario como la contraseña son DemoData, como lo configuramos en el archivo docker-compose.yml.

JDBCCredentialCreation

De vuelta a la producción, podemos añadir "Postgre" en el campo [Credential] en la configuración de nuestra operación (debería estar en el menú desplegable). Antes de que podamos probarlo, debemos añadir el JGService a la operación. En la pestaña [Settings], en [Additional Settings]:

JDBCService

9.3. Pruebas

Cuando se están haciendo pruebas el registro visual debe mostrar que tuvimos éxito:

JDBCTest

Conectamos correctamente una base de datos externa.

9.4. Ejercicio

Como ejercicio, podría ser interesante modificar BO.LocalBDD para que devuelva un booleano, que le dirá al business process que llame a BO.RemoteBDD dependiendo del valor de ese booleano.

Sugerencia: Esto se puede hacer cambiando el tipo de respuesta que devuelve LocalBDD, añadiendo una nueva propiedad al contexto y utilizando la actividad if en nuestro business process.

9.5. Solución

Primero, necesitamos tener una respuesta de nuestra operación LocalBDD. Vamos a crear un nuevo mensaje, en Formation/Msg/FormationInsertResponse.cls:

Class Formation.Msg.FormationInsertResponse Extends Ens.Response
{

Property Double As %Boolean;

}

Después, cambiamos la respuesta de LocalBDD por esa respuesta y establecemos el valor de su booleano de forma aleatoria (o no):

Method InsertLocalBDD(pRequest As Formation.Msg.FormationInsertRequest, Output pResponse As Formation.Msg.FormationInsertResponse) As %Status
{
    set tStatus = $$$OK

    try{
        set pResponse = ##class(Formation.Msg.FormationInsertResponse).%New()
        if $RANDOM(10) < 5 {
            set pResponse.Double = 1
        } 
        else {
            set pResponse.Double = 0
        }
...

Ahora crearemos un nuevo proceso (copiado del que hicimos), donde añadiremos una nueva propiedad de contexto, de tipo %Boolean:

ExerciseContext

Esta propiedad se completará con el valor del callresponse.Double de nuestra llamada de operación (necesitaremos establecer [Response Message Class] en nuestra nueva clase de mensaje):

ExerciseBinding

A continuación, añadimos una actividad if, con la propiedad context.Double como condición:

ExerciseIf

MUY IMPORTANTE: necesitamos desmarcar Asynchronous en la configuración de nuestra LocallBDD Call, o la actividad if se activará antes de que reciba la respuesta booleana.

Finalmente configuramos nuestra actividad de llamada como un objetivo RemoteBDD BO:

ExerciseRemoteCall

Para completar la actividad if, necesitamos arrastrar otro conector desde la salida del if al triángulo join que se encuentra debajo. Como no haremos nada si el valor booleano es falso, dejaremos este conector vacío.

Después de compilar y crear instancias, deberíamos poder probar nuestro nuevo proceso. Para ello, necesitamos cambiar Target Config Name de nuestro servicio de archivos.

En el seguimiento, deberíamos tener aproximadamente la mitad de los objetos leídos en el csv guardados también en la base de datos remota.

10. Servicio REST

En esta parte, crearemos y utilizaremos un Servicio REST.

10.1. Creación del servicio

Para crear un servicio REST, necesitamos una clase que extienda %CSP.REST, en Formation/REST/Dispatch.cls tenemos:

Class Formation.REST.Dispatch Extends %CSP.REST
{

/// Ignore any writes done directly by the REST method.
Parameter IgnoreWrites = 0;

/// By default convert the input stream to Unicode
Parameter CONVERTINPUTSTREAM = 1;

/// The default response charset is utf-8
Parameter CHARSET = "utf-8";

Parameter HandleCorsRequest = 1;

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
  <!-- Get this spec -->
  <Route Url="/import" Method="post" Call="import" />
</Routes>
}

/// Get this spec
ClassMethod import() As %Status
{
  set tSc = $$$OK

  Try {

      set tBsName = "Formation.BS.RestInput"
      set tMsg = ##class(Formation.Msg.FormationInsertRequest).%New()

      set body = $zcvt(%request.Content.Read(),"I","UTF8")
      set dyna = {}.%FromJSON(body)

      set tFormation = ##class(Formation.Obj.Formation).%New()
      set tFormation.Nom = dyna.nom
      set tFormation.Salle = dyna.salle

      set tMsg.Formation = tFormation

      $$$ThrowOnError(##class(Ens.Director).CreateBusinessService(tBsName,.tService))

      $$$ThrowOnError(tService.ProcessInput(tMsg,.output))

  } Catch ex {
      set tSc = ex.AsStatus()
  }

  Quit tSc
}

}

Esta clase contiene una ruta para importar un objeto, vinculado al verbo POST:

<Routes>
  <!-- Get this spec -->
  <Route Url="/import" Method="post" Call="import" />
</Routes>

El método de importación creará un mensaje que se enviará a un business service.

10.2. Añadir nuestro Business Service (BS)

Vamos a crear una clase genérica que dirigirá todas sus solicitudes hacia TargetConfigNames. Este objetivo se configurará cuando creemos una instancia de este servicio. En el archivo Formation/BS/RestInput.cls tenemos:

Class Formation.BS.RestInput Extends Ens.BusinessService
{

Property TargetConfigNames As %String(MAXLEN = 1000) [ InitialExpression = "BuisnessProcess" ];

Parameter SETTINGS = "TargetConfigNames:Basic:selector?multiSelect=1&context={Ens.ContextSearch/ProductionItems?targets=1&productionName=@productionId}";

Method OnProcessInput(pDocIn As %RegisteredObject, Output pDocOut As %RegisteredObject) As %Status
{
    set status = $$$OK

    try {

        for iTarget=1:1:$L(..TargetConfigNames, ",") {
            set tOneTarget=$ZStrip($P(..TargetConfigNames,",",iTarget),"<>W")  Continue:""=tOneTarget
            $$$ThrowOnError(..SendRequestSync(tOneTarget,pDocIn,.pDocOut))
        }
    } catch ex {
        set status = ex.AsStatus()
    }

    Quit status
}

}

Volviendo a la configuración de la producción, añadimos el servicio de la manera habitual. En [Target Config Names], ponemos nuestro BO LocalBDD:

RESTServiceSetup

Para utilizar este servicio, necesitamos publicarlo. Para ello, usamos el menú [Edit Web Application]:

RESTServicePublish

10.3. Pruebas

Por último, podemos probar nuestro servicio con cualquier tipo de cliente REST:

RESTTest

Conclusión

A través de esta formación, hemos creado una producción que es capaz de leer líneas desde un archivo csv y guardar los datos leídos tanto en la base de datos de IRIS como en una base de datos externa, utilizando JDBC. También añadimos un servicio REST para utilizar el verbo POST para guardar nuevos objetos.

Hemos descubierto los principales elementos del framework de interoperabilidad de InterSystems.

Lo hemos hecho utilizando Docker, VSCode y el Portal de Administración de InterSystems IRIS.

0
0 319
Artículo Alberto Fuentes · jun 22, 2021 4m read

En este artículo, ejecutaremos un clúster InterSystems IRIS usando Docker y archivos CPF combinados - una nueva característica que permite configurar servidores con facilidad.

En UNIX® y Linux, puedes modificar el archivo predeterminado iris.cpf utilizando un archivo CPF combinado declarativo. Un archivo combinado es un CPF parcial en el que se establecen los valores deseados que queramos que tenga una instancia al iniciar. La operación de combinación en CPF sólo funciona una vez para cada instancia.

Nuestra arquitectura de clúster es muy sencilla, consistirá en un Nodo 1 (nodo maestro) y dos Nodos de datos (echa un vistazo a todas las funciones disponibles). Desafortunadamente, docker-compose no puede desplegar en diferentes servidores (aunque puede desplegar a hosts remotos), por lo que esto es útil para el desarrollo local de modelos de datos que utilicen sharding, pruebas, etc. Para el despliegue en producción de un cluster de estar características, debes utilizar ICM o IKO.

Docker-compose.yml

Comencemos con la configuración de docker-compose:

 
docker-compose.yml

Como puedes ver, estamos ejecutando una imagen intersystems/iris:2020.3.0.221.0, a la que pasamos un fichero de licencia (que debe ser compatible con sharding), persiste los datos utilizando la funcionalidad Durable %SYS, y le pasa un ISC_CPF_MERGE_FILE que apunta al archivo CPF que queremos combinar (son diferentes archivos los usados para el Nodo 1 y los nodos de datos).

Además, los nodos de datos se inician con un minuto de retraso dándole tiempo al Nodo 1 para que arranque. Esta es una estimación extremadamente conservadora, con un hardware adecuado el tiempo de inicio es del orden de segundos como máximo.

Revisaremos la configuración de clúster que tiene lugar en los archivos combinados CPF.

CPF2merge-data-instance.conf

[Startup]
PasswordHash=FBFE8593AEFA510C27FD184738D6E865A441DE98,u4ocm4qh
ShardRole=node1


[config]
MaxServerConn=64
MaxServers=64
globals=0,0,400,0,0,0
errlog=1000
routines=32
gmheap=256000
locksiz=1179648

¿Qué sucede aquí?

En la parte [Startup] habilitamos sharding al asignar el rol de Nodo1 a nuestro clúster. Y en [config] ampliamos un poco nuestro servidor al permitir más buffers de memoria y conexiones. ¡Eso es todo!

CPF2merge-data-instance.conf

[Startup]

ShardClusterURL=IRIS://iris1:1972/IRISCLUSTER
ShardRole=DATA

Para los nodos de datos, necesitamos proporcionar la URL del Nodo1 y el rol del nodo.

Pruébalo

Revisa el repositorio o ejecuta este código:

git clone https://github.com/intersystems-ru/iris-container-recipes.git
cd iris-container-recipes
cd cluster
// copy iris.key in cluster folder
docker-compose up -d

Después de iniciar el clúster de InterSystems IRIS, puedes acceder a él desde el navegador. El usuario/contraseña es: _SYSTEM/SYS.

Conclusiones

Los archivos CPF combinados son una excelente y sencilla herramienta, que permiten configurar instancias de InterSystems IRIS.

Gracias a @Luca Ravazzolo por proporcionar el código y responder a todas mis preguntas.

1
0 139
Anuncio Esther Sanchez · oct 15, 2021

¡Hola desarrolladores!

Os traemos el quinto tutorial grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Cómo trabajar con InterSystems IRIS y Visual Studio Code.

En este tutorial de siete minutos, David nos mostrará cómo trabajar con InterSystems IRIS y ObjectScript, para lo que hay que instalar y configurar InterSystems ObjectScript, una extensión de VS Code.

Tutorial 5: Cómo trabajar con InterSystems IRIS y VS Code

<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" src="https://www.youtube.com/embed/o1_YHig-CQo" title="YouTube video player" width="560" height="315" frameborder="0"></iframe>

¡Esperamos que os resulte útil! yes

¡Y recordad que podéis suscribiros al canal de YouTube de la Comunidad de Desarrolladores en español, para manteneros formados e informados!

0
0 269
Anuncio Esther Sanchez · oct 8, 2021

¡Hola desarrolladores!

Os traemos el cuarto tutorial grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Cómo habilitar la interoperabilidad en InterSystems IRIS.

En este tutorial de tres minutos, David nos mostrará cómo habilitar la interoperabilidad en InterSystems IRIS Community Edition.

Tutorial 4: Cómo habilitar la interoperabiliad en InterSystems IRIS

0
0 117
Anuncio Esther Sanchez · sep 24, 2021

¡Hola desarrolladores!

Os traemos el tercer tutorial grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Trabajando con Contenedores Docker y VS Code.

En este tutorial de dos minutos, David nos mostrará cómo trabajar con contenedores Docker y Visual Studio Code.

Tutorial 3: Trabajando con Contenedores Docker y VS Code

0
0 289
Anuncio Esther Sanchez · sep 17, 2021

¡Hola desarrolladores!

Nuestro compañero @jose-tomas.salvador ha realizado varios videotutorialesde iniciación a ObjectScript, a modo de curso, para los nuevos desarrolladores que están conociendo la tecnología de InterSystems.

Iremos presentando cada videotutorial en distintos anuncios. Hoy os traemos el primero de la serie, en el que presenta el curso:

⏯ Capítulo 0: Introducción

0
0 177
Anuncio Esther Sanchez · sep 16, 2021

¡Hola desarrolladores!

Os traemos el segundo tutorial grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Contenedor de InterSystems IRIS con Docker Compose.

En este segundo tutorial de seis minutos, David nos mostrará cómo trabajar con Docker Compose.

Tutorial 2: Contenedor de InterSystems IRIS con Docker Compose

0
0 195
Artículo Javier Lorenzo Mesa · jul 16, 2021 5m read

Tengo algunos modelos analíticos y numerosos paneles de control, y estoy listo para implementarlos en nuestros usuarios finales y administradores. ¿Cómo configurar DeepSee para que los usuarios no alteren las áreas de los demás y se les restrinja el uso de funciones específicas para los desarrolladores?

1
0 157
Artículo Ricardo Paiva · sep 9, 2021 4m read

Este artículo es una continuación de esta publicación.

El objetivo de este artículo es explicar cómo funciona el menú de interoperabilidad para la integración del sistema.

imagen

La parte izquierda de la figura representa la ventana para aceptar información enviada desde sistemas externos.

Hay varias maneras de recibir información, como monitorizar el directorio especificado a intervalos regulares para leer archivos, consultar periódicamente la base de datos, esperar a que se introduzcan datos, o llamar directamente y que se pasen desde aplicaciones en otros sistemas.

En el mecanismo de integración del sistema creado en el menú Interoperabilidad de IRIS, la información recibida se almacena en un objeto llamado mensaje. El mensaje se envía al componente responsable de su procesamiento posterior.

Se puede crear un mensaje utilizando toda la información recibida o solo una parte de ella.

Supón que deseas enviar la información contenida en el mensaje a un sistema externo. En ese caso, es necesario que envíes el mensaje al componente responsable de solicitar a la red externa que lo procese (la parte derecha de la figura). El componente que recibe el mensaje solicitará al sistema externo que lo procese.

Además, supón que un mensaje requiere que una persona lo revise, conversión de datos o adjuntar datos. En ese caso, el mensaje se envía al componente situado en el centro del diagrama (BPM), que es el encargado de coordinar el flujo del proceso.

Los mensajes se utilizan para enviar y recibir datos entre cada componente. Cuando se envía o se recibe un mensaje, este se almacena automáticamente en la base de datos.

Como los mensajes se almacenan en la base de datos, se puede revisar la diferencia entre antes y después de la conversión de datos. Revisa el mensaje que fue la fuente de un problema durante una operación o vuelva a empezar (reenvío) desde la mitad del proceso. Verifica el estado utilizando mensajes en cada etapa de desarrollo, prueba y operación.

Una imagen sencilla de la integración del sistema se dividiría en tres componentes (business services, business processes y business operations), como se muestra en la siguiente figura.

También hay una definición llamada "producción" que almacena información sobre los componentes que se van a utilizar (por ejemplo, la información de la conexión).

imagen

La función de cada componente es la siguiente:

Business services
Responsables de recibir información de fuentes externas, crear mensajes y enviar mensajes a otros componentes.

Business processes
Esta función se activa cuando se recibe un mensaje. Es responsable de coordinar el proceso (llamando a los componentes en el orden definido, esperando respuestas, esperando los resultados de la revisión humana, etc.).

Business operations Esta función se activa cuando se recibe un mensaje. Tiene la función de solicitar al sistema externo que procese el mensaje.

Los mensajes se utilizan para enviar y recibir datos entre componentes.

Los componentes que son distintos de los business services inician el procesamiento cuando reciben un mensaje.

La pregunta es: ¿cuál es el propósito de crear y utilizar este mensaje?

Los mensajes se crean mediante la recuperación de la información que quieres transmitir al sistema externo a partir de los datos introducidos en el business service.

Dado que no todos los sistemas externos conectados a IRIS utilizan el mismo tipo de formato de datos para transmitir, y el contenido a transmitir varía, la producción puede definir libremente las clases de mensaje de acuerdo con la información.

Hay dos tipos de mensajes: solicitudes (= mensaje de solicitud) y respuesta (= mensaje de respuesta). El mensaje que desencadena la activación del componente se denomina solicitud (= mensaje de solicitud), y el mensaje al que responde el componente después de su procesamiento se denomina respuesta (= mensaje de respuesta).

Estos mensajes se diseñarán mientras se considera el proceso de transmisión.

En los siguientes artículos, utilizaremos un caso de estudio para describir la creación de producciones, mensajes y componentes.

0
0 485
Anuncio Esther Sanchez · sep 9, 2021

¡Hola desarrolladores!

Hoy os traemos un breve tutorial, grabado por @David Reche, y disponible en el canal de YouTube de la Comunidad de Desarrolladores en español: Cómo arrancar un contenedor de InterSystems IRIS en Docker.

Es el primer vídeo de una serie de tutoriales grabados por David, en los que explica los primeros pasos para empezar a trabajar con InterSystems IRIS Community Edition. Iremos publicando los tutoriales durante los próximos días.

Tutorial 1: Cómo arrancar un contenedor de InterSystems IRIS en Docker

¡Esperamos que os resulte útil! yes

0
0 147