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

Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки
https://sapboard.ru/forum/viewtopic.php?f=12&t=94226
Страница 1 из 1

Автор:  Lenaone [ Вт, дек 27 2016, 08:33 ]
Заголовок сообщения:  Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки

Добрый день.
Кто-нибудь сталкивался со следующей проблемой:
когда вызываю ФМ RSPC_API_CHAIN_START, то при выполнении цепочки происходит двойной запуск цепочки в одно и то же время.
17:06:09 58BYGFWHBFZ7XODXKR4H7T8CU
17:06:09 58BY6SXIKZ6NSPEHMOPD5L5ZI
В результате ДТП в одной из цепочек падает в ошибку и пишет, что На данный момент уже обрабатывается запрос . А мне важен итоговый статус цепочки.
С чем это может быть связано? Как решить проблему двойного запуска?

CALL FUNCTION 'RSPC_API_CHAIN_START'
EXPORTING
i_chain = 'ZPC1'
* I_T_VARIABLES =
i_synchronous = 'X'
* I_SIMULATE =
* I_NOPLAN =
* I_DONT_WAIT =
* I_POLL =
IMPORTING
e_logid = e_logid
EXCEPTIONS
failed = 1
OTHERS = 2.

Автор:  vtb [ Вт, дек 27 2016, 09:25 ]
Заголовок сообщения:  Re: Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки

добрый день!
похоже что у вас один и тот же ДТП используется в обеих цепочках.
если это так, скопируйте ДТП и вставьте в одну из цепочек копию вместо оригинала.
единственное, если у вас ДТП с дельтой , то второй придется поменять на фулл.
если вам нужно чтобы все осталось как есть придется распараллелить цепочки.
для чего вы их запускаете через ФМ? вы же можете это делать как вручную по отдельности, так и запланировать их на любое время и периодичность.

также вы можете в цепочках в одной из них перенести ДТП (если возможно) в другую часть потока данных, так чтобы в одной цепочке он уже гарантированно отработал до запуска во второй цепочке.

Автор:  Lenaone [ Вт, дек 27 2016, 14:02 ]
Заголовок сообщения:  Re: Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки

Программ в фоновом режиме считывает данные из обычной таблицы, загружает в ДСО прямой записи и дальше запускается цепочки загрузки данных из этого ДСО.
Фоновый запуск запланирован каждые 15 минут и если есть активная цепочка, то ждет ее завершения.
Но почему то цепочка запускается дважды, один сеанс отрабатывает полностью, успешно, а второй падает на ДТП, т.к. оно в тот момент было занято первый сеансом.
Причем такая ошибка случается только один раз в день, остальные загрузки проходят последовательно и без проблем.

Автор:  vtb [ Вт, дек 27 2016, 14:14 ]
Заголовок сообщения:  Re: Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки

Lenaone написал(а):
Программ в фоновом режиме считывает данные из обычной таблицы, загружает в ДСО прямой записи и дальше запускается цепочки загрузки данных из этого ДСО.
Фоновый запуск запланирован каждые 15 минут и если есть активная цепочка, то ждет ее завершения.
Но почему то цепочка запускается дважды, один сеанс отрабатывает полностью, успешно, а второй падает на ДТП, т.к. оно в тот момент было занято первый сеансом.
Причем такая ошибка случается только один раз в день, остальные загрузки проходят последовательно и без проблем.


ну если это один и тот же ДТП, то все понятно и решение лежит на поверхности, уже описано выше
а если нет, то надо смотреть поток данных.
попробуйте смоделировать эту ситуацию в системе разработки или теста, и сразу поймете в чем дело.
но думаю, что вам скорее всего придется что-то поменять в потоках данных одной из цепочек
если у вас нет такой возможности, то остается только разносить цепочки во времени , либо запускать их поочередно вручную.
может быть, есть и еще какие-то варианты, все зависит от ваших целей и возможностей изменения текущей реализации.
но проблема однозначно решаема, на мой взгляд.

Автор:  murmur [ Вт, дек 27 2016, 17:41 ]
Заголовок сообщения:  Re: Проблема с использованием RSPC_API_CHAIN_START для запуска цепочки

Lenaone написал(а):
Программ в фоновом режиме считывает данные из обычной таблицы, загружает в ДСО прямой записи и дальше запускается цепочки загрузки данных из этого ДСО.
Фоновый запуск запланирован каждые 15 минут и если есть активная цепочка, то ждет ее завершения.

Из написанного вами получается, что в SM37 у вас запланировано фоновое задание, которое запускается каждые 15 минут, заполняет DSO и затем запускает BW-цепочку. BW-цепочка может выполняться дольше 15 минут и, таким образом, следующий запуск фонового задания должен ожидать завершения предыдущего прогона цепочки. Как организовано это ожидание вы не написали. Могу предположить, что вы проверяете статус цепочки в цикле и это означает, что ваше фоновое задание продолжает работать и, следующий запуск фонового задания (который наступает через 15 минут) входит в тот же цикл ожидания зеленого статуса цепочки. В конце концов цепочка завершает свое выполнение, ее статус становится зеленым и оба фоновых задания дружно одновременно запускают цепочку. В итоге вы имеете то, что имеете.

Как устранить проблему?! Сократите интервал запуска фонового задания до 5 минут, уберите цикл с ожиданием - то есть проверяете статус цепочки и, если он зеленый, запускаете цепочку, а если нет - просто выходите из фонового задания (оно отрабатывает вхолостую)

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