Flujo de integración
El Flujo de Integración proporciona conceptos de procesamiento de datos, llamados acciones, permitiendo un alto nivel de personalización en el desarrollo y mantenimiento de los procesos de integración.
Qué se puede hacer a través del Flujo de Integración:
- Proporcionar servicios REST;
- Ejecutar tareas programadas;
- Realizar lecturas de archivos;
- Realizar conversiones: String a Json, Json a XML, XML a Json, etc.;
- Genere hojas de cálculo de Excel y otros informes;
- Enviar correos electrónicos;
- Ejecutar códigos Java.
La pantalla de lista muestra todos los flujos de integración en el entorno, permitiendo a los usuarios ver el nombre del método (equivalente al punto final generado para la llamada de integración), fecha de la última modificación, indicador de integración activa, tipo de modo de activación y contador de fallas consecutivas en las últimas ejecuciones. .
En la pestaña de acciones, puede comenzar a procesar el flujo, ir a la pantalla de edición, eliminar el registro, exportar (para copias de seguridad o migración) o navegar a la pantalla de monitoreo de integración.
Flujo de descanso
Proporciona un punto final al que pueden llamar sistemas externos.
Campos disponibles y sus respectivas funcionalidades:
- Activo: Define si se puede llamar al punto final;
- Mostrar URL: Muestra la URL del punto final que realiza la llamada del flujo de integración;
- Nombre del flujo: Identificador de punto final;
- Tipo de integración: DESCANSAR;
- Cola de integración: Contexto de ejecución dentro del entorno, alcance de las colas de procesamiento;
- Máximo de fallos consecutivos: Establece el número máximo de fallas consecutivas antes de enviar una notificación de inestabilidad (verNotificaciones);
- Descripción del flujo: Editor de texto que permite crear documentación y contextualización relacionada con el Flow;
- Método HTTP del servicio web: Método de solicitud de llamada de flujo de integración;
- Tipo de autorización de servicio web: Ninguno (público), Portador (código fijo) o Autenticación básica (asociada a un registro de Credencial de plataforma);
- Token de autenticación: Token o Credencial que se asociará con el tipo de autorización del servicio web.
Campos disponibles y sus respectivas funcionalidades:
- Activo: Define si se puede llamar al punto final;
- Nombre del flujo: Identificador de punto final;
- Tipo de integración: TRABAJO;
- Cola de integración: Contexto de ejecución dentro del entorno, alcance de las colas de procesamiento;
- Descripción del flujo: Editor de texto que permite crear documentación y contextualización relacionada con el Flow;
- Programación CRON: Código con 6 parámetros que definen la frecuencia de integración según [http://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html](http://www.quartz-scheduler. org /documentation/quartz-2.3.0/tutorials/crontrigger.html)
- Máximo de fallos consecutivos: Establece el número máximo de fallas consecutivas antes de enviar una notificación de inestabilidad (verNotificaciones).
Las acciones son las partes que componen un Flujo de Integración y representan abstracciones de procedimientos tales como: llamadas a servicios web, consultas y cambios a bases de datos, envío de correos electrónicos, reemplazo de contenidos, concatenación de datos, entre otros. Realizar operaciones no previstas en elAcciones nativas ahí está elEjecutarJavaAction, responsable de interpretar el código Java durante la ejecución del Flujo de Integración.
Cada Acción se configura según las indicaciones de la interfaz, pero todas comparten los siguientes campos:
- Nombre: Identificador de acción, utilizado para hacer referencia a suvalor en otros puntos en el contexto de ejecución del Flujo;
- Acción: Identificador de tipo de acción acompañado de una descripción del tratamiento. El campo tiene funcionalidad de búsqueda/autocompletar.
- Desactivar acción: Omite el procesamiento de esta Acción;
- Deshabilitar registros: No escribe los detalles del procesamiento de esta Acción en el Panel de Seguimiento (verEscucha);
- Descripción: El campo para describir el propósito de esta Acción en el Flujo, se muestra en laCompartir flujo mientras edita un flujo;
- Campos personalizados: Según cada Acción.
Muestra la secuencia de acciones que se procesarán en un nivel (o sangría) determinado del flujo de integración.
Muestra una descripción general del flujo de integración, indicando todosFlujos alternativos (sangrías en ejecución) asociadas conAcciones condicionales o Acciones iterativas.
Durante los flujos de integración, es posible hacer referencia a los valores de otras Acciones que ya se han ejecutado hasta el momento en el contexto de la integración. Por ejemplo, unEjecutarQueryDatabaseAction.
Además, el contexto de integración también puede acceder a los valores del cuerpo de la solicitud recibida (RequestBody), encabezados de llamada y parámetros de URL a través delobjetos de contexto:cuerpo,encabezados yparámetros, respectivamente.
Todos los campos de texto de la plataforma que permitan la referencia dinámica de valores tendrán el siguiente descriptor:
El texto entre los símbolos.# indicarán qué Acción o campo de una Acción (si tiene un valor de tipo Objeto), tiene el valor a utilizar durante el tiempo de ejecución.
El valor se reemplaza en tiempo de ejecución en forma de texto, ocupando el espacio identificado por los símbolos #. Por ejemplo, si configuramos una ExecuteQuerySingleLineDatabaseAction de la siguiente manera:
Suponemos que las accionesnúmero de control y comprobar-numcad existen en la integración y fueron ejecutados antes de nuestra consulta, de la siguiente manera:
De esta manera, elconsulta resultante:
Si la Acción referenciada no existe (o no se ejecutó durante el contexto de ejecución de la integración), el resultado del reemplazo serávacío y puede causar errores de integración, por ejemplo, si la acción número de control Si no existiera, tendríamos la siguiente situación:
En algunos tipos de acciones, como las condicionales, los campos de entrada esperarán unevaluación de la condición que puede consultar el valor del Objeto (Cadena, Mapa, Entero…) de una Acción determinada (o campo de una Acción) usando la sintaxis get(identificador) o get(identificador).get(atributo).
Llamamos Flujo Alternativo a cualquier conjunto de Acciones realizadas sólo en determinadas situaciones. Para acceder al Flujo Alternativo de una Acción, simplemente haga clic en el iconoFlujo alternativo ubicados tanto en el Mapa de Acción como en el Flujo de Acción. Luego, el contenido del Flujo de acciones mostrará las Acciones de flujo alternativas acompañadas de un indicador de qué Acción está ejecutando estas instrucciones.
Para volver al nivel de ejecución anterior, simplemente utilice el botónpara volver o utilice el acceso directo paraUbicación de la acción.
Tipo accionesPara la acción esperar recibir un objeto de tipoLista y lleve a cabo los procedimientos descritos en su Flujo Alternativo para cada objeto en la lista de entrada. Durante la ejecución del flujo alternativo, se puede acceder al objeto que se está iterando por el valor de la propia acción iterativa.
Después de completar todas las iteraciones, el contexto de ejecución va a la Acción que está después del Iterativo (o "abajo" en la vista de la interfaz.
En el ejemplo anterior podemos acceder al valor del objeto que se está iterando en elpara-registro-de-procesos dentro de su Flujo Alternativo, para hacer esto simplemente haga referencia al valor del para-registro-de-procesos, como en la imagen del apartado Acciones Condicionales donde tenemos la configuración delactualización de tratamiento , una Acción Condicional que está en el Flujo Alternativo de nuestra Acción Iterativa.
Tipo accionesSiAcción evaluar una condición descrita en Java y procesar su flujo alternativo si el resultado es falso. Si el resultado de la evaluación de la expresión devuelve verdadero, el contexto de ejecución pasa a la siguiente acción.
Es importante tener en cuenta que una vez finalizado el procesamiento de un flujo alternativo de una acción condicional, se interrumpe el contexto de ejecución del "nivel" en el que se llamó la IfAction. Esto significa que en el ejemplo anterior, siactualización de golosinas devuelve false, su Flujo Alternativo será procesado y luego de eso pasamos a la siguiente iteración de nuestro ForAction, sin ejecutar elmensaje-error-tipOpe y lo siguiente, ya que el contexto de ejecución de esta iteración se manejó en IfAction. Si IfAction está fuera de una iteración (como en el flujo raíz/principal), el proceso de integración finalizará.
A continuación se muestra un diagrama que representa un ejemplo de procesamiento del tipo Flujo de Integración:
¿Qué debemos hacer cuando queremos continuar con el procesamiento de integración después del procesamiento condicional? Al final de este condicional, podemos insertar unIr a la acción, responsable de mover el puntero de ejecución del flujo a cualquier otra Acción, utilizando el nombre de la Acción como identificador (tenga cuidado al crear múltiples Acciones con el mismo nombre). Se debe tener cuidado con la lógica utilizada junto con esta Acción, ya que puede generar bucles infinitos dentro de un proceso. Como regla general, evite realizar bifurcaciones para acciones que se encuentran en el pasado en relación con el contexto de ejecución. Por ejemplo:
La acciónEjecutarJavaAction proporciona un campo para insertar un fragmento de código Java que se procesará durante el tiempo de ejecución del flujo de integración.
Podemos asociar una acción Java con un método en el sentido de que, cuando el intérprete identifica undevolver en código Java, este valor se asignará a la Acción (en el caso de la imagen,mi-proceso) en cuestión para futuras referencias en el contexto de la Integración (get(mi-proceso )). Si el código no tiene una instrucción de devolución, la Acción tendrá un valor nulo.
Durante el procesamiento de una acción Java, es posible obtener valores del contexto de integración utilizando elreferencia por valor en el texto (usando el símbolo #) de la misma forma que en otras Acciones. ELreferencia de valor en el objeto es similar, pero debe usarse en un objeto de contexto (llamado contexto) que el intérprete de acciones de Java ya tiene.
Por ejemplo: String urlStr = "#baseURL#"; y String urlStr = context.get(baseURL); devolverá la misma información si la acciónURL base contiene, en su valor, información de tipo String. Ahora digamos que una acción llamadami-consulta, del tipoEjecutarQuerySingleLineDatabaseAction, contiene el resultado de una consulta de base de datos (representada en el contexto de integración como un objeto de mapa). La forma correcta de referenciarlo mediante código Java sería Map consulta = context.get(minha-query);:
Si el intérprete encuentra Map query = #minha-query#; Sería como asignar un valor de cadena (referencia de valor de texto) a un objeto de mapa y esto resultaría en un error de procesamiento de integración.
Porque lo que se interpretó durante el procesamiento fue:
Ejemplo de mapa = {respuesta=Contenido de mi cadena};
ejemplo de devolución;
El intérprete de código Java de Integration Flows no admite actualmente funciones de flecha ni genéricos.
Ejemplo:
Elemento de cadena = "TEXTO";
Lista<Cadena> miLista = nueva ArrayList();
miLista.put(elemento);
devolver miLista;
Mientras:
Elemento de cadena = "TEXTO";
Lista miLista = nueva ArrayList();
miLista.put(elemento);
devolver miLista;
En los flujos REST existen respuestas estándar para situaciones donde hay un error de procesamiento o en las entradas de la solicitud (códigos 4XX y 5XX) en el siguiente formato:
{
"marca de tiempo": cadena,
"estado": Número,
"error": Cadena,
"mensaje": cadena,
"ruta": cadena
}
Dóndemarca de tiempo tiene el formatoAAAA/MM/DD HH:mm:SS:sss ycamino indica el punto final de integración que devolvió un determinado error enerror y detalles enmensaje.
En caso de procesamiento exitoso (estado 200), CONNECT permite personalizar la respuesta en función del valor de la **última acción ejecutada**. De esta forma, el punto final de un Flujo de Integración puede devolver directamente el valor en texto, un número o booleano por ejemplo.
Para que la respuesta del punto final esté en formato JSON, el último valor devuelto dentro del contexto de ejecución debe ser de tipo Objeto/Mapa. Este objeto se puede construir con acciones dedicadas comoCrear mapa vacío,Agregar objeto al mapa,ConvertirJsonStringToJsonObjectAction ,EjecutarJavaAcción , entre otros.
Considere el siguiente flujo:
Cuando llamamos al punto final con elúltimo procesamiento trayendo elcadena de retorno tenemos la respuesta:
Mientras que si devolvemos un Map como último valor, se transforma a JSON:
Manejo de errores con TryCatchAction
ELPruebaCatchAction funciona de manera similar asiAcción, es decir, el bloque de ejecución donde PruebaCatchAction se llama se interrumpe una vez finalizado el procesamiento de su Flujo Alternativo. Para continuar la integración después de laPruebaCatchAction, es necesario utilizar unIr a la acción (ver apartado sobre desviaciones en el procesamiento).
PruebaCatchAction no hay errores en su transmisión alternativa, regresaránulo en acción:
PruebaCatchAction con errores en su flujo alternativo, devuelve el mensaje descriptivo del error en el registro, mientras que la Acción misma almacena elObjeto de excepción en acción:
Objeto de excepción guardado en la acción try, de tipo TryCatchAction, después de un error:
Realizar un tratamiento del tipoAtrapar, solo usa una acción condicional (siAcción) poco después delPruebaCatchAction, que seguirá adelante si regresanulo, si se devuelve algo más se realizará un tratamiento condicionado.
Ejemplo de uso:
Tiempo de espera de integración
Controlar el tiempo de ejecución de los procesos de integración es crucial, asegurando la eficiencia y el rendimiento adecuado en las integraciones entre sistemas. Configuración de tiempo de espera en integracionesDESCANSAR yTRABAJO se puede utilizar para definir un tiempo máximo de ejecución para las integraciones, en segundos, asegurando que las integraciones se completen dentro de los plazos establecidos o devolver un error:
Paralelismo en transmisiones programadas
Además de controlar el tiempo de ejecución, flujos del tipoTRABAJO tiene la definición de Ejecuciones Simultáneas, permitiendo controlar la cantidad de procesos en estas integraciones, posibilitando estar activo en los casos en que el tiempo de ejecución del flujo sea mayor que el tiempo entre ejecuciones. Esta es una consideración importante, ya que las integracionesDESCANSAR puede recibir valores específicos para ser integrados en la solicitud, los flujos programados siempre comienzan a procesarse con el mismo estado, situaciones como esta pueden ser peligrosas, ya que permitiría iniciar otro proceso antes de que se complete el anterior.
El valor predeterminado para ejecuciones simultáneas es 1, lo que representa la ejecución de un solo proceso. Si se produce un nuevo desencadenador programado durante una ejecución en curso, se evitará el nuevo desencadenante.
Llamadas sincrónicas y asincrónicas a transmisiones REST
los flujosDESCANSAR CONNECT se puede llamar de forma sincrónica o asincrónica, según la URL utilizada. La elección entre procesos sincrónicos y asincrónicos depende de las necesidades específicas del sistema y de las expectativas de rendimiento.
En las llamadas síncronas, el solicitante espera a que se complete la ejecución del proceso antes de recibir la respuesta establecida en el Flujo de Integración. Esto generalmente implica tiempos de respuesta predecibles, cortos o inmediatos, adecuados para interacciones que necesitan alguna información obtenida en el retorno del flujo CONNECT.
Por otro lado, las llamadas asíncronas permiten enviar la solicitud sin esperar a que el proceso se complete inmediatamente, recibiendo un “OK” (estado 200) inmediatamente después de la solicitud.
Este enfoque es valioso para tareas que pueden llevar más tiempo, como procesos por lotes u operaciones intensivas. Sin embargo, introduce la necesidad de gestionar el estado de las transacciones, abordando posibles discrepancias temporales entre solicitudes y respuestas.
Cerrar el procesamiento en curso
Interrumpir un flujo de integración es esencial para hacer frente a imprevistos, corregir errores o realizar adaptaciones dinámicas en el entorno operativo, con el fin de evitar impactos negativos por problemas como fallas de comunicación, cambios inesperados en los datos o ajustes necesarios en las reglas de negocio. Esta capacidad de intervención proporciona una gestión proactiva del sistema de integración, asegurando estabilidad y eficiencia continua en las operaciones.
Al seguir el seguimiento de cualquier Flujo de Integración en el estado deEn curso Es posible interrumpir la ejecución utilizando la opción Cerca. Después de que se interrumpe el procesamiento, el registro de monitoreo indica qué usuario fue responsable de la acción y cierra el flujo en un estado de estado.Error.
Compilación de flujo al guardar
Cada vez que se guarda un Flujo de Integración, la plataforma analiza todas sus Acciones. El retorno de este análisis define si el flujo se puede guardar (advertencias) o si hay alguna configuración no permitida; este último caso generalmente reservado para operaciones en Acciones del tipoEjecutarJavaAction.






