Текущее время: Ср, июл 23 2025, 20:17

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 09:57 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Добрый день!

Для деблокирования сетевого графика используется вот такой набор ФМ-ов,
т.е. непосредственно сам ФМ, устанавливающий статус сет.графика(BAPI_BUS2002_SET_STATUS ) должен находиться в блоке между
BAPI_PS_INITIALIZATION и BAPI_PS_PRECOMMIT.
Но за один запуск программы требуется обработать несколько сетевых графиков, принадлежащих одному проекту.
В случае если если делать так:
Цитата:
call function 'BAPI_PS_INITIALIZATION'.
...
loop at lt_aufnr.
call function 'BAPI_BUS2002_SET_STATUS'
...
endloop.

call function 'BAPI_PS_PRECOMMIT'.
...
, то все работает, но при единственной ошибке внутри блока - весь блок будет считаться ошибочным.
Этого бы не хотелось.

Есть вариант:
Цитата:
loop at lt_aufnr.
call function 'BAPI_PS_INITIALIZATION'.
call function 'BAPI_BUS2002_SET_STATUS'
call function 'BAPI_PS_PRECOMMIT'.
endloop.

Результатом при определенном количестве значений будет произвольный дамп, т.к. как правильно инициализировать память перед повторным запуском BAPI_PS_INITIALIZATION в рамках одной программы - не знаю.

Есть ещё третий вариант:

Цитата:
loop at lt_aufnr.
call function 'Z_SET...1'.
endloop.

function Z_SET...1.
...
call function 'BAPI_PS_INITIALIZATION'.
call function 'BAPI_BUS2002_SET_STATUS'
call function 'BAPI_PS_PRECOMMIT'.
...
endfunction.


Но в данном случае прерывается будет прерываться обновление уже внутри системы и соответственно деблокируется только последний сетевой график.

Вот в связи с этим вопросы к знающим людям:
1) можно ли как-то инициализировать память для повторного запуска BAPI_PS_INITIALIZATION/BAPI_PS_PRECOMMIT в рамках одной программы.
2) Как недопустить прерывание обновления в системе, в случае вызова блока в отдельном ФМ-е.
3) Как лучше деблокировать сетевой график, возможно другим способом?
4) что я делаю не так :)

sorry за длиннючее письмо :)

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 13:59 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 02 2006, 18:56
Сообщения: 78
может так
1 инициализация
2 в цикле вызовы BAPI_BUS2002_SET_STATUS, для каждго анализируем результат и запоминаем удачные изменения
3 прекомит
4 если в п.2 удачны все, то п.8, иначе ролбэк, если есть удачные, то п.5, иначе п.9
5 инициализация
6 в цикле вызовы BAPI_BUS2002_SET_STATUS, только для успешных из пункта 2
7 прекомит
8 комит
9 конец


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 14:32 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Идея интересная, но запуск несколько раз Инициализации и Прекоммита может породить дамп.
Плюс то, что повторная обработка может хорошо притормозить работу программы, учитывая, что проекты очень немаленькие.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 14:50 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, мар 03 2009, 12:33
Сообщения: 141
что такое прекомит комрады и чем отличается от комита :?:
простите за оффтоп :roll:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 14:56 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
В данном случае прекоммит - это функциональный модуль BAPI_PS_PRECOMMIT.
Некоторый набор бапишек работающих в PS требуют, чтобы они выполнялись внутри блока ФМов BAPI_PS_INITIALIZATION/BAPI_PS_PRECOMMIT, первый из которых подготавливает среду для их работы, а последний завершает, выполняя необходимые действия для удачного завершения при последущем вызове commit work.
т.е. это просто ФМ.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:03 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, мар 03 2009, 12:33
Сообщения: 141
РК: спасибо, надо было повнимательнее присмотрется к ФМ :oops:


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:06 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 02 2006, 18:56
Сообщения: 78
Не несколько раз, а максимум два
Если позволяет точка вызова, то можно один из них делать с destination, тогда не пересекутся и будет как два по одному :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:19 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
вафля написал(а):
РК: спасибо, надо было повнимательнее присмотрется к ФМ :oops:

В документашке это описано к тем BAPI-шкам, которым такое надо.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:28 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 02 2006, 18:56
Сообщения: 78
И еще, если все же понадобится второй вызов, то ролбэк после первого должен все почистить и вторя инициализация должна пройти нормуль
Производительность это да, конечно никакая :(


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
kastaliec написал(а):
Не несколько раз, а максимум два
Если позволяет точка вызова, то можно один из них делать с destination, тогда не пересекутся и будет как два по одному :)

На текущий момент уже будет три раза, т.к. предварительно деблокируются спп-элементы.
Но открытым остается вопрос производительности, т.к. когда будет около 3 тысяч сетевых графиков и 30 тыс. операций - это будет чувствительно(а это реальная цифра). Если бы не это, то можно было бы выделить в отдельный ФМ с роллбэком внутри и все было бы гарантировано нормально.

_________________
I have a dream


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Ср, мар 11 2009, 15:44 
Младший специалист
Младший специалист

Зарегистрирован:
Чт, ноя 02 2006, 18:56
Сообщения: 78
В диалоге у стольких объектов менять статус за раз, хм
Может запуск это добра в job, и пусть юзеры ждут спокойно результат чаёк попивая :), у там уже два вызова или один без разницы


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BAPI_PS_INITIALIZATION/ BAPI_BUS2002_SET_STATUS /BAPI_PS_PRECOMMIT
СообщениеДобавлено: Чт, мар 12 2009, 13:52 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, дек 21 2006, 07:27
Сообщения: 321
Откуда: Где-то на севере
Пол: Мужской
Job - это наверное хорошо было бы, но пока нормально и так.
Проблема решилась через третий вариант из первоначального поста, но с добавление вызова как синхронного rfc в той же системе с последущим коммит энд вэйтом. Если коммит делать в самом ФМ-е, то работает неправильно.
Так же нормально отрабатывает и при асинхронном rfc, но оно здесь не нужно, плюс попытки открыть дополнительные диалоговые режимы.

И ещё забавно, что при простановке статуса - в фоне отрабатывает, а вот при попытке деблокировать - нет, в какой-то из стандартных подпрограмма слетает на операторе SET SCREEN.

Вопрос остается открытым в той части, сильно ли упадет производительность, если часто вызывать BAPI_PS_INITIALIZATION/BAPI_PS_PRECOMMIT или наоборот возрастет, т.к. обработка большого количества объектов за раз возможно будет более ресурсоемкая, чем поочередная обработка.

_________________
I have a dream


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

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


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

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


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

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