Текущее время: Пт, июл 25 2025, 03:07

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


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

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


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

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