Posted: Thu Mar 05, 2009 5:04 pm Post subject: ME22N и подэкран пользователя.
Доброго времени суток. Подскажите пожалуйста.
Через группу функций XM06 на пользовательском подэкране транзакции ME22N добавил кнопку. Очень хочу чтобы по её нажатию, основная программа SAPLMEGUI, думала что я что-то поменял в "заголовке" заказа и пошла проверять всё что с ним связано, в том числе вызывала BADI "ME_CHECK_ALL_ITEMS"(оно отрабатывает при изменении любого поля на уровнге заголовка). Подскажите пожалуйста, КАК
Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Mar 05, 2009 7:01 pm Post subject:
Preatos wrote:
Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу
Стандартный способ заставить стандарт отработать стандартные проверки как раз и состоит в том, чтобы программно нажать кнопку "Проверить" в ME22N
Это можно достичь с помощью присвоения кода "MECHECKDOC" выходному параметру E_UCOMM ФМ EXIT_SAPMM06E_008.
Параметр E_CI_UPDATE, выставленный в "X" позволит стандарту узнаать, что изменены пользовательские данные. _________________ С уважением,
Удав.
Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу
Стандартный способ заставить стандарт отработать стандартные проверки как раз и состоит в том, чтобы программно нажать кнопку "Проверить" в ME22N
Это можно достичь с помощью присвоения кода "MECHECKDOC" выходному параметру E_UCOMM ФМ EXIT_SAPMM06E_008.
Параметр E_CI_UPDATE, выставленный в "X" позволит стандарту узнаать, что изменены пользовательские данные.
сделал в отладке. Никаких проверок с указанными мной БАДИ при нажатии на пользовательскую кнопку не запустилось... Ну т.е. я нажал на свою кнопку, вывалился в этом экзите что вы указали, поставил нужные значения в поля, но это не вызвало тех проверок что мне нужны.
Мне нужно сэмитировать изменение ПОЛЯ в заголовке. Ну например я меняю значение поля группа закупок, нажимаю ENTER и в этот момент отрабатывают те самые бади которые мне нужны. а по нажатию на пользовательскую кнопку - они не отрабатывают. Причём если просто ENTER тыкать в поле ничего не меняя, естественно ничего не произойдёт, никаких проверок.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Mar 05, 2009 8:10 pm Post subject:
Да, ASSIGN здесь не поможет - ни хитрый, ни обыкновенный...
Могу предложить только следующий вариант:
В структуре CI_EKKO заводите собственное поле(не показывая его на экране) и по кнопочке на пользовательском экране его меняете, как триггер: если было равно 0(или space), присваиваете значение 1(или X) и наоборот.
Вот тогда стандарт поймет, что что-то изменилось и вызовет MEPO_DOC_PROCESS, а внутри него BAdI ME_CHECK_ALL_ITEMS _________________ С уважением,
Удав.
Да, ASSIGN здесь не поможет - ни хитрый, ни обыкновенный...
Могу предложить только следующий вариант:
В структуре CI_EKKO заводите собственное поле(не показывая его на экране) и по кнопочке на пользовательском экране его меняете, как триггер: если было равно 0(или space), присваиваете значение 1(или X) и наоборот.
Вот тогда стандарт поймет, что что-то изменилось и вызовет MEPO_DOC_PROCESS, а внутри него BAdI ME_CHECK_ALL_ITEMS
Делал. Проставлял значение во всех экзитах расширения: MM06E005.
И в заголовочных и в позиции. и ничего... Может где-то в другом месте триггер заполнять этот нужно? Что то у меня не получилось вызвать проверку MEPO_DOC_PROCESS... Вы пробовали?
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Thu Mar 05, 2009 9:47 pm Post subject:
Мда.. Я пробовал, но изменял при этом стандартное поле EKKO-SUBMI.
Вообще для заказов MM все управление строится на объектах.
Каждый подэкран - это отдельный объект. Вот какой стек вызовов я получил при изменении стандартного поля:
METHOD REGISTER_CHANGED_VIEW CL_FRAMEWORK_MM
METHOD NOTIFY_DATA_CHANGED CL_MODEL_VIEW_MM
METHOD TRANSPORT_FROM_DYNP LCL_1229_VIEW_MM
METHOD PAI CL_BASIC_MODEL_VIEW_MM
METHOD HANDLE_EVENT CL_SCREEN_VIEW_MM
METHOD HANDLE_EVENT CL_MODEL_VIEW_MM
MODULE (PAI) EVENT_PAI
FORM CALL_SCREEN
METHOD SEND CL_WINDOW_MM
FUNCTION MEGUI_MAINTAIN
EVENT START-OF-SELECTION
где объект для уровня выделенного жирным - {O:95*\FUNCTION-POOL=MEGUI\CLASS=LCL_1229_VIEW_MM}
Для customer-экрана этот стек такой:
METHOD TRANSPORT_FROM_DYNP LCL_CUST_HEADER_VIEW_MM
METHOD PAI CL_FOREIGN_APPLICATION_VIEW_MM
METHOD HANDLE_EVENT CL_SCREEN_VIEW_MM
METHOD HANDLE_EVENT CL_MODEL_VIEW_MM
METHOD HANDLE_EVENT CL_FOREIGN_APPLICATION_VIEW_MM
MODULE (PAI) EVENT_PAI
FORM CALL_SCREEN
METHOD SEND CL_WINDOW_MM
FUNCTION MEGUI_MAINTAIN
EVENT START-OF-SELECTION
и дальнейшие действия (NOTIFY_DATA_CHANGED и выше) по регистрации изменений не производятся.
Затем после обработки экрана и в том, и в другом случае включается обработка изменений:
где анализируется, есть ли измененные данные, или нет.
В первом случае они появляются, в случае с пользовательским экраном - нет.
Так что остается вытаскивать в PAI-логике ссылку на объект (SAPLMEGUI)call_view и самому вызывать унаследованный метод NOTIFY_DATA_CHANGED из класса CL_FOREIGN_APPLICATION_VIEW_MM.
Но что из этого получится, пока не ясно _________________ С уважением,
Удав.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.