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. Конец. Лентяй ты, Валерка 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/ |