Ок, парни, в прошлой серии мы с вами пытались управлять цепочкой загрузки через перепланирование следующего запуска. Справедливо было замечено, что если мы делаем это шаманство из текущего прогона, он зависает или прерывается, так как CALL FUNCTION 'RSPC_API_CHAIN_SCHEDULE'.
Ниже код, который находит задание, шаманит с его временем следующего запуска, и ни разу не мешает текущему прогону:
DATA:
lt_processlist TYPE STANDARD TABLE OF rspc_s_processlist,
wa_processlist LIKE LINE OF lt_processlist,
lv_variant TYPE rspc_variant,
wa_jobhead LIKE tbtcjob,
it_steplist TYPE STANDARD TABLE OF tbtcstep,
lt_joblist TYPE STANDARD TABLE OF tbtcjob,
text TYPE string.
BREAK-POINT.
*" Имя варианта процесса запуска
CALL FUNCTION 'RSPC_API_CHAIN_GET_PROCESSES'
EXPORTING
i_chain = 'USEM_CR_RETAIL'
TABLES
e_t_processlist = lt_processlist.
IF sy-subrc <> 0.
text = `Сбой при поиске варианта запуска по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
READ TABLE lt_processlist INTO wa_processlist
WITH KEY chain_id = 'USEM_CR_RETAIL'
type = 'TRIGGER'.
lv_variant = wa_processlist-variante.
*" Параметры следующего задания по нашей цепочке
CALL FUNCTION 'RSPC_API_PROCESS_GET_JOBS'
EXPORTING
i_chain = 'USEM_CR_RETAIL'
i_type = 'TRIGGER' "тип процесса запуска в цепочке
i_variant = lv_variant
i_event = '' "можно не заполнять
i_eventp = '' "можно не заполнять
TABLES
e_t_joblist = lt_joblist.
IF sy-subrc <> 0.
text = `Сбой при поиске запланированного задания по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
IF lt_joblist IS INITIAL.
text = `Сбой при поиске запланированного задания по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
READ TABLE lt_joblist INDEX 1 INTO wa_jobhead.
*" Теперь джобу надо считать
CALL FUNCTION 'BP_JOB_READ'
EXPORTING
job_read_jobcount = wa_jobhead-jobcount
job_read_jobname = wa_jobhead-jobname
job_read_opcode = '20'
IMPORTING
job_read_jobhead = wa_jobhead
TABLES
job_read_steplist = it_steplist
EXCEPTIONS
invalid_opcode = 1
job_doesnt_exist = 2
job_doesnt_have_steps = 3
OTHERS = 4.
IF sy-subrc <> 0.
text = `Сбой при считывании запланированного задания`.
MESSAGE text TYPE 'E'.
ENDIF.
wa_jobhead-sdlstrtdt = wa_jobhead-sdlstrtdt + 1.
wa_jobhead-sdlstrttm = '050000'.
*" Изменить
CALL FUNCTION 'BP_JOB_MODIFY'
EXPORTING
dialog = 'N'
jobcount = wa_jobhead-jobcount
jobname = wa_jobhead-jobname
new_jobhead = wa_jobhead
opcode = '16'
IMPORTING
modified_jobhead = wa_jobhead
TABLES
new_steplist = it_steplist.
IF sy-subrc <> 0.
text = `Сбой при изменении запланированного задания`.
MESSAGE text TYPE 'E'.
ENDIF.
*" И закрыть назад
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = wa_jobhead-jobcount
jobname = wa_jobhead-jobname.
IF sy-subrc <> 0.
text = `Сбой при закрытии джобы`.
MESSAGE text TYPE 'E'.
ENDIF.
Ниже код, который находит задание, шаманит с его временем следующего запуска, и ни разу не мешает текущему прогону:
DATA:
lt_processlist TYPE STANDARD TABLE OF rspc_s_processlist,
wa_processlist LIKE LINE OF lt_processlist,
lv_variant TYPE rspc_variant,
wa_jobhead LIKE tbtcjob,
it_steplist TYPE STANDARD TABLE OF tbtcstep,
lt_joblist TYPE STANDARD TABLE OF tbtcjob,
text TYPE string.
BREAK-POINT.
*" Имя варианта процесса запуска
CALL FUNCTION 'RSPC_API_CHAIN_GET_PROCESSES'
EXPORTING
i_chain = 'USEM_CR_RETAIL'
TABLES
e_t_processlist = lt_processlist.
IF sy-subrc <> 0.
text = `Сбой при поиске варианта запуска по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
READ TABLE lt_processlist INTO wa_processlist
WITH KEY chain_id = 'USEM_CR_RETAIL'
type = 'TRIGGER'.
lv_variant = wa_processlist-variante.
*" Параметры следующего задания по нашей цепочке
CALL FUNCTION 'RSPC_API_PROCESS_GET_JOBS'
EXPORTING
i_chain = 'USEM_CR_RETAIL'
i_type = 'TRIGGER' "тип процесса запуска в цепочке
i_variant = lv_variant
i_event = '' "можно не заполнять
i_eventp = '' "можно не заполнять
TABLES
e_t_joblist = lt_joblist.
IF sy-subrc <> 0.
text = `Сбой при поиске запланированного задания по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
IF lt_joblist IS INITIAL.
text = `Сбой при поиске запланированного задания по цепочке`.
MESSAGE text TYPE 'E'.
ENDIF.
READ TABLE lt_joblist INDEX 1 INTO wa_jobhead.
*" Теперь джобу надо считать
CALL FUNCTION 'BP_JOB_READ'
EXPORTING
job_read_jobcount = wa_jobhead-jobcount
job_read_jobname = wa_jobhead-jobname
job_read_opcode = '20'
IMPORTING
job_read_jobhead = wa_jobhead
TABLES
job_read_steplist = it_steplist
EXCEPTIONS
invalid_opcode = 1
job_doesnt_exist = 2
job_doesnt_have_steps = 3
OTHERS = 4.
IF sy-subrc <> 0.
text = `Сбой при считывании запланированного задания`.
MESSAGE text TYPE 'E'.
ENDIF.
wa_jobhead-sdlstrtdt = wa_jobhead-sdlstrtdt + 1.
wa_jobhead-sdlstrttm = '050000'.
*" Изменить
CALL FUNCTION 'BP_JOB_MODIFY'
EXPORTING
dialog = 'N'
jobcount = wa_jobhead-jobcount
jobname = wa_jobhead-jobname
new_jobhead = wa_jobhead
opcode = '16'
IMPORTING
modified_jobhead = wa_jobhead
TABLES
new_steplist = it_steplist.
IF sy-subrc <> 0.
text = `Сбой при изменении запланированного задания`.
MESSAGE text TYPE 'E'.
ENDIF.
*" И закрыть назад
CALL FUNCTION 'JOB_CLOSE'
EXPORTING
jobcount = wa_jobhead-jobcount
jobname = wa_jobhead-jobname.
IF sy-subrc <> 0.
text = `Сбой при закрытии джобы`.
MESSAGE text TYPE 'E'.
ENDIF.
Комментариев нет:
Отправить комментарий