Pasos aplazados
Un trabajo de FlowForce normal devuelve un resultado después de que hayan finalizado todos los pasos de procesamiento, siempre y cuando no se encuentre ningún error. Para los trabajos expuestos como servicios web, esto significa que la transacción HTTP debe mantenerse abierta durante todo el tiempo en que se esté ejecutando el trabajo, lo que puede llevar varios minutos o, en algunos casos, incluso horas, en función del volumen de datos que se procese. Para gestionar este tipo de casos puede usar un tipo especial de paso de FlowForce llamado paso aplazado.
Los pasos aplazados permiten que FlowForce devuelva resultados de inmediato, ya que sólo se procesan una vez el trabajo ha devuelto un resultado. Aunque un trabajo con pasos aplazados devuelva un resultado temprano, se considera que el trabajo está en curso hasta que se complete la ejecución de todos los pasos aplazados.
Agregar un paso aplazado
Puede crear pasos aplazados en cualquier parte del trabajo que admita un paso. Para agregar un paso aplazado siga estos pasos:
1.Cree un nuevo trabajo o abra uno ya existente.
2.Haga clic en el botón Paso aplazado nuevo en la sección Pasos de ejecución.
3.Haga clic en dentro del bloque Aplazado para agregar el paso o los pasos que quiera aplazar.
En función de sus necesidades, puede crear pasos de ejecución, pasos Opción, pasos For-Each y controladores de errores dentro de un bloque Aplazado. También puede anidar bloques de opción dentro de otros bloques aplazados.
Control de errores
Un trabajo puede contener varios pasos aplazados (donde cada uno de ellos contiene un paso o varios que se aplazan) en distintos lugares del trabajo. Crear pasos aplazados puede ser útil para el control de errores: Si ocurre un error dentro de un bloque aplazado los demás pasos no se verán afectados. Un bloque aplazado es como un mini trabajo y se comporta igual que los trabajos normales:
•Si un paso de un bloque aplazado encuentra un error, ese paso se cancela, así como los pasos posteriores en el mismo bloque aplazado, y el error se guarda en el registro.
•Los bloques aplazados no afectan unos a otros. En un trabajo que tiene varios bloques aplazados, un bloque aplazado se ejecuta incluso aunque la ejecución del anterior falle.
•Si un paso aplazado con un bloque protegido encuentra un error, se cancelan todos los pasos aplazados que forman parte de ese bloque.
Casos posibles
A continuación presentamos algunos casos en los que se podrían usar pasos aplazados.
Trabajo con varios pasos aplazados
Los pasos anteriores se ejecutan en este orden: A, C, B, D. Como puede ver, primero se ejecutan los pasos no aplazados, seguidos por los pasos aplazados. El paso C devuelve un resultado.
A
postpone B
C
postpone D
Pasos aplazados con pasos aplazados
También puede añadir pasos aplazados dentro pasos Opción. En este caso el paso aplazado sólo se ejecuta si también se ejecuta la correspondiente rama Cuando o De lo contrario.
when expression=true
{
postpone A
B
C
}
otherwise
{
postpone D
E
F
}
En el trabajo abstracto anterior, si la expresión evalúa en true, los pasos se ejecutan en este orden: B, C, A. De lo contrario, el orden de ejecución será: E, F*, D. El asterisco indica dónde devuelve el trabajo un resultado.
Pasos aplazados en pasos For-Each
En pasos por cada, los pasos aplazados se procesan después de todos los pasos no aplazados, en el mismo orden que el bucle del que forman parte.
for each item in list
{
A
postpone B
}
Por ejemplo, si el bucle se ejecuta tres veces, los pasos anteriores se ejecutan en este orden: A1, A2, A3*, B1, B2, B3. Los dígitos indican la vuelta correspondiente en el bucle. El asterisco indica un paso que devuelve un resultado.
Pasos aplazados anidados en pasos aplazados
También puede anidar pasos aplazados en otros pasos aplazados (véase el extracto de código más abajo). En este caso, primero se ejecutan los pasos exteriores de la misma profundidad y los pasos aplazados anidados se ejecutan sólo después de que haya finalizado el procesamiento de la secuencia matriz. Por ejemplo, imagine que un trabajo consiste en estos pasos aplazados anidados: A, G, N, B, D, F, C, E, H, K, M, J, L. El paso N devuelve un resultado.
A
postpone
[
B
postpone C
D
postpone E
F
]
G
postpone
[
H
postpone J
K
postpone L
M
]
N
Si necesita crear y probar configuraciones avanzadas como la anterior, recuerde que siempre puede hacer un seguimiento del orden de ejecución de los pasos desde el registro de FlowForce.
Ejemplo
Este ejemplo muestra un posible uso de los pasos aplazados. Este trabajo es un buen candidato para ello porque se expone como servicio web y puede ser invocado en cualquier momento por un cliente, incluso desde el explorador.
El paso A ejecuta un comando de shell que requiere tiempo y que enumera de forma recursiva todos los directorios y archivos de dentro de un directorio grande del sistema. Por esta razón, el paso A se define como paso aplazado. El paso B toma el resultado estándar (stdout) generado por A y lo escribe en un archivo. El paso B depende de la salida que genere A y, por tanto, también debe formar parte de la secuencia aplazada. El paso C informa a los emisores de llamadas al servicio de que la tarea se ha suministrado con éxito. Este paso se ha añadido deliberadamente en último lugar, aunque se ejecutará el primero al ejecutar el trabajo. Siempre que se llama al servicio web, los pasos anteriores se ejecutan en este orden: C, A, B. El motivo es que A y B son pasos pospuestos, por lo que C se ejecuta primero.
La ventaja de esta configuración es que el trabajo devuelve un resultado inmediatamente después de ejecutar el paso C y la transacción HTTP puede terminar, lo que libera recursos del servidor para otras solicitudes. Después de devolver el resultado del trabajo, FlowForce procede a ejecutar los pasos aplazados A y B en la secuencia habitual.
Como confirmación, si invoca el trabajo del ejemplo anterior en su explorador, observará que en el explorador aparece el mensaje La tarea se ha suministrado correctamente en unos instantes, mientras el trabajo se sigue ejecutando hasta que crea el archivo output.txt. Si ni A ni B fallan se crea el archivo de salida en la ruta de acceso: C:\FlowForce\Postponed\output.txt.
Nota sobre el orden de los pasos
En este ejemplo el paso C tiene que ser el último del trabajo porque produce el resultado que se envía al explorador. Si coloca el paso C en el primer puesto, se sigue ejecutando primero y el paso aplazado B sigue siendo el último paso del trabajo en ejecutarse. Sin embargo, esto cambiaría el resultado del trabajo y el explorador mostraría una salida vacía parecida a []. La razón es que el resultado de un trabajo de FlowForce es siempre el resultado del último paso que se ejecuta. Los pasos aplazados no tienen un valor de retorno pero producen una secuencia vacía.