Текущее время: Чт, июн 26 2025, 02:40

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


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

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


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

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