Вы находитесь на странице: 1из 7

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

Community WIKI

Welcome, Guest

Register

Search the Community

Login Register Getting Started Store Search the Community ABAP Development Detailed explanation about BADI and the

Created by Guest, last modified by Bret Halford on Jul 18, 2013

Detailed explanation about BADI with an example (ME23n transaction)

Def:

BADI (Business Add-In) is a new SAP Object Oriented enhancement technique which is used to add our own business functionality to the existing SAP standard functionality. BADI's are available in SAP R/3 from the system release 4.6c

Why BADI?

In contrast to the earlier enhancement techniques, BADI follows Object Oriented approach to make them reusable. A BADI can be used any number of times where as standard enhancement techniques can be used only once. For example if we assign an enhancement to one custom project, then that enhancement cannot be assigned to any other custom projects. To overcome this drawback SAP has provided a new enhancement technique called BADI.

Transaction code for BADI Definition:

SE18

When you create a BAdI definition, a class interface will be automatically created and you can define your methods in the interface. The implementation of the methods can be done in SE19 transaction. When a BAdi is created following are automatically generated:

An interface with 'IF_EX_' inserted between the first and second characters of the BAdi namea BAdi is created following are automatically generated: An adapter class with 'CL_EX_' inserted between the

An adapter class with 'CL_EX_' inserted between the first and second characters of the BAdi name.between the first and second characters of the BAdi name Transaction code to Implement BADI: SE19

Transaction code to Implement BADI:

SE19

Types of BADI's:

While creating a BADI using the T-code SE18, it provides the pop-up screen to select the type of BADI to be used is as shown below.

to select the type of BADI to be used is as shown below. Steps to find

Steps to find BADI:

1. Go to SE 24 transaction, type CL_EXITHANDLER and then click on display.

2. Double click on GET_INSTANCE method.

3. Put a break-point on class method CL_EXITHANDLER=>GET_CLASS_NAME_BY_INTERFACE.

There are two types of BADI's.

1) Multi use BADI:

With this option, any number of active implementations can be assigned to the same definition BADI. By default this option is checked. If we want the BADI for multiple use

If you have multiple-use BADI definitions, the sequence must not play any role.

The drawback in Multiple use BADI is, it is not possible to know which BADI is active especially in country specific version.

2) Filter dependent BADI:

Using this option we can define the BADI's according to the filter values to control the add-in implementation on specific criteria.

Ex: Specific country value.

How to Find BADI's in SAP system:

Method 1:

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki 4. Run any transaction on which

4. Run any transaction on which we want find the BADI's say VA01.

5. Give the transaction name VA01 and press enter.

6. It will automatically take you to the break-point which we have set the in the SE24

you press F8 a list BADI names will be displayed.

transaction. Each time if

list BADI names will be displayed. transaction. Each time if 7. You can find the BADI

7. You can find the BADI name in field EXIT_NAME and if you double click on it, we can get the corresponding BADI name before hit the corresponding screen. Based on the requirement find the BADI name and accordingly implement your functionality using the transaction se19.

Method 2:

Go to transaction SE84 and click on Enhancements. Then double click on Business Add-Ins.

For example, if you want to find the BADI's for the standard transaction ME22n, the procedure is as follows. This example shows, finding the way of BADI names by providing the Package of ME22n.

1)

then click on Status. It displays the following information.

Go to transaction ME22n. Select the System option from the menu and

2)

the program and click on Go to tab from the Menu. There we can find the package name of the standard transaction ME22n.Copy and paste it in the

Double click on the program name i.e. SAPLMEGUI. It will take you into

on the program name i.e. SAPLMEGUI. It will take you into package filed. 3) name and

package filed.

3)

name and implement it based on the business requirement using the transaction SE19.

Now Press F8, a list of BADI names will be displayed as shown below. Select the appropriate BADI

Method 3:

as shown below. Select the appropriate BADI Method 3: The procedure is as explained below. Finding

