Categorias

Submissão de JOBs em sequência no ABAP

Este programa tem por finalidade a submissão de JOBs em sequência, isto é, a partir da lista de parâmetros, ele submete o primeiro da lista imediatamente e os demais sucessivamente após o término do job anterior.

REPORT ZYPCFPSSBMJOB 
MESSAGE-ID ZY 
NO STANDARD PAGE HEADING. 
************************************************************************ 
* Programa : ZYPCFPSSBMJOB - Submissão de Jobs relacionados * 
* Autor : Walmir Basevic - Pimentel C.A. * 
* Criação: : 12/05/2000 Primeira liberação: / / * 
* Modificações : * 
* 1) * 
* Propósito: * 
* Data: / / por: * 
* 2) * 
* Propósito: * 
* Data: / / por: * 
************************************************************************ 
************************************************************************ 
** ** 
** Este programa tem por finalidade a submissão de JOBs em sequência, ** 
** isto é, a partir da lista de parâmetros, ele submete o primeiro ** 
** da lista imediatamente e os demais sucessivamente após o término ** 
** do job anterior. ** 
** ** 
************************************************************************ 
************************************************************************ 
*

*** Declaração de tabelas e estruturas do dicionário 
TABLES: 
TBTCJOB. "Estrutura para transferir dados de cabeçalho j 
* 
*** Definição de tipo de estrutura de dados do JOB a submeter 
TYPES: 
BEGIN OF TP_JOB, 
JOBNAME LIKE TBTCJOB-JOBNAME, 
CPROG LIKE SY-CPROG, 
JOBCOUNT LIKE TBTCJOB-JOBCOUNT, 
UNAME LIKE SY-UNAME, 
INDEX LIKE SY-INDEX, 
END OF TP_JOB. 
* 
*** Definição de tabela para submissão de jobs 
DATA: 
T_JOB TYPE STANDARD TABLE OF TP_JOB 
WITH HEADER LINE. 
* 
*** Definição de tabela auxiliar para submissão de jobs 
DATA: 
T_JOB_AUX TYPE STANDARD TABLE OF TP_JOB 
WITH HEADER LINE. 
* 
*** Definição de variáveis globais 
DATA: 
VG_INDEX LIKE SY-INDEX, 
VG_INDEX_AUX LIKE SY-INDEX. 
* 
*** Tela de seleção de parâmetros 
SELECTION-SCREEN BEGIN OF BLOCK BL01 WITH FRAME 
TITLE TEXT-001. 
* 
SELECT-OPTIONS: 
S_JNAME FOR TBTCJOB-JOBNAME OBLIGATORY 
DEFAULT 'Job', 
S_CPROG FOR SY-CPROG OBLIGATORY 
DEFAULT 'Programa', 
S_UNAME FOR SY-UNAME OBLIGATORY 
DEFAULT SY-UNAME. 
* 
SELECTION-SCREEN END OF BLOCK BL01. 
* 
*** Consistência dos parâmetros informados 
* 
*** Nome de JOB 
AT SELECTION-SCREEN ON END OF S_JNAME. 
* 
LOOP AT S_JNAME. 
IF NOT S_JNAME-SIGN = 'I' OR 
NOT S_JNAME-OPTION = 'EQ'. 
*** Indicar apenas um Nome de Job por linha 
MESSAGE E033. 
ENDIF. 
ENDLOOP. 
* 
DESCRIBE TABLE S_JNAME LINES VG_INDEX. 
* 
*** Nome de Programa 
AT SELECTION-SCREEN ON END OF S_CPROG. 
* 
LOOP AT S_CPROG. 
IF NOT S_CPROG-SIGN = 'I' OR 
NOT S_CPROG-OPTION = 'EQ'. 
*** Indicar apenas um Nome de Programa por linha 
MESSAGE E034. 
ENDIF. 
ENDLOOP. 
* 
DESCRIBE TABLE S_CPROG LINES VG_INDEX_AUX. 
* 
IF VG_INDEX <> VG_INDEX_AUX. 
*** Quantidade de JOBs difere da quantidade de Programas 
MESSAGE E035. 
ENDIF. 
 
 * 
