6. Definiendo Workflows
Los workflows permite definir acciones de como enviar correos electrónicos, o actualizar otros CFOs, leer datos de otras fuentes.. al producirse un evento de inserción (on.insert), modificación (on.update) y/o borrado (on.delete). O se puede indicar que el workflow se evalúe siempre (on.event)
Para definir workflows podemos indicar internamente en el CFO o definirlo en workflows externos vinculados al CFO. La ventaja de definirlos externamente es que permite una mejor gestión de la complejidad. Si se definen workflows internos y externos se ejecutarán ambos.
Configuración de la plataforma
La Plataforma CLOUD tiene que estar configurada correctamente para poder ejecutar workflows en general se necesitará:
- Tener la variable de plataforma [PlatformVariables.cfo_api_key] con un valor de API-KEY válido para interactuar con CFOs
- Tener configurado CLOUD CHANNEL/Email/Config con el API KEY de mandrill que se utilizará para enviar correos.
Estructura de un workflow asociado a un evento
Los elementos de Workflows asociados a un evento es un array de objetos que incluyen de forma común cuatro atributos:
- action: El tipo de acción que ejecutará el workflow
- active: Que debe valer 'true' para que se evalúe el workflow
- id: Que identifique de forma sencilla el workflow
- conditional: [opcional] Que establece una linea programada que se evaluará para decidir si el workflow se va a ejecutar o no.
- message: [opcional] array para establecer un mensaje de salida en caso de que el workflow se ejecute de forma satisfactoria.
Atributo [action]
Este atributo determina los tipos de acciones que puede ejecutar un workflow:
- setLocalizationLang: Asigna un idioma por defecto que podrá ser utilizado en el resto de workflows
- setVariables: Asigna variables que se utilizarán en los siguientes workflows
- readRelations: Lee datos de otros CFOs para que la información pueda ser utilizada por workflows siguientes.
- sendEmail: Envía un correo electrónico
- updateCFOData: Actualiza información de un CFO
- insertCFOData: Inserta información en un CFO
- hook: Establece una llamada a un API externo
- slack: [in-development] envía un slack a un canal previamente configurado en el sistema
- whatsapp: [in-development] envía un whatsapp a un teléfono previamente configurado en el sistema
Atributo [id]
Sirve para identificar de forma más sencilla el elemento del workflow.
Atributo [active]
Debe valer 'true' para que el elemento del workflow se ejecute. Sirve para desactivar elementos de una forma sencilla.
Atributo [conditional]
Este atributo permite indicar una línea programativa (similar a php o javascript) donde se pueden realizar sustituciones de valor con la información que tenga el CFO. En el ejemplo de arriba se asume que el CFO dispone de dos campos (Department,Type) y que cuando se inserta un registro se evalúan los valores introducidos y si estos equivalen a SOPORTE e INCIDENCIAS el workflow se ejecutará.
Cuando estamos en una actualización (on.update) podemos necesitar comparar valores antiguos antes de la actualización para definir una condición. El acceso a los valores antiguos se realizada poniendo el prefijo 'OLD_' al nombre de la variable. De esta manera podríamos poner condiciones que fueran verdad cuando algún valor haya cambiado:
{"conditional":"'{{OLD_Department}}' != '{{Department}}'",..}
Si la condición devuelve algún error por sintaxis errónea o excepción, esta se mostrará en el resultado de la llamada y el workflow no se ejecutará.
Si este atributo no es enviado, el workflow se ejecutará siempre.
Atributo [message]
Sirve para mostrar un mensaje en pantalla en el caso de que el workflow se ejecute con éxito. La estructura es un array con las siguientes características:
atributo | Descripcion | Ejemplo |
---|---|---|
*title | Título del mensaje. Admite Tags de sustitución con los datos actualizados, modificados o borrados. | {"message":{"title":"Proceso ejecutado correctamente"}} |
type | [opcional] Tipo de mensaje (success por defecto). Muestra un color asociado al tipo: success, error, warning, default, info | {"message":{ |
description | [opcional] Descripción del mensaje. Admite Tags de sustitución con los datos actualizados, modificados o borrados. | {"message":{ |
time | [opcional] Tiempo que el mensaje durará en segundos. (por defecto -1 indicando que quede permanente hasta que el usuario cierre el mensaje) | {"message":{ |
url | [opcional] Url al que redirigir al usuario en caso de que pinche en la notificación | {"message":{ |
Otros atributos
En función del atributo [action] se requerirán más atributos que definiremos en los subcontenidos.