====== Jobs ======
__Création__ : ''SM36''
__Monitoring__ : ''SM37''
''SM39'' Job Analysis
''SM62'' Maintain Events
''SM64'' Release of an Event
''SM65'' Background Processing Analysis Tool
===== Déclenchement =====
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.
==== A la volée ====
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.
==== Déclenchement sur évènement ====
[[http://wiki.scn.sap.com/wiki/display/ABAP/SAP+Event|Resource]]
Cette méthode a l'avantage de pouvoir être déclenché depuis une update task (contrairement à la création dynamique).
Mise en place :
- Créer l'évènement en ''SM62''.
- Créer le job en ''SM36''.
- Appeler la méthode ''cl_batch_event=>raise'' avec l'ID job nouvellement créé dans le programme déclencheur.
===== Monitoring des jobs en ABAP =====
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'.
===== Détecter si l'exécution se déroule en arrière-plan (background) =====
Ou mieux : détecter si un GUI est disponible :
CALL FUNCTION 'GUI_IS_AVAILABLE'
IMPORTING
return = rv_available.