*** Nome de JOB 
AT SELECTION-SCREEN ON END OF S_JNAME. 
* 
LOOP AT S_JNAME. 
IF NOT S_JNAME-SIGN = 'I' OR 
NOT S_JNAME-OPTION = 'EQ'. 
*** Indicar apenas um Nome de Job por linha 
MESSAGE E033. 
ENDIF. 
ENDLOOP. 
* 
DESCRIBE TABLE S_JNAME LINES VG_INDEX. 
* 
*** Nome de Programa 
AT SELECTION-SCREEN ON END OF S_CPROG. 
* 
LOOP AT S_CPROG. 
IF NOT S_CPROG-SIGN = 'I' OR 
NOT S_CPROG-OPTION = 'EQ'. 
*** Indicar apenas um Nome de Programa por linha 
MESSAGE E034. 
ENDIF. 
ENDLOOP. 
* 
DESCRIBE TABLE S_CPROG LINES VG_INDEX_AUX. 
* 
IF VG_INDEX <> VG_INDEX_AUX. 
*** Quantidade de JOBs difere da quantidade de Programas 
MESSAGE E035. 
ENDIF. 
* 
*** Nome de Usuário 
AT SELECTION-SCREEN ON END OF S_UNAME. 
* 
LOOP AT S_UNAME. 
IF NOT S_UNAME-SIGN = 'I' OR 
NOT S_UNAME-OPTION = 'EQ'. 
*** Indicar apenas um Nome de Usuário por linha 
MESSAGE E036. 
ENDIF. 
ENDLOOP. 
* 
DESCRIBE TABLE S_UNAME LINES VG_INDEX_AUX. 
* 
IF VG_INDEX <> VG_INDEX_AUX AND 
VG_INDEX_AUX > 1. 
*** Quantidade de Usuários > 1 e diferente da quantidade de JOBs 
MESSAGE E037. 
ENDIF. 
* 
************************************************************************ 
* Início do processamento * 
************************************************************************ 
START-OF-SELECTION. 
* 
DESCRIBE TABLE S_JNAME LINES VG_INDEX. 
DESCRIBE TABLE S_CPROG LINES VG_INDEX_AUX. 
* 
IF VG_INDEX <> VG_INDEX_AUX. 
*** Quantidade de JOBs difere da quantidade de Programas 
MESSAGE E035. 
ENDIF. 
*** Carrega os parâmetros na tabela de submissão de jobs 
PERFORM PARAMETROS_2_T_JOB. 
*** Ordena a tabela de submissão pelo Índice 
SORT T_JOB BY INDEX. 
*** Abre cada um dos JOBs e atualiza a tabela de submissão 
PERFORM ABRE_JOBS. 
*** Submete cada programa no seu respectivo JOB 
PERFORM SUBMETE_PROGRAMA_NO_JOB. 
*** Move os dados da tabela de JOBs para a auxiliar 
MOVE T_JOB[] TO T_JOB_AUX[]. 
*** Ordena a tabela de submissão pelo Índice de forma descendente 
SORT T_JOB BY INDEX DESCENDING. 
*** Ordena a tabela auxiliar pelo Índice 
SORT T_JOB_AUX BY INDEX. 
*** Fecha cada um dos JOBs, cada um dependente do anerior e o primeiro 
*** immediatamente 
PERFORM FECHA_JOBS. 
* 
END-OF-SELECTION. 
************************************************************************ 
* Final do processamento * 
************************************************************************ 
*&---------------------------------------------------------------------* 
*& Form PARAMETROS_2_T_JOB 
*&---------------------------------------------------------------------* 
* Carrega os parâmetros na tabela de submissão de jobs 
*----------------------------------------------------------------------* 
FORM PARAMETROS_2_T_JOB. 
* 
LOOP AT S_JNAME. 
* 
MOVE SY-TABIX TO VG_INDEX. 
READ TABLE S_CPROG INDEX VG_INDEX. 
READ TABLE S_UNAME INDEX VG_INDEX. 
IF NOT SY-SUBRC IS INITIAL. 
READ TABLE S_UNAME INDEX 1. 
ENDIF. 
MOVE: S_JNAME-LOW TO T_JOB-JOBNAME, 
S_CPROG-LOW TO T_JOB-CPROG, 
S_UNAME-LOW TO T_JOB-UNAME, 
VG_INDEX TO T_JOB-INDEX. 
APPEND T_JOB. 
* 
ENDLOOP. 
* 
ENDFORM. " PARAMETROS_2_T_JOB 
 

 
 *&---------------------------------------------------------------------* 
*& Form ABRE_JOBS 
*&---------------------------------------------------------------------* 
* Abre cada um dos JOBs e atualiza a tabela de submissão 
*----------------------------------------------------------------------* 
FORM ABRE_JOBS. 
* 
LOOP AT T_JOB. 
* 
CALL FUNCTION 'JOB_OPEN' 
EXPORTING 
* DELANFREP = ' ' 
* JOBGROUP = ' ' 
JOBNAME = T_JOB-JOBNAME 
* SDLSTRTDT = NO_DATE 
* SDLSTRTTM = NO_TIME 
IMPORTING 
JOBCOUNT = T_JOB-JOBCOUNT 
EXCEPTIONS 
CANT_CREATE_JOB = 1 
INVALID_JOB_DATA = 2 
JOBNAME_MISSING = 3 
OTHERS = 4. 
* 
IF SY-SUBRC IS INITIAL. 
MODIFY T_JOB INDEX T_JOB-INDEX 
TRANSPORTING JOBCOUNT. 
ELSE. 
*** Erro na criação do JOB & para o usuário & 
MESSAGE E038 WITH T_JOB-JOBNAME 
T_JOB-UNAME. 
ENDIF. 
* 
ENDLOOP. 
* 
ENDFORM. " ABRE_JOBS 
*&---------------------------------------------------------------------* 
*& Form SUBMETE_PROGRAMA_NO_JOB 
*&---------------------------------------------------------------------* 
* Submete cada programa no seu respectivo JOB 
*----------------------------------------------------------------------* 
FORM SUBMETE_PROGRAMA_NO_JOB. 
* 
LOOP AT T_JOB. 
* 
SUBMIT (T_JOB-CPROG) AND RETURN 
USER T_JOB-UNAME 
VIA JOB T_JOB-JOBNAME 
NUMBER T_JOB-JOBCOUNT 
TO SAP-SPOOL DESTINATION 'SPOSV07IL3' 
LIST NAME T_JOB-JOBNAME 
LIST AUTHORITY 'JOBSPOOL' 
COVER TEXT T_JOB-JOBNAME 
KEEP IN SPOOL 'X' 
IMMEDIATELY 'X' 
DATASET EXPIRATION 8 
WITHOUT SPOOL DYNPRO. 
* 
ENDLOOP. 
ENDFORM. " SUBMETE_PROGRAMA_NO_JOB 
 

 
 *&---------------------------------------------------------------------* 
