вторник, 12 ноября 2019 г.

Управление цепочкой загрузки из АБАПа, продолжение

Ок, парни, в прошлой серии мы с вами пытались управлять цепочкой загрузки через перепланирование следующего запуска. Справедливо было замечено, что если мы делаем это шаманство из текущего прогона, он зависает или прерывается, так как 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 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.

Комментариев нет:

Отправить комментарий