Skip to Content
author's profile photo Former Member
Former Member

Call a BADI

Kindly let me know how to find out that a BADI is called in a standard program.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Jan 08, 2007 at 07:41 AM
    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 08, 2007 at 07:44 AM

    Hi,

    Follow the below steps to find out what all BADI's are called when you press any button in any transaction.

    1) Goto se24 (Display class cl_exithandler)

    2) Double click on the method GET_INSTANCE.

    3) Put a break point (CASE sy-subrc).

    Now

    4) Execute SAP standard transaction

    5) Press the required button for which you need to write an exit logic, the execution will stop at the break point.

    6) Check the values of variable 'exit_name', it will give you the BADI name called at that time.

    7) This way you will find all the BADIs called on click of any button in any transaction.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Jan 08, 2007 at 07:56 AM

    Please have a look at below code. It may be helpful to you. It gives a list of BADI for a particular tcode.

    &----


    *& Report ZBADI *

    *& *

    &----


    *& *

    *& *

    &----


    REPORT zbadi .

    TABLES : tstc,

    tadir,

    modsapt,

    modact,

    trdir,

    tfdir,

    enlfdir,

    sxs_attrt ,

    tstct.

    DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.

    DATA : field1(30).

    DATA : v_devclass LIKE tadir-devclass.

    PARAMETERS : p_tcode LIKE tstc-tcode,

    p_pgmna LIKE tstc-pgmna .

    DATA wa_tadir TYPE tadir.

    START-OF-SELECTION.

    IF NOT p_tcode IS INITIAL.

    SELECT SINGLE * FROM tstc WHERE tcode EQ p_tcode.

    ELSEIF NOT p_pgmna IS INITIAL.

    tstc-pgmna = p_pgmna.

    ENDIF.

    IF sy-subrc EQ 0.

    SELECT SINGLE * FROM tadir

    WHERE pgmid = 'R3TR'

    AND object = 'PROG'

    AND obj_name = tstc-pgmna.

    MOVE : tadir-devclass TO v_devclass.

    IF sy-subrc NE 0.

    SELECT SINGLE * FROM trdir

    WHERE name = tstc-pgmna.

    IF trdir-subc EQ 'F'.

    SELECT SINGLE * FROM tfdir

    WHERE pname = tstc-pgmna.

    SELECT SINGLE * FROM enlfdir

    WHERE funcname = tfdir-funcname.

    SELECT SINGLE * FROM tadir

    WHERE pgmid = 'R3TR'

    AND object = 'FUGR'

    AND obj_name EQ enlfdir-area.

    MOVE : tadir-devclass TO v_devclass.

    ENDIF.

    ENDIF.

    SELECT * FROM tadir INTO TABLE jtab

    WHERE pgmid = 'R3TR'

    AND object IN ('SMOD', 'SXSD')

    AND devclass = v_devclass.

    SELECT SINGLE * FROM tstct

    WHERE sprsl EQ sy-langu

    AND tcode EQ p_tcode.

    FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.

    WRITE:/(19) 'Transaction Code - ',

    20(20) p_tcode,

    45(50) tstct-ttext.

    SKIP.

    IF NOT jtab[] IS INITIAL.

    WRITE:/(105) sy-uline.

    FORMAT COLOR COL_HEADING INTENSIFIED ON.

    • Sorting the internal Table

    SORT jtab BY object.

    DATA : wf_txt(60) TYPE c,

    wf_smod TYPE i ,

    wf_badi TYPE i ,

    wf_object2(30) TYPE c.

    CLEAR : wf_smod, wf_badi , wf_object2.

    • Get the total SMOD.

    LOOP AT jtab INTO wa_tadir.

    AT FIRST.

    FORMAT COLOR COL_HEADING INTENSIFIED ON.

    WRITE:/1 sy-vline,

    2 'Enhancement/ Business Add-in',

    41 sy-vline ,

    42 'Description',

    105 sy-vline.

    WRITE:/(105) sy-uline.

    ENDAT.

    CLEAR wf_txt.

    AT NEW object.

    IF wa_tadir-object = 'SMOD'.

    wf_object2 = 'Enhancement' .

    ELSEIF wa_tadir-object = 'SXSD'.

    wf_object2 = ' Business Add-in'.

    ENDIF.

    FORMAT COLOR COL_GROUP INTENSIFIED ON.

    WRITE:/1 sy-vline,

    2 wf_object2,

    105 sy-vline.

    ENDAT.

    CASE wa_tadir-object.

    WHEN 'SMOD'.

    wf_smod = wf_smod + 1.

    SELECT SINGLE modtext INTO wf_txt

    FROM modsapt

    WHERE sprsl = sy-langu

    AND name = wa_tadir-obj_name.

    FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

    WHEN 'SXSD'.

    • For BADis

    wf_badi = wf_badi + 1 .

    SELECT SINGLE text INTO wf_txt

    FROM sxs_attrt

    WHERE sprsl = sy-langu

    AND exit_name = wa_tadir-obj_name.

    FORMAT COLOR COL_NORMAL INTENSIFIED ON.

    ENDCASE.

    WRITE:/1 sy-vline,

    2 wa_tadir-obj_name HOTSPOT ON,

    41 sy-vline ,

    42 wf_txt,

    105 sy-vline.

    AT END OF object.

    WRITE : /(105) sy-uline.

    ENDAT.

    ENDLOOP.

    WRITE:/(105) sy-uline.

    SKIP.

    FORMAT COLOR COL_TOTAL INTENSIFIED ON.

    WRITE:/ 'No.of Exits:' , wf_smod.

    WRITE:/ 'No.of BADis:' , wf_badi.

    ELSE.

    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

    WRITE:/(105) 'No userexits or BADis exist'.

    ENDIF.

    ELSE.

    FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.

    WRITE:/(105) 'Transaction does not exist'.

    ENDIF.

    AT LINE-SELECTION.

    DATA : wf_object TYPE tadir-object.

    CLEAR wf_object.

    GET CURSOR FIELD field1.

    CHECK field1(8) EQ 'WA_TADIR'.

    READ TABLE jtab WITH KEY obj_name = sy-lisel+1(20).

    MOVE jtab-object TO wf_object.

    CASE wf_object.

    WHEN 'SMOD'.

    SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).

    CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

    WHEN 'SXSD'.

    SET PARAMETER ID 'EXN' FIELD sy-lisel+1(20).

    CALL TRANSACTION 'SE18' AND SKIP FIRST SCREEN.

    ENDCASE.

    Best Regards,

    Vibha

    *Please mark all the helpful answers

    Add a comment
    10|10000 characters needed characters exceeded

    • Hello Vibha

      Your report resolves the link between transaction -> program -> development class (of program) -> BAdIs (of development class).

      This chain of links <b>may or may not</b> lead to the required information. I guess in most cases it will be misleading.

      Just an example: Executing your report with transaction VPE3 results in the same BAdIs as for transaction XD01. These BAdIs are (most likely) never called in this transaction. In contrast, the BAdI HRPAD00_PREM (no ECC 5.0) which is indeed triggered during VPE3 is completely missed.

      Regards

      Uwe

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.