
Parole chiave: JOB, SAP, ABAP, SM37, SM36, step.
Ecco una guida rapida che spiega l'utilità e la configurazione dei job in SAP!
-Sei uno sviluppatore ABAP? Salva il tuo codice (o la tua guida) su You-Specialist, lo troverai sempre disponibile su internet! Usa questo link, inserisci il codice nel form e noi lo pubblicheremo. Ricorda di dare una breve descrizione sull'utilizzo del codice o sulla sua funzione-
Un job in SAP non è altro che un programma eseguibile in background. Esistono molti modi di eseguire un job in SAP:
- Mediante submit ad un programma esistente
- Lanciando un programma "as job", premendo F9 anzichè F8 (o andando su Program-> Execute in background)
- Da ABAP, mediante l'uso di FM che creano il job e lo scatenano
- Da ABAP, mediante la copia di un job schedulato esistente, e l'esecuzione del job di copia
I job possono essere visualizzati usando la transazione SM37. Un job può essere composto da più step, ovvero può essere creata una scaletta di programmi da richiamare ed eseguire in sequenza. Tali step possono essere definiti, assieme al job, nella transazione SM36.
Lo stato di un job può essere visualizzato nella tabella TBTCO: in chiave troviamo i due campi JOBNAME e JOBCOUNT, che sevono ad identificare in maniera univoca un job. In particolare il jobcount viene assegnato automaticamente da SAP ed è un job ID numerico (campo di tipo CHAR8) dipendente sia dall'orario di lancio (per le prime sei cifre) che da un numero progressivo finale a due cifre. Se per uno stesso jobname vengono creati, in giorni diversi, due job alla stessa ora, il primo dei due avrà un jobcount terminante con "00", mentre il secondo avrà un jobcount terminante con "01", e così via fino a "99".
La tabella degli step è la TBTCP. Esiste anche una view, la V_OP, che mostra una JOIN tra TBTCO e TBTCP.
Lanciare un job da codice ABAP come copia di un job schedulato già esistente
DATA: lf_source_jobcount TYPE btcjobcnt,
lf_source_jobname TYPE btcjob,
lf_target_jobname TYPE btcjob,
lw_new_jobhead TYPE tbtcjob.
* Controllo che il job template sia esistente
SELECT jobcount FROM tbtco INTO lf_source_jobcount UP TO 1 ROWS
WHERE jobname = lf_source_jobname
AND status = 'P'. "schedulato
ENDSELECT.
check sy-subrc = 0.
*Configurazione del job name di copia
CONCATENATE lf_source_jobname '_' 'copy' INTO lf_target_jobname.
* Crea il nuovo job come copia di quello esistente
CALL FUNCTION 'BP_JOB_COPY'
EXPORTING
dialog = 'N'
source_jobcount = lf_source_jobcount
source_jobname = lf_source_jobname
target_jobname = lf_target_jobname
IMPORTING
new_jobhead = lw_new_jobhead
EXCEPTIONS
cant_create_new_job = 1
cant_enq_job = 2
cant_read_sourcedata = 3
invalid_opcode = 4
jobname_missing = 5
job_copy_canceled = 6
no_copy_privilege_given = 7
no_plan_privilege_given = 8
OTHERS = 9.
*Scatenare il job di copia
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = lw_new_jobhead-jobcount
jobname = lw_new_jobhead-jobname
strtimmed = 'X'
EXCEPTIONS
cant_start_immediate = 1
invalid_startdate = 2
jobname_missing = 3
job_close_failed = 4
job_nosteps = 5
job_notex = 6
lock_failed = 7
OTHERS = 8.
Function Modules utili per lavorare via ABAP sui job
***CANCELLAZIONE DI UN JOB SCHEDULATO MA NON SCATENATO
DATA: lw_new_jobhead TYPE tbtcjob.
CALL FUNCTION 'BP_JOB_DELETE'
EXPORTING
jobcount = lw_new_jobhead-jobcount
jobname = lw_new_jobhead-jobname
EXCEPTIONS
cant_delete_job = 1
cant_delete_joblog = 2
cant_delete_steps = 3
cant_delete_time_entry = 4
commit_failed = 5
job_does_not_exist = 6
job_is_already_running = 7
no_delete_authority = 8
OTHERS = 9.
***IN CHE JOB MI TROVO A RUNTIME?
DATA: lf_jobcount TYPE btcjobcnt,
lf_jobname TYPE btcjob.
*Ricava jobname e jobcount direttamente nel programma lanciato come job
CALL FUNCTION 'GET_JOB_RUNTIME_INFO'
IMPORTING
jobcount = lf_jobcount
jobname = lf_jobname
EXCEPTIONS
no_runtime_info = 1
OTHERS = 2.
***LEGGERE IL LOG DI UN JOB
DATA : lf_jobcount TYPE btcjobcnt,
lf_jobname TYPE btcjob,
lw_joblog TYPE tbtc5,
lt_joblog LIKE TABLE OF lw_joblog.
CALL FUNCTION 'BP_JOBLOG_READ'
EXPORTING
client = sy-mandt
jobcount = lf_jobcount
jobname = lf_jobname
TABLES
joblogtbl = lt_joblog
EXCEPTIONS
cant_read_joblog = 1
jobcount_missing = 2
joblog_does_not_exist = 3
joblog_is_empty = 4
joblog_name_missing = 5
jobname_missing = 6
job_does_not_exist = 7
OTHERS = 8.
-Questo contenuto ti sembra utile? Clicca il pulsante "Mi Piace" qui sotto!-