Текущее время: Вт, апр 23 2024, 21:50

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 11:08 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Здравствуйте.
Столкнулся со следующей проблемой.
Есть экран, из PAI-модулей которого вызываются цепочки процедур (подпрограмм, ФМ-ов, методов классов): П1->П2- П3->…->Пn. В последней процедуре Пn выводится (естественно, в определенных ситациях) предупреждение – message типа W.
Как всегда внезапно, оказалось, что если программа попала в Пn из AT EXIT-COMMAND-модуля, дело заканчивается дампом.
Есть ли какая-то возможность в процедуре Пn определить стандартными САПовскими средствами, выполняется ли код в рамках AT EXIT-COMMAND-модуля?
ЗЫ. Варианты – передавать по всей цепочке признак этого; создать глобальную переменную, хранящую этот признак; засовывать(доставать) признак в(из) память(и); выдавать сообщения другого типа; заменить exit-команды на обычные; изучать стек вызовов – рассматривались, но наиболее привлекательным кажется тот вариант, насчет которого вопрос.
ЗЗЫ. Устроит вариант и с просто выводом W-сообщения в AT EXIT-COMMAND-е (со всеми его свойствами). Но я так понимаю, это нереально.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 11:23 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
А если такой вариант, заменить на тип S и выдавать как W ( DISPLAY LIKE 'W')


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 11:27 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Пробовал: отрабатывает как S.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 11:36 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
Тогда вопрос, зачем при выходе выводить предупреждающее сообщение, может перенести это в модуль user_command

З.Ы. даже в справке написано что проверки должны разрешить завершение данного модуля.

Note

The function type of a function is determined in the Screen Painter or Menu Painter. Usually those functions of the user interface are defined with function type "E" that are assigned to the icons Back, Exit and Cancel in the standard toolbar of the GUI status. Therefore, the called dialog module should terminate the screen processing and allow security checks, if required.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 11:57 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Вариант "заменить exit-команды на обычные" рассматривался, но не подходит. Есть много [чужого] кода, который рассчитывает на required-поля.
Вариант убрать вывод сообщения из exit-команды тоже не подходит: пользователь при выходе должен иметь возможность сохранить данные со всеми проверками и сообщениями.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 12:05 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
ФМ SYSTEM_CALLSTACK и чтение сверху-вниз, пока не упремся в модуль... :roll:

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 12:08 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Вариант "изучать стек вызовов" рассматривался. Но хотелось бы странного :). Вернее, удобного (если это возможно).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?  Тема решена
СообщениеДобавлено: Вт, май 31 2016, 12:31 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, сен 09 2004, 07:32
Сообщения: 777
Откуда: Москва
Пол: Мужской
Эстет, однако... :wink:

Можно попробовать так, но на свой страх и риск, как обычно... :lol: Хотя в стандартном коде этих вызовов немало.
Code:
    DATA: my_event TYPE c LENGTH 3.

    CALL 'DY_GET_DYNPRO_EVENT' ID 'EVENT' FIELD my_event.

_________________
"Прежде чем сделать что-то, подумай, к чему это может привести..."


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 12:31 
Специалист
Специалист

Зарегистрирован:
Пн, июл 11 2011, 10:50
Сообщения: 197
А может тогда просто логировать сообщения и не прерывать выполнение модуля.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 12:36 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Bimit написал(а):
А может тогда просто логировать сообщения и не прерывать выполнение модуля.
Надо и залогировать, и вывести :).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 12:42 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
nicky555 написал:
Можно попробовать так, но на свой страх и риск...
О, то что надо. my_event приобретает значение PAI или EXC. Спасибо!
ЗЫ. Если можно, я пока тему не буду помечать как решенную - вдруг кто-то из участников форума знает еще способы (и поделится ими :)).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 13:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
LAT написал(а):
Вариант "заменить exit-команды на обычные" рассматривался, но не подходит. Есть много [чужого] кода, который рассчитывает на required-поля.
Вариант убрать вывод сообщения из exit-команды тоже не подходит: пользователь при выходе должен иметь возможность сохранить данные со всеми проверками и сообщениями.

"Так вам что нужно - шашечки или ехать?" :?
При наличии кучи мусорного кода вы хотите получить наиболее элегантное значение.
Может, стоит переделать логику на стандартную SAP-овскую - если нажал на красную стрелку (команда E) - ничего не спрашивать и выходить.
А вот если нажал на зеленую (обычная команда) - сначала отработал проверки, а уже затем все остальное.

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 13:12 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Удав написал(а):
Может, стоит переделать логику на стандартную SAP-овскую...
Пользователи хотят стандартной человеческой логики :). В т.ч., если они нажали "выход", чтобы программа определила, что на экране что-то менялось, предложила, в частности, сохранить изменения и, если предложение принято, сделала полноценное сохранение - с проверками и сообщениями.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 18:20 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3074
Откуда: Москва
Для этого есть зеленая кнопка. Если человек уверен в выходе, то он жмет на красную.
Это и есть нормальная человеческая логика - зачем пытаться сохранить то, что не заполнил? :wink:

_________________
С уважением,
Удав.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить, что код выполняется в рамках AT EXIT-COMMAND-модуля?
СообщениеДобавлено: Вт, май 31 2016, 18:54 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Имхо, вопрос о "правильной логике" и вообще удобном пользовательском интерфейсе является немножко сильно холиварным.


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

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


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

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


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

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