*& Form FECHA_JOBS 
*&---------------------------------------------------------------------* 
* Fecha cada um dos JOBs, cada um dependente do anerior e o primeiro 
* immediatamente 
*----------------------------------------------------------------------* 
FORM FECHA_JOBS. 
* 
*** Definição de variável local 
DATA: 
EL_JOB TYPE TP_JOB. 
* 
LOOP AT T_JOB. 
* 
MOVE T_JOB TO EL_JOB. 
* 
IF T_JOB-INDEX <> 1. 
COMPUTE VG_INDEX = T_JOB-INDEX - 1. 
READ TABLE T_JOB_AUX INDEX VG_INDEX. 
* 
CALL FUNCTION 'JOB_CLOSE' 
EXPORTING 
* AT_OPMODE = ' ' 
* AT_OPMODE_PERIODIC = ' ' 
* CALENDAR_ID = ' ' 
* EVENT_ID = ' ' 
* EVENT_PARAM = ' ' 
* EVENT_PERIODIC = ' ' 
JOBCOUNT = EL_JOB-JOBCOUNT 
JOBNAME = EL_JOB-JOBNAME 
* LASTSTRTDT = NO_DATE 
* LASTSTRTTM = NO_TIME 
* PRDDAYS = 0 
* PRDHOURS = 0 
* PRDMINS = 0 
* PRDMONTHS = 0 
* PRDWEEKS = 0 
* PREDJOB_CHECKSTAT = ' ' 
PRED_JOBCOUNT = T_JOB_AUX-JOBCOUNT 
PRED_JOBNAME = T_JOB_AUX-JOBNAME 
* SDLSTRTDT = NO_DATE 
* SDLSTRTTM = NO_TIME 
* STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS 
* strtimmed = ' ' 
* TARGETSYSTEM = ' ' 
* START_ON_WORKDAY_NOT_BEFORE = SY-DATUM 
* START_ON_WORKDAY_NR = 0 
* WORKDAY_COUNT_DIRECTION = 0 
* RECIPIENT_OBJ = 
* IMPORTING 
* JOB_WAS_RELEASED = ' ' 
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. 
* 
IF NOT SY-SUBRC IS INITIAL. 
*** Erro no fachamento do JOB &, programa &, usuário & 
MESSAGE E039 WITH EL_JOB-JOBNAME 
EL_JOB-CPROG 
EL_JOB-UNAME. 
ENDIF. 
* 
ELSE. 
* 
CALL FUNCTION 'JOB_CLOSE' 
EXPORTING 
* AT_OPMODE = ' ' 
* AT_OPMODE_PERIODIC = ' ' 
* CALENDAR_ID = ' ' 
* EVENT_ID = ' ' 
* EVENT_PARAM = ' ' 
* EVENT_PERIODIC = ' ' 
JOBCOUNT = EL_JOB-JOBCOUNT 
JOBNAME = EL_JOB-JOBNAME 
* LASTSTRTDT = NO_DATE 
* LASTSTRTTM = NO_TIME 
* PRDDAYS = 0 
* PRDHOURS = 0 
* PRDMINS = 0 
* PRDMONTHS = 0 
* PRDWEEKS = 0 
* PREDJOB_CHECKSTAT = ' ' 
* PRED_JOBCOUNT = ' ' 
* PRED_JOBNAME = ' ' 
* SDLSTRTDT = NO_DATE 
* SDLSTRTTM = NO_TIME 
* STARTDATE_RESTRICTION = BTC_PROCESS_ALWAYS 
STRTIMMED = 'X' 
* TARGETSYSTEM = ' ' 
* START_ON_WORKDAY_NOT_BEFORE = SY-DATUM 
* START_ON_WORKDAY_NR = 0 
* WORKDAY_COUNT_DIRECTION = 0 
* RECIPIENT_OBJ = 
* IMPORTING 
* JOB_WAS_RELEASED = ' ' 
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. 
* 
IF NOT SY-SUBRC IS INITIAL. 
*** Erro no fachamento do JOB &, programa &, usuário & 
MESSAGE E039 WITH EL_JOB-JOBNAME 
EL_JOB-CPROG 
EL_JOB-UNAME. 
ENDIF. 

* 
ENDIF. 
* 
ENDLOOP. 
* 
ENDFORM. " FECHA_JOBS