Текущее время: Вс, апр 28 2024, 19:29

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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