The procedure is as explained below.

Finding the BADI names using SE18 transaction

1)

on Information System button as shown below.

Go to transaction SE 18. Select F4 help for the definition name and click

2)

standard transaction say VA02. Finding the package is explained above. Please refer above method to find the package name. The package name for VA02 transaction is 'VA.'

A pop-up screen will be displayed and give the package name for any

3)

appropriate BADI name and implement it using T-code SE19.

A list of BADI names will be displayed for the transaction VA02. Select the

Example:

This Example explains how to implement BADI's. Here I am trying to show how to add custom screen to the ME23N Transactions using BADI's.

- Find the BADI using the method 1 as shown above.

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki The BADI name to add the

The BADI name to add the custom screen to ME23n is 'ME_GUI_PO_CUST'.

- Go to T-code SE19 and create an implementation ZME_GUI_PO_CUST and then click on create button

- Give the Definition name "ME_GUI_PO_CUST" and continue, give short text, save

- Click on Interface Tab, you can find the implementation class name as

ZCL_IM_ME_GUI_PO_CUST2.

- Click on ZCL_IM_ME_GUI_PO_CUST2, which will take you to SE24.

- Add "MMMFD" in the Type Group Section of properties tab.

- Go to Attributes section and declare the following attribute

- SUBSCREEN1 Constant Public Type MEPO_NAME Name of a View

'ITEMSCREEN1 '.

- Go to Methods section, you can find the BADI interface methods.

- Double click on the method "IF_EX_ME_GUI_PO_CUST~SUBSCRIBE", this method is having 3 parameters

Go to the code section of the method and add the following code there.

code section of the method and add the following code there. Code for IF_EX_ME_GUI_PO_CUST~SUBSCRIBE: DATA:

Code for IF_EX_ME_GUI_PO_CUST~SUBSCRIBE:

DATA: ls_subscriber LIKE LINE OF re_subscribers. *--FIRST SCREEN POPULATION

*--we want to add a customer subscreen on the item detail tab

CHECK im_application = 'PO'.

CHECK im_element

= 'ITEM'.

*--each line in re_subscribers generates a subscreen. We add one subscreen

*--in this example

CLEAR re_subscribers[].

*--the name is a unique identifier for the subscreen and defined in this

*--class definition

ls_subscriber-name = subscreen1. *--the dynpro number to use

ls_subscriber-dynpro = '0002'. *--the program where the dynpro can be found

ls_subscriber-program = 'ZME_GUI_PO_CUST_SCREEN'. *--each subscreen needs itsown DDIC-Structure

ls_subscriber-struct_name = 'ZMARA'. *--a label can be defined

ls_subscriber-label = 'Cust BADI'. *--the position within the tabstrib can be defined

ls_subscriber-position = 7.

the tabstrib can be defined ls_subscriber-position = 7. *--the height of the screen can be defined

*--the height of the screen can be defined here. Currently we support two

*--screen sizes:

*--value <= 7 a sevel line subscreen

*--screen sizes: *--value <= 7 a sevel line subscreen *--value > 7 a 16 line subscreen

*--value > 7 a 16 line subscreen

ls_subscriber-height = 7. APPEND ls_subscriber TO re_subscribers. Save and check and back Double click on method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS".

Add the following code in the method. *given the field catalog of structure ZMARA we have to

*establish a mapping to metafields which are used for field selection

*purposes and error handling Standard definitions can be found in type

*pool MMMFD. It is important for customer fields to use integer

*constants above 90000000 for the metafield. FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping. LOOP AT ch_mapping ASSIGNING <mapping>. CASE <mapping>-fieldname.

WHEN 'MATNR'.

<mapping>-metafield = mmmfd_cust_08.

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki WHEN 'MTART'. <mapping>-metafield =

WHEN 'MTART'.

<mapping>-metafield = mmmfd_cust_09.

WHEN 'MATKL'.

