Текущее время: Пт, июл 04 2025, 21:08

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Поиск исполняемых Badi
СообщениеДобавлено: Вт, ноя 24 2015, 23:26 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Коллеги, привет.

Всем доброго времени суток.

Есть следующий вопрос. Заранее оговорюсь, что мои знании abap в зачаточном состоянии, поэтому извиняюсь за возможно неточные формулировки. :oops:

Мне необходимо проанализировать есть ли исполняемые (или я так понимаю динамические Badi) в программном коде. Как искать badi я знаю. Сообственно в искомой транзакции я нашел одну. Далее как ставить точку останова в момент вызовы Badi я тоже знаю. Но мне непонятно вызывается ли эта badi или нет. Строчка отладчика попадает на badi, потом переходит сразу на несколько строчек вниз. И мне не понятно выполняется ли код по этой badi.

Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Чт, ноя 26 2015, 00:53 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
Покажите здесь вызов самой BADI.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пт, дек 18 2015, 10:32 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Здравствуйте,

Извиняюсь за задержку с ответом.

Немного предистории - мне надо найти вызовы Badi для транзакции j3ralfinv19.

Badi я ищу по следующему алгоритму:

1) В SE24 ввожу CL_EXITHANDLER

2) Далее ставлю точку останова на строке 14: CALL METHOD cl_exithandler=>get_class_name_by_interface

3) После этого запускаю транзакцию - j3ralfinv19

4) Отладчик останавливается сразу на Badi (как я понимаю)

Вызов Badi:

Code:
METHOD get_instance.

  CLASS cl_badi_flt_data_trans_and_db DEFINITION LOAD.

  DATA: exit TYPE REF TO object,
        type_ref TYPE REF TO cl_abap_typedescr,
        class_name TYPE seoclsname,
        abs_type_classname TYPE string,
        def_impl TYPE seex_boolean VALUE seex_false,
        mig_enhspotname TYPE enhspotname,
        is_impl TYPE enhboolean,
        mig_badi_name TYPE enhbadiid.

  CALL METHOD cl_exithandler=>get_class_name_by_interface
    EXPORTING
      instance                      = instance
    IMPORTING
      class_name                    = class_name
    CHANGING
      exit_name                     = exit_name
    EXCEPTIONS
      no_reference                  = 1
      no_interface_reference        = 2
      no_exit_interface             = 3
      data_incons_in_exit_managem   = 4
      class_not_implement_interface = 5
      OTHERS                        = 6.
  CASE sy-subrc.


Я нажимаю на exit_name - и так я узнаю имя Badi. А вот как понять - вызыватеся ли эта Badi?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пт, дек 18 2015, 13:08 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Поступите проще - поищите слово BADI в программе J_3R_LF_INV3_19.

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, дек 21 2015, 12:17 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Еще пару глупых вопросов:

- Слово Baid я нашел, в транзакции SE38.

Например вот тут:

Code:
************************************************************************
*Necessary form routines.
  INCLUDE j_3r_inv3_19_f01 IF FOUND.
  INCLUDE j_3r_inv3_19_badi IF FOUND.


Как понять выполняется ли эта Badi или нет?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, дек 21 2015, 12:29 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
1. Ищите слово "BADI" по всему тексту программы - при поиске указывайте "Глобал. в глав. програм.".
2. Ставьте точки останова по тексту программы поближе к слову "BADI".

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, дек 21 2015, 15:04 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Так и сделал.

И badi в незакоменченном виде написано только в инклюде - J_3R_INV3_19_BADI, как например:

Code:
if p_formna = 'INV3'.
            GET BADI gp_inv3_badi.
        elseif  p_formna cs 'INV19'.
            GET BADI gp_inv19_badi.
        endif.
        gv_badi_exists = 1.


И поставил в этом инклюде точку останова.

Далее при запуске транзакции j3ralfinv19, дебаггер оставнавливается в инклюде J_3R_INV3_19_BADI.

