Buen día.
En respuesta a una inquietud generada en la comunidad, quiero compartir este código que hice para probar la funcionalidad de lanzar jobs programados mediante los módulos de función JOB_OPEN, JOB_SUBMIT y JOB_CLOSE, con un intervalo de tiempo definido entre ellos.
El ejemplo es muy simple y toma como fecha y hora iniciales las existentes en el sistema en el momento de ser lanzado el reporte, pero también pueden usarse parámetros o hacerlo tan complejo como se requiera.
El nombre del programa que se va a ejecutar en cada job se define en la variable lwa_report.
Para ajustar la cantidad de jobs a lanzar se usa la variable repetic y el intervalo entre jobs se ajusta en la variable interv con el valor correspondiente en segundos. Para este ejemplo se uso 300 que corresponde a 5 minutos.
Finalmente, el parámetro P_JOBNM es un prefijo para los nombres de los jobs y es opcional .
Gracias por su atención y espero que les sea de utilidad. A continuación va el código:
*&--------------------------------------------------*
*& Report ZTEST_JOB_CALL *
*&--------------------------------------------------*
*& Programa de demostración para generar jobs *
*&--------------------------------------------------*
REPORT ztest_job_call.
DATA : repetic TYPE i, " Numero de repeticiones
interv TYPE i, " Intervalo entre jobs
w_loop TYPE i, " Contar repeticiones
jobname TYPE tbtcjob-jobname,
jobclass TYPE tbtcjob-jobclass VALUE 'A',
jobcount TYPE tbtcjob-jobcount,
lv_startdate LIKE sy-datum,
lv_starttime LIKE sy-uzeit,
lv_endtime LIKE sy-uzeit,
authcknam TYPE tbtcjob-authcknam,
lwa_report TYPE SY-REPID.
PARAMETER p_jobnm TYPE tbtcjob-jobname.
START-OF-SELECTION.
authcknam = sy-uname.
lv_startdate = sy-datum.
lv_starttime = sy-uzeit.
* CONCATENATE 'ABAP' lv_starttime INTO lv_varname.
" Nombre del programa que se va a lanzar en cada job.
lwa_report = 'ZTEST_JOB'.
* Programar 6 repeticiones
repetic = 6.
* Programar intervalo de 5 minutos
interv = 300.
DO repetic TIMES.
w_loop = w_loop + 1.
* Incrementar hora inicial en 5 minutos
lv_starttime = sy-uzeit + interv.
WRITE w_loop TO jobname.
CONDENSE jobname NO-GAPS.
if p_jobnm is NOT INITIAL.
CONCATENATE 'ZTEST_JOB_' jobname INTO jobname.
else.
CONCATENATE p_jobnm '_' jobname INTO jobname.
endif.
CALL FUNCTION 'JOB_OPEN'
EXPORTING
jobname = jobname
jobclass = jobclass
IMPORTING
jobcount = jobcount
EXCEPTIONS
cant_create_job = 1
invalid_job_data = 2
jobname_missing = 3
OTHERS = 4.
IF sy-subrc = 0.
CALL FUNCTION 'JOB_SUBMIT'
EXPORTING
authcknam = authcknam
jobcount = jobcount
jobname = jobname
report = lwa_report
EXCEPTIONS
bad_priparams = 1
bad_xpgflags = 2
invalid_jobdata = 3
jobname_missing = 4
job_notex = 5
job_submit_failed = 6
lock_failed = 7
program_missing = 8
prog_abap_and_extpg_set = 9
OTHERS = 10.
IF sy-subrc = 0.
*
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = jobcount
jobname = jobname
sdlstrtdt = lv_startdate
sdlstrttm = lv_starttime
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
invalid_target = 8
OTHERS = 9.
ENDIF.
ENDIF.
ENDDO.