Disparadores — /triggers

Una Recolección con Parámetros de Entrada y una Entrega con contrato de entrada (Payload de Entrada, o tags de escritura en OPC UA, Modbus, Sparkplug y PI) están orientadas a eventos: solo se ejecutan cuando alguien llama a la API dinámica del CMS con los valores. Ese alguien no siempre existe — el sistema que debería llamar nunca se construyó, o la consulta es la misma todos los días.
El Disparador resuelve esto desde dentro del CMS. Guarda los valores fijos que un productor externo enviaría y una programación propia, y en el horario marcado ejecuta la Definición por el mismo camino de la API dinámica. Nada cambia en el programador de las Interfaces: el Disparador es un llamador interno con agenda, no un segundo motor de ejecución.
Qué aparece en la lista
- Recolecciones: solo las que necesitan parámetros — elegibles para la API dinámica (HTTP, SQL Server, Oracle, SQLite, PostgreSQL, InfluxDB, MongoDB, SAP RFC, PI Web API) y con al menos un Parámetro de Entrada declarado. Una Recolección pull común no aparece: ya corre sola en el programador de la Interfaz, y un Disparador la haría correr dos veces.
- Entregas: todas, menos las de las herramientas de Help Desk — un ticket se abre por alerta o con el botón del encabezado, no por agenda. Una Entrega solo ocurre cuando alguien le entrega un mensaje, así que un Disparador de Entrega es “crear este mensaje en este horario”. La que declara contrato de entrada (Payload de Entrada, tags de escritura OPC UA o Modbus, métricas de comando Sparkplug, tags de escritura PI) abre en Campos, uno por alias; la que no declara abre directo en Cuerpo, donde usted escribe el mensaje.
Si la Recolección que busca no aparece, es porque su registro aún no declara Parámetros de Entrada — declárelos allí primero.
Crear un Disparador
- Nombre libre, único. Es el nombre que aparece en Programadores.
- Destino: elija Recolección o Entrega y la Definición. Los combos de Aplicación e Interfaz son solo un embudo para encontrar la Definición; quien la elige directo en la búsqueda ve los dos completados.
- Parámetros: un campo por alias del contrato. Un obligatorio sin valor por defecto debe venir
completo; vacío usa el valor por defecto del registro, cuando existe. Para destinos de equipo
(OPC UA, Modbus, Sparkplug, PI) la pantalla muestra el destino de cada valor y avisa que los
valores se escribirán en el equipo en el horario marcado.
- En la Recolección, un botón alterna entre Campos y JSON: es el mismo objeto de alias, solo que editado como texto — útil para pegar el cuerpo que ya existe en una herramienta externa. Volver a Campos exige un JSON plano válido.
- En la Entrega, el botón alterna entre Campos y Cuerpo. En Cuerpo usted escribe el mensaje entero, en el Content-Type que elija (JSON, XML o texto), y entra por el mismo camino de un POST externo: validación de Content-Type, Transformer y Errores de Negocio de la Entrega. Al pasar a Cuerpo, el texto empieza con el JSON de los campos completados; al volver, un JSON plano se convierte en campos de nuevo, y XML o JSON anidado empieza con los campos vacíos. Si el cuerpo es JSON y la Entrega declara contrato, los obligatorios se verifican igual al guardar; XML y texto quedan a cargo de la propia Entrega, como para cualquier productor.
- Programación, en cinco modos: cada N segundos/minutos/horas; diaria (con opción de solo días hábiles); semanal (días marcados y horario); mensual (día 1 a 28 o último día del mes); o una expresión cron. La pantalla muestra la frase legible y las próximas tres ejecuciones, en el huso del servidor.
Los valores de los parámetros aceptan la misma sintaxis de placeholder de las Recolecciones:
{{dataHoraAtual}}, {{ultimaExecucao}} (la última ejecución de este Disparador — vacía en
la primera) y {{NOMBRE}} de una Variable Global o de Aplicación. Es lo que permite a un
Disparador hacer barridos incrementales — “pedidos desde la última vez” — sin ningún sistema
externo. El botón { } junto a cada valor (y al cuerpo) lista los dos placeholders y las
Variables disponibles. Un placeholder sin valor queda vacío.
Activar, pausar, ejecutar ahora
Todo Disparador nace desactivado. Crear no ejecuta nada.
- Activar solo ocurre en esta pantalla, tras una pregunta que muestra el destino, los parámetros, la frecuencia y la próxima ejecución. La regla es del servidor: intentar activar un Disparador desde la pantalla de Programadores es rechazado, y esa pantalla lo trae aquí.
- Pausar es inmediato, desde aquí o desde Programadores.
- Ejecutar ahora dispara una ejecución fuera de la agenda. En un Disparador mensual de “último día”, el disparo manual ignora la regla del día — es exactamente para probar.
Qué pasa en la ejecución
- Recolección: la búsqueda corre en el origen con los parámetros fijos, y los mensajes siguen el reenvío configurado en la Recolección. Si la Aplicación de origen está fuera de línea, los parámetros quedan guardados y la Interfaz vuelve a ejecutar la búsqueda cuando regresa.
- Entrega: nace un mensaje en la Interfaz — con el cuerpo
{alias: valor}en modo Campos, o con el texto crudo y el Content-Type elegido en modo Cuerpo — y sigue el flujo normal — Transformer, Error de Negocio, reintentos. El mensaje no se marca como prueba. - Destino desactivado, contrato que cambió y dejó un obligatorio sin valor, falla en el origen: todo se vuelve error en el historial del programador y en la columna “Última ejecución”. El Disparador no se desactiva solo — pausar es decisión suya, mirando el error.
- En las pantallas de Mensajes, el mensaje generado por un Disparador lleva un rayo discreto junto al estado, con el nombre del Disparador en el título; el popup y la página de detalle muestran el rayo con el nombre. Es solo una marca de origen, sin atajo: a diferencia del mensaje de prueba, es tráfico real y cuenta en paneles e informes.
En Programadores
Cada Disparador es un programador trigger-<id>, listado en el grupo Disparadores de
Programadores, con el nombre que usted dio. Allí se puede pausar, ejecutar
ahora y ver el historial de ejecuciones; editar la programación y activar se hacen aquí.
Historial
Dos historiales, con botones distintos en la fila:
- Ejecuciones — cada disparo, con duración, resultado y mensaje (el mismo historial del programador).
- Cambios — quién creó, quién cambió qué (antes y después), quién activó, desactivó, ejecutó manualmente o eliminó. Sale del registro de auditoría.
Import/Export, Packs y MCP
Los Disparadores viajan en Import/Export como el dominio Disparadores, referenciando la
Definición destino por su sigla. Un Pack puede declarar Disparadores para sus propias Recolecciones y
Entregas. Por el Servidor MCP, cms_list_triggers lista y
cms_create_trigger crea. En todos los casos el Disparador llega desactivado.
Permiso
La Herramienta es /triggers, en el grupo Config. de Integración, justo después de Entregas. El
recorte es el mismo de las demás pantallas de registro: usted ve los Disparadores cuyas Definiciones
destino están en sus Interfaces.