Фоновые задания используя ABAP Objects (Часть 1)

В статье будут рассмотрены примеры создания фоновых заданий в ABAP используя классы из пакета SBTJOBAPI (CL_BP_ABAP_JOB,  CL_BP_JOB_FACTORY и др.). Как управлять фоновыми заданиями используя «старое» API вы можете посмотреть тут. Старое в кавычках потому что новое лишь обертка над ним.

Стандартный пример по работе через классы с фоновыми заданиями программа: BP_JOBAPI_TUTORIAL. К сожалению в нем не рассмотрено как создавать фоновые задания с несколькими шагами, об этом я расскажу во второй части статьи.

И так, в стандартной транзакции по определению фоновых заданий в окне создания шага мы можем создать 1 из 3 видов шагов:

Типы шагов

На уровне классов за определение каждого из типа шагов отвечают классы:

  • Запуск ABAP программ — CL_BP_ABAP_JOB
  • Запуск команд — CL_BP_EXTCMD_JOB
  • Запуск внешних программ — CL_BP_EXTPRG_JOB
Для создания экземпляров каждого из них рекомендую воспользоваться классом  cl_bp_job_factory и его статическими методами:
  • MAKE_ABAP_JOB( ) для создания объекта CL_BP_ABAP_JOB
  • MAKE_EXTCMD_JOB( ) для создания объекта CL_BP_EXTCMD_JOB
  • MAKE_EXTPRG_JOB( ) для создания объекта  CL_BP_EXTPRG_JOB

Разница между ними и простым CREATE OBJECT в том что они задают тип для задачи и устанавливают состояние в редактируемое.

Последовательность действий для создания фонового задания состоящего из одного шага и выполняемого немедленно:

  1. Определиться с видом выполняемой задачи
  2. Создать экземпляр класса определяющего ее вид
  3. Задать основные параметры для задачи (Тип, Имя, Пользователь, Язык)
  4. Задать специфичные от вида задачи параметры (Отчёт, вариант, и т.п.)
  5. Запустить задачу на выполнение.
Пример простого запуска одно шаговой задачи с выполнением ABAP программы:

После запуска если параметры шага указаны верно будет создана и запущена на выполнение фоновая задача. Для других типов задач код будет аналогичным за исключением заполнения специфичных для них параметров. В случае когда необходимо не запускать, а оставить задание в состоянии «запланировано» можно воспользоваться методом plan_job( ).

Триггеры

Под триггерами понимаются условия запуска, в стандартном определении задания это выглядит следующим образом:

На уровне классов за определение каждого из типа триггера отвечают следующие классы:

    • После события —  cl_tc_evt_trigger
    • Дата/время —  cl_tc_date_trigger
    • При режиме работы —  cl_tc_opmode_trigger
    • Для запуска немедленно триггера нет (см. пример выше)
    • Для запуска по рабочему календарю — cl_tc_onworkday_trigger
    • После задания — cl_tc_afterjob_trigger
    • Для запуска с периодичностью триггера нет (Пример создания такого задания будет рассмотрен во второй части статьи)

По аналогии с классами определяющими типы задач рекомендуется для создания триггеров использовать класс  cl_tc_trigger_factory и его статические методы:

  • MAKE_OPMODE_TRIGGER — триггер для режима работы
  • MAKE_EVENT_TRIGGER — триггер после события
  • MAKE_DATE_TRIGGER — триггер даты/времени
  • MAKE_ONWORKDAY_TRIGGER — триггер по рабочему календарю
  • для триггера запускающегося после задания нет подходящего метода (первый привет индусам), его необходимо создавать с помощью CREATE OBJECT.

Далее простой пример как прицепить к предыдущему заданию триггер на дату и запустить его:

Остальные триггеры прицепляются аналогично, за исключением заполняемых параметров.

Получатели спула

Определить получателя спула можно только для заданий выполняемых вместе с триггером (Второй привет индусам). Выглядит это примерно так: