Esta utilidad consiste
en dos mandatos que pueden incluirse en un programa
CL para identificar y controlar los trabajos sometidos
por él mismo.
Como son mandatos que devuelven valores en variables
pasadas como parámetros no pueden utilizarse
desde la línea de comandos; solo pueden utilizarse
dentro de un programa, normalmente, un CL.
Pueden usarse conjunta o independientemente, uno
para identificar el trabajo sometido y otro para
determinar su estado y actuar en función del
mismo.
RTVSBMJOB JOB(&trabajo) USER(&usuario) NBR(&numero)
JOBQ(&colatrab) LIB(&biblioteca)
Este mandato debe seguir inmediatamente a un mandato
SBMJOB. Devuelve la identificación completa
del trabajo sometido, así como la biblioteca
y la cola de trabajos donde se ha situado. Admite
que se recuperen todos esos datos a la vez o solo
la identificación del trabajo sometido o la
cola de trabajos, según se necesite.
RTVJOBSTS JOB(numero/usuario/trabajo) STS(&estado)
PGMSTACK(&pila)
Devuelve el estado de un trabajo determinado (debe
especificarse completo) y la pila de llamadas de
dicho trabajo. Admite recuperar el estado y la pila
de llamadas de una sola vez o recuperar solo uno
de esos datos, según se desee.
USOS
La utilización de estos comandos se muestra
en el programa PRUEBA, incluido en el ZIP. Este ejemplo
consiste en un programa que empieza sometiendo un
trabajo y después de hacer lo que tenga que
hacer, antes de finalizar, verifica si el trabajo
sometido ha terminado y, si no es así espera
a que termine.
No obstante, pueden utilizarse para más funciones,
como mostrar a un usuario la lista de trabajos sometidos
desde el programa actual y gestionarlos desde el
propio programa. Por ejemplo, si un programa somete
a batch la emisión de facturas de un cliente
y el usuario ha enviado consecutivamente varias de
estas solicitudes, podría incluirse una pantalla
en dicho programa para que el usuario verifique cuales
están terminadas y cuales no.
Otra función podría ser la sincronización
de tareas auxiliares controladas desde una cadena
principal de procesos. Es decir, un programa con
muchos pasos podría someter a batch aquellos
que pueden ejecutarse en paralelo y hacer que el
proceso principal se detenga antes de iniciar un
paso que requiera que hayan terminado todos o algunos
procesos batch previos. Así mismo si a un
trabajo sometido se le pasa como parámetro
la identificación de otro trabajo sometido
previamente y que también tiene alguna restricción
de dependencia, podríamos hacer que dichos
trabajos se ejecutaran en paralelo hasta el punto
donde uno deba esperar a que el otro haya terminado.
Los condicionantes de restricción entre trabajos
pueden ser más complejos que la simple finalización
de uno de ellos, utilizando la pila de llamadas puede
determinarse que un proceso ya ha ejecutado (o aún
no ha empezado a ejecutar) la parte que supone una
restricción para la ejecución de un
paso determinado del otro trabajo.
Octubre
2006
Puedes bajarte los fuentes en formato
aquí
Autor Ruben Ezquerra