Это означает, что запускается badi? И эта badi выполняется, меняя таким образом стандартную логику или нет?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Вт, дек 22 2015, 08:57 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
после получения экземпляра класса (instance) должен вызваться необходимый вам метод интерфейса badi (сигнатуру метода можно посмотреть tr SE24 IF_*)
посмотрите стэк вызовов (пу в отладчике 2-я вкладка)
подымайтесь выше и выше до необходимого места F7
вызовам методов могут предшествовать условия


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пт, дек 25 2015, 10:20 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Можно попроще. Для туго соображающих :oops:

Вот остановился отладик у меня в инклюде J_3R_INV3_19_BADI.

Цитата:
после получения экземпляра класса (instance) должен вызваться необходимый вам метод интерфейса badi (сигнатуру метода можно посмотреть tr SE24 IF_*)


а где это посмотреть можно? на вкладке ABAP and Screen Stack?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, дек 28 2015, 05:55 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 14 2011, 07:26
Сообщения: 80
Откуда: Альфа Центавра
Пол: Мужской
Вы остановились тут?
Code:
* BAdI handler routines for AFS
FORM init_afs_handler.

    TRY.
        gv_afs_badi_exists = 0.
        GET BADI gp_afs_badi.
        gv_afs_badi_exists = 1.


Щелкаете на gp_afs_badi -> Потом по типу J_3RV_AFS_DESCR -> Потом по интерфейсу J_3RV_AFS_DESCR_BADI_INTF
Если вас интересует метод MATERIAL_DETAILS, ставьте брэйкпойнт в том же инклюде на

Code:
* Select detailed material information by invoking AFS BAdI
FORM get_afs_matdetail USING MATNR TYPE MATNR WERKS TYPE WERKS_D LGORT TYPE LGORT_D CHARG TYPE CHARG_D
                    CHANGING DETAILS TYPE CHAR100.

    CHECK gv_afs_badi_exists = 1.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, янв 18 2016, 09:48 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Спасибо за ответ.

Не совсем здесь.
Остановился тут:

Code:
*&---------------------------------------------------------------------*
*&  Include           J_3R_INV3_19_BADI
*&---------------------------------------------------------------------*

* BAdI handler routine for INV-3/19
FORM call_badi_handler USING pv_func TYPE ANY CHANGING pt_content TYPE ANY TABLE.

  IF pv_func = 'INIT'.
*       Get BADI instance
*       exception object reference
*    DATA: lo_ref type ref to cx_root.
    TRY.
        gv_badi_exists = 0.
        if p_formna = 'INV3'.
            GET BADI gp_inv3_badi.
        elseif  p_formna cs 'INV19'.
            GET BADI gp_inv19_badi.
        endif.
        gv_badi_exists = 1.

      CATCH cx_badi_not_implemented. "#EC NO_HANDLER
      CATCH cx_badi_multiply_implemented. " INTO lo_ref.
        MESSAGE e001.
      CATCH cx_badi_initial_context. " INTO lo_ref.
        MESSAGE e002.
    ENDTRY.
  ELSE.
    CHECK gv_badi_exists = 1.



Цитата:

Щелкаете на gp_afs_badi -> Потом по типу J_3RV_AFS_DESCR -> Потом по интерфейсу J_3RV_AFS_DESCR_BADI_INTF


Соответственно gp_afs_badi нет, есть gv_badi_exists.

Куда надо щелкнуть?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Пн, янв 18 2016, 10:24 
Старший специалист
Старший специалист

Зарегистрирован:
Пн, апр 17 2006, 21:49
Сообщения: 299
Откуда: Москва
Если есть реализация BADI, то
gv_badi_exists = 1

В таком случае, далее видно, что будут вызовы методов BADI

Например:
Code:
WHEN 'INV3'.
            CALL BADI gp_inv3_badi->set_default_values
              EXPORTING
                it_sel_params_list   = t_original_parameters
              IMPORTING
                et_sel_params_values = t_new_parameters.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Поиск исполняемых Badi
СообщениеДобавлено: Чт, янв 21 2016, 11:55 
Специалист
Специалист

Зарегистрирован:
Чт, сен 29 2011, 11:03
Сообщения: 215
Спасибо за ответы.


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

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


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

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


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

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