Текущее время: Вс, июл 13 2025, 04:42

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Сб, июн 21 2014, 19:18 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, мар 12 2012, 12:49
Сообщения: 83
Подскажите пожалуйста как можно решить такую задачу, знаем название badi, нужно найти в каких программах и фм-никах вызывается ее метод, как это можно сделать, пробовал через Where-Used List и по самой badi и по интерфейсу и по методу из интерфейса, программ и фм-ников не находит? Интересует не какая-то конкретная badi, а просто сам принцип как это сделать можно.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Вс, июн 22 2014, 13:45 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Обычно задача решается от обратного - известна программа(транзакция) и нужно найти, какие BAdI в ней вызываются.
В вашем случае поможет google с именем BAdI.

Дело в том, что WHERE-USED LIST для интерфейса(метода интерфейса) помогает только при статических вызовах BAdI. А есть еще динамические вызовы расширений.

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


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Пн, июн 23 2014, 13:27 
Начинающий
Начинающий

Зарегистрирован:
Вт, май 20 2014, 15:13
Сообщения: 8
Любые вызовы методов отдельного BAdI, и статические, и динамические, можно найти через отладчик. Хотя это не решает задачу "найти все места вызова BAdI" сразу. Находятся только те BAdI, которые используются в запускаемой транзакции.

Чтобы найти, какие BAdI используются в транзакции, нужно
1) запустить транзакцию и остановиться в ней перед тем моментом, начиная с которого нужно проверять использование BAdI (например, перед сохранением).
2) включить отладку в запущенной транзакции командой /h
3) выполнить очередное действие в транзакции (например, сохранить) — и попасть в отладчик
4) добавить точку прерывания (Shift+F9) для метода get_instance класса cl_exithandler
5) продолжить выполнение клавишей F8

Начиная с этого момента и до завершения транзакции отладчик будет останавливаться перед вызовом каждой BAdI.
Чтобы проверять наличие вызова только одной BAdI, а не получать остановку на каждом вызываемом, нужно на шаге 4) добавить условие.
В поле "Свободные условия выбора" ("Free Condition Entry") ввести название BAdI (то, что вводится в транзакции SE18).
Например, для ADDRESS_SUBSCREEN нужно написать
Code:
exit_name = 'ADDRESS_SUBSCREEN'


Тогда отладчик будет останавливать выполнение, например, в транзакции SU01 после нажатия на кнопку F7 "Просмотреть". Это статический вызов, находится в инклюде LSZA1TO3. Я его нашёл для примера, взяв первую пришедшую на ум транзакцию — su01. Как найти все места вызова этого ADDRESS_SUBSCREEN знает, наверное, Гугл (как Удав писал).


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Пн, июн 23 2014, 15:13 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Запустите программу ZTAV_SEARCH_EXIT, указав название нужной вам транзакции. Вы получите листинг со всеми участвующими BADI,OPEN FILE, со всеми проетами,как стандартными так и самопальными.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Пн, июн 23 2014, 16:35 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, мар 12 2012, 12:49
Сообщения: 83
gasjuk написал(а):
Запустите программу ZTAV_SEARCH_EXIT, указав название нужной вам транзакции.

В моей системе такой нет :lol:
Кроме того задача и состоит в том чтобы найти название транзакции(или фм-ника) которая вызывает конкретную badi.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?  Тема решена
СообщениеДобавлено: Вт, июн 24 2014, 03:17 
Специалист
Специалист

Зарегистрирован:
Вт, июн 10 2014, 09:41
Сообщения: 180
Могу предложить харкорный вариант: при помощи транзакции CODE_SCANNER найти строку с названием BADI :roll:


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Вт, июн 24 2014, 09:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, апр 10 2009, 11:13
Сообщения: 1308
А я бы предложил погуглить... и поискать на саппорте в нотах...


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Вт, июн 24 2014, 13:02 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Пн, июл 09 2007, 15:51
Сообщения: 24
Тимур Гудков написал(а):
Любые вызовы методов отдельного BAdI, и статические, и динамические, можно найти через отладчик. Хотя это не решает задачу "найти все места вызова BAdI" сразу. Находятся только те BAdI, которые используются в запускаемой транзакции.

Чтобы найти, какие BAdI используются в транзакции, нужно
1) запустить транзакцию и остановиться в ней перед тем моментом, начиная с которого нужно проверять использование BAdI (например, перед сохранением).
2) включить отладку в запущенной транзакции командой /h
3) выполнить очередное действие в транзакции (например, сохранить) — и попасть в отладчик
4) добавить точку прерывания (Shift+F9) для метода get_instance класса cl_exithandler
5) продолжить выполнение клавишей F8

Добавлю:
для новых BADI необходимо установить точку прерывания для Команды ABAP - get badi


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как найти место вызова badi если известно ее название?
СообщениеДобавлено: Вт, июн 24 2014, 13:58 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, мар 12 2012, 12:49
Сообщения: 83
UKY написал(а):
Могу предложить харкорный вариант: при помощи транзакции CODE_SCANNER найти строку с названием BADI :roll:

В принципе то что надо, только я надеялся что будет работать со скоростью where-used list :D, но лучше так чем ничего.


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

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


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

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


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

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