Agregar un control de errores a un trabajo
Este ejemplo explica cómo añadir control de errores a un trabajo que enumera el contenido de un directorio y se puede invocar desde un explorador como servicio web. En concreto explica cómo configurar FlowForce Server para que:
•si el trabajo se ejecuta correctamente, el resultado aparece en el explorador
•cuando el trabajo no se pueda ejecutar, se envíe un aviso por correo electrónico a un destinatario concreto.
•cuando termine de ejecutarse el trabajo, independientemente del estado de la ejecución, se registre el ID interno del trabajo en un archivo del sistema local.
Para ello vamos a crear un bloque protegido con dos condiciones de control de errores (Cuando haya errores y Siempre) que se encargarán de las dos posibilidades mencionadas.
Requisitos
•Licencias necesarias: FlowForce Server.
•Los servicios FlowForce Web Server y FlowForce Server deben escuchar en la en la dirección de red y en el puerto configurados previamente.
•Tener definidas las opciones de configuración de correo electrónico de FlowForce Server (véase Configurar parámetros de correo electrónico).
•Debe tener una cuenta de usuario de FlowForce Server con permisos para uno de los contenedores (en este ejemplo se usa el contenedor /public porque está automáticamente abierto a todos los usuarios autenticados).
•El trabajo de este ejemplo escribe su resultado en disco. Por tanto, en el sistema operativo en el que esté instalado FlowForce Server debe tener acceso de lectura y escritura en ciertos directorios. En este ejemplo usamos C:\FlowForceExamples\ErrorHandling.
Consejos
•Aunque en este ejemplo se utilizan rutas de acceso y comandos Windows, también puede probarlo en otros sistemas operativos. Basta con ajustar las rutas de acceso y los comandos según corresponda.
Crear el trabajo
1.En el equipo en el que se está ejecutando FlowForce Server, cree un directorio de trabajo para el trabajo. En este ejemplo usamos C:\FlowForceExamples\ErrorHandling.
2.Inicie sesión en la interfaz de administración de FlowForce Server Web y vaya al contenedor /public/Examples. Este contenedor ya existe si lo creó en los ejemplos anteriores; de lo contrario, créelo con el comando Crear | Crear contenedor.
3.Haga clic en Crear trabajo y asigne un nombre al trabajo que está creando, por ejemplo "ListDirectory". También puede escribir una descripción si quiere.
4.En "Parámetros de entrada del trabajo" haga clic en el botón para añadir un parámetro de tipo "cadena de texto". En tiempo de ejecución este parámetro da la ruta de acceso del directorio. En este ejemplo el nombre del parámetro es "inputDir"; como verá, lo usaremos en los pasos siguientes.
5.En "Pasos de ejecución" haga clic en nuevo identificador de Error/Operación correcta.
6.En "Ejecutar con identificador de error/operación correcta si hay errores" haga clic en el botón y agregue un paso de ejecución nuevo con esta configuración:
Ejecutar función | Busque y seleccione la función /system/shell/commandline |
Comando | Escriba este comando shell:
dir {inputDir}
Donde inputDir es el nombre del parámetro que acabamos de crear. El nombre aparece entre llaves porque en tiempo de ejecución ese contenido es reemplazado de forma dinámica con el valor del parámetro. Para más información consulte Incrustar expresiones en campos de cadena. |
Anular en caso de error | Deje esta opción como está. Para más información consulte la descripción de la función /system/shell/commandline. |
Directorio de trabajo | Introduzca la ruta de acceso al directorio de trabajo que creó anteriormente, por ejemplo C:\FlowForceExamples\ErrorHandling |
7.Debajo de la condición Cuando haya errores, haga clic en el botón y añada un paso de ejecución nuevo con esta configuración:
Ejecutar función | Busque y seleccione la función /system/mail/send | ||
De | Escriba la dirección de correo electrónico del remitente, por ejemplo flowforce@localhost. Deje este campo vacío si ya definió las opciones de configuración de correo electrónico en la página Administración. | ||
Para | Escriba la dirección de correo electrónico del destinatario. | ||
Asunto | Escriba el asunto del correo electrónico. Por ejemplo:
La parte que está entre llaves es una expresión de FlowForce que llama al a función instance-id para obtener el ID único de la instancia actual (fallida) del trabajo. | ||
Cuerpo del mensaje | Escriba esta expresión de FlowForce Server:
Las partes que están entre llaves son dos expresiones de FlowForce. Estas expresiones obtienen el resultado erróneo y lo convierte en una cadena que será el cuerpo del mensaje:
•La función failed-step devuelve el result del paso que falla. Se trata de un tipo abstracto de FlowForce que, para que sea útil, se debe suministrar como argumento a las funciones exitcode o stderr, véanse los puntos siguientes. •La función exitcode recibe el código de salida del error de result en forma de número. Recuerde que este paso está dentro de un controlador Cuando haya errores, por lo que se espera que haya un código de salida (y puede que también un resultado de error). Si el paso estuviera en un controlador Cuando la operación funcione correctamente o en un paso estándar, entonces habría que procesar result de otra manera (por ejemplo, como se describe en Crear un trabajo a partir de una transformación de StyleVision). •La función stderr obtiene el resultado de error estándar del error de la función result, en forma de secuencia. •La función error-message usa el texto del mensaje de error de FlowForce tal y como este aparece en el registro. También puede devolver una cadena vacía si no hay ningún error o si no es técnicamente posible recuperar ese texto de error. •La función string convierte el código de salida numérico en una cadena (esto es necesario porque el cuerpo del correo electrónico es de tipo string). •La función content convierte el resultado del error de secuencia en cadena de texto.
|
8.Ahora haga clic en nuevo identificador de error/operación correcta y después seleccione Siempre.
9.Debajo de la condición Siempre, haga clic en el botón y añada un paso de ejecución nuevo con esta configuración:
Ejecutar función | Busque y seleccione la función /system/shell/commandline | |
Comando | Escriba este comando shell:
En Windows este comando escribe el ID del trabajo en un archivo llamado RegistroTrabajos.txt. Si el archivo ya contiene datos, el texto nuevo se añadirá después de los datos actuales. | |
Directorio de trabajo | Introduzca la ruta de acceso del directorio que creó antes (C:\FlowForceExamples\ErrorHandling).
Este directorio sirve para resolver la ruta de acceso al archivo JobLog.txt. |
Llegados a este punto el trabajo tendrá este aspecto (si es que no usó rutas de acceso o comandos distintos a los de las instrucciones).
10.Para convertir el trabajo en un servicio web debe marcar la casilla Permitir acceso a este trabajo por HTTP... e introducir el nombre del servicio web, por ejemplo:
No olvide anotar el nombre porque lo necesitará más tarde para llamar al servicio.
11.En "Credenciales" seleccione un registro de credencial que ya exista o indique una credential local.
12.Haga clic en Guardar.
Ejecutar el trabajo
Con los pasos anteriores la configuración del trabajo ya está completa. Como es un trabajo expuesto como servicio web lo puede ejecutar de varias formas:
•Vaya a Inicio y haga clic en Ver los desencadenadores y servicios activos. Después haga clic en la URL del trabajo que aparece en la columna "Información".
•Introduzca http://127.0.0.1:4646/service/ListDirectoryService en la barra de direcciones del explorador. Tenga en cuenta que esta URL solo funciona si el servicio FlowForce Server escucha en la dirección host y el nombre de puerto predeterminados. Si su puerto y host tienen otra configuración vaya a la Configuration page y cambie la dirección.
•Si configura el campo Nombre de host de FlowForce Server desde la página de configuración puede ejecutar la llamada al servicio web directamente desde la página de configuración del trabajo. Para ello haga clic en el botón que hay junto a la casilla Permitir acceso a este trabajo por HTTP. Este botón solo se habilita si configura este campo Nombre de host. Si no lo ha hecho, puede llamar al servicio web escribiendo la URL manualmente en la barra de dirección.
Si la aplicación le pide credenciales al acceder al servicio web, use las mismas que usó para acceder a FlowForce Server.
Recomendamos usar las credenciales de FlowForce Server para la autenticación HTTP solo en casos de prueba. Para producción es mejor crear un usuario nuevo, darle el permiso Servicio - Uso en el contenedor en el que está el trabajo y después acceder al servicio web con esa cuenta. Para desactivar la autenticación HTTP y hacer público el servicio web debe dar el permiso Servicio - Uso al usuario Anónimo, véase ¿Cómo funcionan los permisos?. |
Este trabajo usa parámetros, por lo que se le pedirá que introduzca un valor de parámetro cuando acceda el servicio web desde el explorador.
Si introduce una ruta de directorio válida, como por ejemplo C:\, el trabajo se ejecuta y el resultado aparece en el explorador.
Asimismo, cada vez que se ejecuta el trabajo, la ID de la instancia del trabajo se anexa al contenido del archivo JobLog.txt, conforme a la condición "Siempre" que configuró antes.
Para probar la condición "Cuando haya errores" puede cambiar el parámetro "inputDir" a algún valor incorrecto (como una ruta que no existe). En este caso el explorador muestra un mensaje de error y FlowForce Server envía un correo electrónico a la dirección indicada en el campo del destinatario del controlador "Cuando haya errores". Ese correo electrónico tendría un aspecto parecido a este:
Como hemos explicado antes, las funciones de error que se usan en este ejemplo no siempre devuelven un valor por cada configuración de trabajo que es posible. Por tanto, el nivel de detalles del correo electrónico depende de la configuración del trabajo y del tipo de error, es decir, que los campos del correo electrónico Código de salida, Error estándar y Mensaje de error no siempre contienen texto. La referencia más exacta para averiguar el motivo del error es el registro de FlowForce Server. |