Текущее время: Пн, июл 14 2025, 19:39

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


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

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


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

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