Table of Contents

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

Resource

Cette méthode a l'avantage de pouvoir être déclenché depuis une update task (contrairement à la création dynamique).

Mise en place :

  1. Créer l'évènement en SM62.
  2. Créer le job en SM36.
  3. 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.