Skip to Content

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 tbtcjobjobname,
        jobclass
TYPE tbtcjobjobclass VALUE ‘A’,
        jobcount
TYPE tbtcjobjobcount,
        lv_startdate
LIKE sydatum,
        lv_starttime
LIKE syuzeit,
        lv_endtime
LIKE syuzeit,
        authcknam
TYPE tbtcjobauthcknam,
        lwa_report
TYPE SYREPID.

PARAMETER p_jobnm TYPE tbtcjobjobname.

START-OF-SELECTION.

   authcknam = syuname.

   lv_startdate = sydatum.
   lv_starttime
= syuzeit.

*  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 = syuzeit + interv.

     WRITE w_loop TO jobname.
    
CONDENSE jobname NOGAPS.

     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 sysubrc = 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 sysubrc = 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.


To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply