SAPфорум.RU
https://sapboard.ru/forum/

Запуск фонового задания через после другого задания
https://sapboard.ru/forum/viewtopic.php?f=13&t=100446
Страница 1 из 1

Автор:  Валерка [ Вт, дек 12 2023, 06:27 ]
Заголовок сообщения:  Запуск фонового задания через после другого задания

В стандартных настройках для фонового задания можно указать фоновое задание после выполнение которого начнет выполняться текущее.
А как это сделать вручную через ABAP?
JOB_OPEN/JOB_CLOSE ? Может кто-то подскажет?

Автор:  NickS [ Вт, дек 12 2023, 13:09 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Не претендую на истину, но я смотрел в TBTCO по имени джоба и статуса F. Давно это было

Автор:  Валерка [ Вт, дек 12 2023, 13:16 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Если смотреть статус самому, то это значит что задача будет работать. А идея в том, чтобы созданные фоновые задачи выполнялись одна за другой но при этом не жрали ресурсы когда не их очередь выполняться. Иначе их слишком много и они подвешивают систему.

Автор:  Валерка [ Вт, дек 12 2023, 13:55 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Вот тут что-то про то что нужно
Фоновые задания используя ABAP Objects Часть 1
Фоновые задания используя ABAP Objects Часть 2


Ускорение программ через параллельное программирование

Автор:  Yozhhhhh [ Вт, дек 12 2023, 22:29 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Способов решить куча.
Например, цепь в rspc с триггером. Завершенный процесс запускает событие, которые триггерит следующий.
Насколько помню, при ошибке отваливается вся цепь, но я уверен, что там есть свои фишки и всем этим можно управлять.
Вроде средство не очень популярное и изначально как тайный клуб бивишников возникло.
У нас есть чисто саповские не бивишные цепи, они работают вполне себе. Че-то там делают ночами, я даже не лезу.

Второй вариант вам уже описали - можно сделать головную оболочку, которая внутри будет релизить задания одно за другим в строгой последовательности. При этом головная программа после релиза задания N проверяет в таблице, какой статус у задания N (активен, запланирован, отменен, готов и т.д.) и при нужных статусах делать дорожную карту. Например, после получения статуса F по заданию N релизить задание N+1 и дальше ловить его статус и т.д. При этом необязательно расписывать километровую простынь кода, карту заданий можно посадить на настроечную таблицу, туда же добавить переменные отсрочек, маску имен и т.д. Тогда головная программа будет иметь 20 строк кода наподобие
DO N times.
считать задание 1..N из таблицы заданий
сделать имя в соответствии с конвенцией имен
релиз задания
выбрать статус
если статус такой-то - ...
если статус такой-то - ...
иначе wait и читаем по статус по новой
если ОК, то двигаемся дальше внутри
ENDDO.

Сама голова при этом тоже работает в фоне, никаких особых ресурсов не жрет (делать селект статуса раз в 10 секунд - от этого никто не обеднеет).

Примерно все то же самое делает rspc, только нормальными штатными средствами.
Что касается вызова джобов, то тоже наверняка можно этим управлять, 100% можно управлять.
Профильные разрабы подскажут :)
Документацию почитайте, сап хелп и гугл знают все.
Если бы у меня стоял выбор потратить 5 дней на анализ или сделать за полчаса, чтобы работало, я бы выбрал второе.

Автор:  LKU [ Ср, дек 13 2023, 16:26 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Если задача программным способом создать в SM37 одно фоновое задание с двумя последовательными шагами (каждый шаг - вызов отдельной программы), то вроде это делается элементарно:
1. Вызов ФМ JOB_OPEN
2. Два подряд вызова Фм JOB_SUBMIT с одним и тем же JOBNAME
3. Вызов ФМ JOB_CLOSE с этим JOBNAME

Если нужна система запуска разветвленной сети фоновых заданий с паралелизацией, мониторингом, логгированием и т.п., см. предыдущий ответ
Yozhhhhh.

Автор:  Валерка [ Чт, дек 14 2023, 08:45 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Цитата:
Второй вариант вам уже описали - можно сделать головную оболочку, которая внутри будет релизить задания одно за другим в строгой последовательности.

По итогу так и сделал. Но хотел вообще без головного задания, чтобы сама система этим рулила.
Но тут верно заметили, между 5 дней и 30 минут - лучше делать 30 минут :)

Автор:  Yozhhhhh [ Чт, дек 14 2023, 16:28 ]
Заголовок сообщения:  Re: Запуск фонового задания через после другого задания

Открываем SM36, нажимаем F1 на предыдущем задании. Видим имя поля PREDJOB.
Открываем SE37, смотрим JOB_CLOSE. Нажимаем использование, но сначала на дурачка ctrl + f, ищем по PREDJOB
Находим, что это статус. Смотрим, а что за статус, как обрабатывается. Видим, что в зависимости от pred_jobname.
Конец.

Лентяй ты, Валерка :D

FUNCTION job_close.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(AT_OPMODE) LIKE SPFBA-BANAME DEFAULT SPACE
*" VALUE(AT_OPMODE_PERIODIC) LIKE BTCH0000-CHAR1 DEFAULT SPACE
*" VALUE(CALENDAR_ID) LIKE TBTCJOB-CALENDARID DEFAULT SPACE
*" VALUE(EVENT_ID) LIKE TBTCJOB-EVENTID DEFAULT SPACE
*" VALUE(EVENT_PARAM) LIKE TBTCJOB-EVENTPARM DEFAULT SPACE
*" VALUE(EVENT_PERIODIC) LIKE BTCH0000-CHAR1 DEFAULT SPACE
*" VALUE(JOBCOUNT) LIKE TBTCJOB-JOBCOUNT
*" VALUE(JOBNAME) LIKE TBTCJOB-JOBNAME
*" VALUE(LASTSTRTDT) LIKE TBTCJOB-LASTSTRTDT DEFAULT NO_DATE
*" VALUE(LASTSTRTTM) LIKE TBTCJOB-LASTSTRTTM DEFAULT NO_TIME
*" VALUE(PRDDAYS) LIKE TBTCJOB-PRDDAYS DEFAULT 0
*" VALUE(PRDHOURS) LIKE TBTCJOB-PRDHOURS DEFAULT 0
*" VALUE(PRDMINS) LIKE TBTCJOB-PRDMINS DEFAULT 0
*" VALUE(PRDMONTHS) LIKE TBTCJOB-PRDMONTHS DEFAULT 0
*" VALUE(PRDWEEKS) LIKE TBTCJOB-PRDWEEKS DEFAULT 0
*" VALUE(PREDJOB_CHECKSTAT) LIKE TBTCSTRT-CHECKSTAT DEFAULT SPACE
*" VALUE(PRED_JOBCOUNT) LIKE TBTCJOB-JOBCOUNT DEFAULT SPACE
*" VALUE(PRED_JOBNAME) LIKE TBTCJOB-JOBNAME DEFAULT SPACE
*" VALUE(SDLSTRTDT) LIKE TBTCJOB-SDLSTRTDT DEFAULT NO_DATE
*" VALUE(SDLSTRTTM) LIKE TBTCJOB-SDLSTRTTM DEFAULT NO_TIME
*" VALUE(STARTDATE_RESTRICTION) LIKE TBTCJOB-PRDBEHAV DEFAULT
*" BTC_PROCESS_ALWAYS
*" VALUE(STRTIMMED) LIKE BTCH0000-CHAR1 DEFAULT SPACE
*" VALUE(TARGETSYSTEM) DEFAULT SPACE
*" VALUE(START_ON_WORKDAY_NOT_BEFORE) LIKE TBTCSTRT-NOTBEFORE
*" DEFAULT SY-DATUM
*" VALUE(START_ON_WORKDAY_NR) LIKE TBTCSTRT-WDAYNO DEFAULT 0
*" VALUE(WORKDAY_COUNT_DIRECTION) LIKE TBTCSTRT-WDAYCDIR DEFAULT 0
*" VALUE(RECIPIENT_OBJ) LIKE SWOTOBJID STRUCTURE SWOTOBJID
*" OPTIONAL
*" VALUE(TARGETSERVER) LIKE BTCTGTSRVR-SRVNAME DEFAULT SPACE
*" VALUE(DONT_RELEASE) LIKE BTCH0000-CHAR1 DEFAULT SPACE
*" VALUE(TARGETGROUP) TYPE BPSRVGRP DEFAULT SPACE
*" VALUE(DIRECT_START) LIKE BTCH0000-CHAR1 OPTIONAL
*" VALUE(INHERIT_RECIPIENT) TYPE BTCH0000-CHAR1 OPTIONAL
*" VALUE(INHERIT_TARGET) TYPE BTCH0000-CHAR1 OPTIONAL
*" VALUE(REGISTER_CHILD) TYPE BTCCHAR1 DEFAULT ABAP_FALSE
*" EXPORTING
*" VALUE(JOB_WAS_RELEASED) LIKE BTCH0000-CHAR1
*" CHANGING
*" REFERENCE(RET) TYPE I OPTIONAL
*" EXCEPTIONS
*" CANT_START_IMMEDIATE
*" INVALID_STARTDATE
*" JOBNAME_MISSING
*" JOB_CLOSE_FAILED
*" JOB_NOSTEPS
*" JOB_NOTEX
*" LOCK_FAILED
*" INVALID_TARGET

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/