Additional Blogs by Members
cancel
Showing results for 
Search instead for 
Did you mean: 
dairolozano
Contributor

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.