SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

ME22N и подэкран пользователя.



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Preatos
Участник
Участник



Joined: 25 Nov 2008
Posts: 7

PostPosted: Thu Mar 05, 2009 5:04 pm    Post subject: ME22N и подэкран пользователя. Reply with quote

Доброго времени суток. Подскажите пожалуйста.
Через группу функций XM06 на пользовательском подэкране транзакции ME22N добавил кнопку. Очень хочу чтобы по её нажатию, основная программа SAPLMEGUI, думала что я что-то поменял в "заголовке" заказа и пошла проверять всё что с ним связано, в том числе вызывала BADI "ME_CHECK_ALL_ITEMS"(оно отрабатывает при изменении любого поля на уровнге заголовка). Подскажите пожалуйста, КАКQuestion
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 65
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Thu Mar 05, 2009 5:45 pm    Post subject: Reply with quote

Такой вариант не пробовали ?
Как программно нажать кнопку
Как искусственно вызвать шаг диалога?
Back to top
View user's profile Send private message Blog Visit poster's website
Preatos
Участник
Участник



Joined: 25 Nov 2008
Posts: 7

PostPosted: Thu Mar 05, 2009 5:54 pm    Post subject: Reply with quote

vga wrote:
Такой вариант не пробовали ?
Как программно нажать кнопку
Как искусственно вызвать шаг диалога?


Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу Smile
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Mar 05, 2009 7:01 pm    Post subject: Reply with quote

Preatos wrote:
Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу Smile

Стандартный способ заставить стандарт отработать стандартные проверки как раз и состоит в том, чтобы программно нажать кнопку "Проверить" в ME22N Wink
Это можно достичь с помощью присвоения кода "MECHECKDOC" выходному параметру E_UCOMM ФМ EXIT_SAPMM06E_008.
Параметр E_CI_UPDATE, выставленный в "X" позволит стандарту узнаать, что изменены пользовательские данные.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Preatos
Участник
Участник



Joined: 25 Nov 2008
Posts: 7

PostPosted: Thu Mar 05, 2009 7:22 pm    Post subject: Reply with quote

Удав wrote:
Preatos wrote:
Кнопку я нажму сам, мне не нужно программно. А вот заставить стандарт думать что я изменил какое то поле ничего при этом не меняя, вот это не понимаю как сделать. Почитайте внимательно что хочу Smile

Стандартный способ заставить стандарт отработать стандартные проверки как раз и состоит в том, чтобы программно нажать кнопку "Проверить" в ME22N Wink
Это можно достичь с помощью присвоения кода "MECHECKDOC" выходному параметру E_UCOMM ФМ EXIT_SAPMM06E_008.
Параметр E_CI_UPDATE, выставленный в "X" позволит стандарту узнаать, что изменены пользовательские данные.


сделал в отладке. Никаких проверок с указанными мной БАДИ при нажатии на пользовательскую кнопку не запустилось... Ну т.е. я нажал на свою кнопку, вывалился в этом экзите что вы указали, поставил нужные значения в поля, но это не вызвало тех проверок что мне нужны.

Мне нужно сэмитировать изменение ПОЛЯ в заголовке. Ну например я меняю значение поля группа закупок, нажимаю ENTER и в этот момент отрабатывают те самые бади которые мне нужны. а по нажатию на пользовательскую кнопку - они не отрабатывают. Причём если просто ENTER тыкать в поле ничего не меняя, естественно ничего не произойдёт, никаких проверок.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Mar 05, 2009 8:10 pm    Post subject: Reply with quote

Да, ASSIGN здесь не поможет - ни хитрый, ни обыкновенный...
Могу предложить только следующий вариант:
В структуре CI_EKKO заводите собственное поле(не показывая его на экране) и по кнопочке на пользовательском экране его меняете, как триггер: если было равно 0(или space), присваиваете значение 1(или X) и наоборот.
Вот тогда стандарт поймет, что что-то изменилось и вызовет MEPO_DOC_PROCESS, а внутри него BAdI ME_CHECK_ALL_ITEMS Wink

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Preatos
Участник
Участник



Joined: 25 Nov 2008
Posts: 7

PostPosted: Thu Mar 05, 2009 8:14 pm    Post subject: Reply with quote

Удав wrote:
Да, ASSIGN здесь не поможет - ни хитрый, ни обыкновенный...
Могу предложить только следующий вариант:
В структуре CI_EKKO заводите собственное поле(не показывая его на экране) и по кнопочке на пользовательском экране его меняете, как триггер: если было равно 0(или space), присваиваете значение 1(или X) и наоборот.
Вот тогда стандарт поймет, что что-то изменилось и вызовет MEPO_DOC_PROCESS, а внутри него BAdI ME_CHECK_ALL_ITEMS Wink

Делал. Проставлял значение во всех экзитах расширения: MM06E005.
Smile И в заголовочных и в позиции. и ничего... Может где-то в другом месте триггер заполнять этот нужно? Что то у меня не получилось вызвать проверку MEPO_DOC_PROCESS... Вы пробовали?
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Thu Mar 05, 2009 9:47 pm    Post subject: Reply with quote

Мда.. Я пробовал, но изменял при этом стандартное поле 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 и выше) по регистрации изменений не производятся.
Затем после обработки экрана и в том, и в другом случае включается обработка изменений:
    METHOD TRANSPORT_CHANGED_VIEWS CL_FRAMEWORK_MM
    METHOD PAI_FINISHED CL_WINDOW_MM
    METHOD HANDLE_EVENT CL_SCREEN_VIEW_MM
    METHOD HANDLE_EVENT CL_COMPOSITE_SCREEN_VIEW_MM
    METHOD HANDLE_EVENT CL_WINDOW_MM
    MODULE (PAI) EVENT_PAI_FINISHED
    FORM CALL_SCREEN
    METHOD SEND CL_WINDOW_MM
    FUNCTION MEGUI_MAINTAIN
    EVENT START-OF-SELECTION

где анализируется, есть ли измененные данные, или нет.
В первом случае они появляются, в случае с пользовательским экраном - нет.
Crying or Very sad
Так что остается вытаскивать в PAI-логике ссылку на объект (SAPLMEGUI)call_view и самому вызывать унаследованный метод NOTIFY_DATA_CHANGED из класса CL_FOREIGN_APPLICATION_VIEW_MM.
Но что из этого получится, пока не ясно Confused

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Preatos
Участник
Участник



Joined: 25 Nov 2008
Posts: 7

PostPosted: Fri Mar 06, 2009 11:23 am    Post subject: Reply with quote

О да, о да!!! Решил!

Code:
      CALL METHOD cl_framework_mm=>get_instance
                    IMPORTING ex_instance = global_framework.


      READ TABLE global_framework->DISPATCH_LIST INTO ls_dispatch
                                                  WITH KEY REPID = 'SAPLMEGUI'
                                                           DYNNR = 1221.


      assign ('(SAPLMEGUI)mepo1222') to <FO>.
      data butxt like mepo1222-butxt.
      butxt = <FO>-BUTXT.
      <FO>-BUTXT = 'ZZZ'.

      mmpur_dynamic_cast lcl_mod_mm ls_dispatch-receiver.

      CALL METHOD lcl_mod_mm->handle_event( 'PAI' ).


Всем спасибо за внимание и понимание!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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.