<mapping>-metafield = mmmfd_cust_10.

ENDCASE.

ENDLOOP.

The metafield mapping important for field selection and error handling purpose. Save, check and back Activate the Implementation class. Activate the BADI Implementation.

Now create a structure in SE11 with the name ZMARA.

Add the following fields in the structure.

Now Create a Program with the Name 'ZME_GUI_PO_CUST_SCREEN' and create a screen with sub screen type with the number 0002.

create a screen with sub screen type with the number 0002. Add the fields on to

Add the fields on to screen from ZMARA program 'ZME_GUI_PO_CUST_SCREEN'.

* *

De comment the PBO module in screen flow logic and create the module in above program.

Add the following code in program ZME_GUI_PO_CUST_SCREEN. TABLES: ZMARA. DATA: call_subscreen TYPE sy-dynnr,

call_prog TYPE sy-repid,

call_view TYPE REF TO cl_screen_view_mm,

call_view_stack TYPE REF TO cl_screen_view_mm OCCURS 0.

*---------------------------------------------------------------------*

* FORM SET_SUBSCREEN_AND_PROG *

* FORM SET_SUBSCREEN_AND_PROG

*

*---------------------------------------------------------------------*

*

*

*---------------------------------------------------------------------*

* --> DYNNR

*

* --> PROG

*

* --> VIEW

*

* --> TO

*

* --> CL_SCREEN_VIEW_MM

*

*---------------------------------------------------------------------*

FORM set_subscreen_and_prog USING dynnr TYPE sy-dynnr

prog TYPE sy-repid

view TYPE REF TO cl_screen_view_mm.

call_subscreen = dynnr.

call_prog = prog.

call_view = view.

ENDFORM.

*&---------------------------------------------------------------------*

*&

Module STATUS_0002 OUTPUT

*&---------------------------------------------------------------------*

*

text

*----------------------------------------------------------------------*

MODULE STATUS_0002 OUTPUT.

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki SELECT SINGLE * FROM MARA INTO

SELECT SINGLE * FROM MARA

INTO CORRESPONDING FIELDS OF ZMARA

WHERE MATNR = '100-100'.

ENDMODULE.

" STATUS_0002 OUTPUT

The sub-routine "set_subscreen_and_prog" is must with the same signature. This routine is called from BADI to call the sub screen. Activate the screen & program. Now Go to T-Code ME23N to test the application. You can find a new tab is added in the item level with the name CUST BADI.

Final Output:

6 Comments

No labels

with the name CUST BADI. Final Output: 6 Comments No labels
with the name CUST BADI. Final Output: 6 Comments No labels

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki Guest Hi,   How to enable
an example (ME23n transaction) - ABAP Development - SCN Wiki Guest Hi,   How to enable
Guest

Guest

Hi,

 

How to enable BAdi ME_PROCESS_PO_CUST definition "Multiple Use" enable?

-SId

Guest

Guest

thanx for the post

sumanth pelluru

Thanks for posting useful information of badi.

 
 

i want like to know that

suppose,

if we have done 3 implementations for a single method (using Multiple badi's), and if we have called that method, how do we know that a particular

implemented badi is triggered from that 3 implementations

:)

Harkirat Kaur

Detail Explanation of BADI's providing clarity of topic.

 

2/6/2018

Detailed explanation about BADI and the ways to find the BADI with an example (ME23n transaction) - ABAP Development - SCN Wiki

an example (ME23n transaction) - ABAP Development - SCN Wiki ABAPER P Hello I followed the

Hello

I followed the same procedure and able to add custom badi tab in me23n Tcode.

But this newly added custom tab is not visible in me21n and me22n and it is only visible to me23n why ?

Now I want to add data manually into custom fields and store it how to make it possible ?

is this BADI ME_GUI_PO_CUST is only used to display data in custom field ? ir we add the data to custom fields and save it ? and this custom tab visible only for me23n ?

Follow SCN