Création : SM36
Monitoring : SM37
SM39
Job Analysis
SM62
Maintain Events
SM64
Release of an Event
SM65
Background Processing Analysis Tool
Un job peut être exécuté une fois ou plusieurs fois (= périodique). Il peut être déclenché manuellement, à la volée, schedulé ou encore par un évènement.
Cette méthode permet de créer dynamiquement un job sans avoir à le créer en SM36
au préalable.
Exemple :
FUNCTION zcreate_job. *"---------------------------------------------------------------------- *"*"Local Interface: *" IMPORTING *" REFERENCE(I_JOBNAME) TYPE TBTCJOB-JOBNAME *" REFERENCE(I_REPID) TYPE REPID *" REFERENCE(I_VARIANT) TYPE VARIANT OPTIONAL *"---------------------------------------------------------------------- DATA lv_jobcount TYPE btcjobcnt. CALL FUNCTION 'JOB_OPEN' EXPORTING jobname = i_jobname IMPORTING jobcount = lv_jobcount EXCEPTIONS cant_create_job = 1 invalid_job_data = 2 jobname_missing = 3 OTHERS = 4. IF sy-subrc <> 0. RAISE others. ENDIF. CALL FUNCTION 'JOB_SUBMIT' EXPORTING authcknam = sy-uname jobcount = lv_jobcount jobname = i_jobname report = i_repid variant = i_variant 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. RAISE others. ENDIF. CALL FUNCTION 'JOB_CLOSE' EXPORTING jobcount = lv_jobcount jobname = i_jobname 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. IF sy-subrc <> 0. RAISE others. ENDIF. ENDFUNCTION.
Cette méthode a l'avantage de pouvoir être déclenché depuis une update task (contrairement à la création dynamique).
Mise en place :
SM62
.SM36
.cl_batch_event=>raise
avec l'ID job nouvellement créé dans le programme déclencheur.Exemple : rechercher le nombre de jobs en cours avec un nom particulier :
SELECT COUNT( * ) INTO lv_nbjob FROM tbtcp WHERE jobname = 'ZPLOP' AND status = 'R'.
Ou mieux : détecter si un GUI est disponible :
CALL FUNCTION 'GUI_IS_AVAILABLE' IMPORTING return = rv_available.