Текущее время: Сб, апр 27 2024, 18:05

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Запуск фонового задания через после другого задания
СообщениеДобавлено: Вт, дек 12 2023, 06:27 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
В стандартных настройках для фонового задания можно указать фоновое задание после выполнение которого начнет выполняться текущее.
А как это сделать вручную через ABAP?
JOB_OPEN/JOB_CLOSE ? Может кто-то подскажет?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Вт, дек 12 2023, 13:09 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, авг 05 2008, 19:46
Сообщения: 96
Откуда: С Урала
Не претендую на истину, но я смотрел в TBTCO по имени джоба и статуса F. Давно это было


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Вт, дек 12 2023, 13:16 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
Если смотреть статус самому, то это значит что задача будет работать. А идея в том, чтобы созданные фоновые задачи выполнялись одна за другой но при этом не жрали ресурсы когда не их очередь выполняться. Иначе их слишком много и они подвешивают систему.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Вт, дек 12 2023, 13:55 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
Вот тут что-то про то что нужно
Фоновые задания используя ABAP Objects Часть 1
Фоновые задания используя ABAP Objects Часть 2


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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Вт, дек 12 2023, 22:29 
Почетный гуру
Почетный гуру
Аватара пользователя

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

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

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

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

_________________
Алё, это Пакистан? Нам нужен один килограмм


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Ср, дек 13 2023, 16:26 
Гуру-модератор
Гуру-модератор
Аватара пользователя

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

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

_________________
Удача - результат нашего желания (© А. Нортон)


Последний раз редактировалось LKU Чт, дек 14 2023, 11:24, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Чт, дек 14 2023, 08:45 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 16:38
Сообщения: 301
Цитата:
Второй вариант вам уже описали - можно сделать головную оболочку, которая внутри будет релизить задания одно за другим в строгой последовательности.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск фонового задания через после другого задания
СообщениеДобавлено: Чт, дек 14 2023, 16:28 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, фев 21 2007, 08:50
Сообщения: 1571
Откуда: Пермь
Пол: Мужской
Открываем 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

_________________
Алё, это Пакистан? Нам нужен один килограмм


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB