SlideShare a Scribd company logo
3
Most read
13
Most read
14
Most read
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
Applies To:
SAP R3 v4.70, however can be adapted for other releases, including Netweaver 2004 v7.
Summary
This tutorial explains how to implement a Business Add In (BAdI), in a Customer Modification – CMOD,
environment and benefit from all the flexibility of the BADI, while avoiding all the limitations associated with
CMOD.
By: Glen Spalding
Company: gingle
Date: 10 February 2006
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
Table of Contents
Applies To:........................................................................................................................................1
Summary ..........................................................................................................................................1
Table of Contents .............................................................................................................................2
Enhancements..................................................................................................................................3
Historic Problem ...............................................................................................................................3
Solution.............................................................................................................................................3
Example............................................................................................................................................4
Create an Active Project with Enhancement Assigned ................................................................4
Test Enhancement........................................................................................................................7
Create BAdI Definition ..................................................................................................................8
BAdI Hook...................................................................................................................................10
BAdI Implementation 1 ...............................................................................................................12
Test BAdI Implementation 1 .......................................................................................................16
BAdI Implementation 2 ...............................................................................................................16
Test BAdI Implementation 1 and 2 .............................................................................................20
Summary ........................................................................................................................................21
Author Bio.......................................................................................................................................21
Disclaimer & Liability Notice...........................................................................................................21
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
Enhancements
SAP provides a variety of “Enhancements” for functional enrichment.
Enhancements prior to Netweaver 2004 exist in a number of guises – User Exits, Customer Exits,
Menu/Screen/Field Exits, and BADIs. Each has their own manner of implementation.
This topic is concerned with User Exits and Customer Exits.
Enhancements are scattered throughout the SAP System at predefined strategic points, where changes could
prove beneficial without jeopardizing the integrity of the surrounding functionality.
You may be lucky to find such an Enhancement right where you need it however there are times when the
Enhancement needs to be shared among other developments.
Historic Problem
Because User and Customer Exits are implemented via code, it can become very cumbersome when the Exit
is in a popular location and used for many purposes or requirements, especially if it is shared throughout
developments.
An example of this could be when using an “IDoc Extension”. The extended SAP IDoc could be required by a
number of departments, each attempting to develop their own specific functionality, and the location to
populate or read the customized segments of the IDoc exists in a single area of code as either a “Function
Module” or "Include”.
It becomes even more complicated when each developer shares the coded area and has to manage
“Transports” of shared objects amongst them. Not to mention the trouble caused when a syntax or program
error occurs across a shared object affecting all who are using it.
Yet another problem exists when a developer has completed their work, and is ready to “Release” the
associated Transport, which contains the shared code, and all remaining that use, program, or develop that
object are not ready.
A final runtime problem exists when each piece of functionality within an Enhancement must be implemented
and run as a whole. Enhancements must exist in a “Project” when they are implemented – see transaction
CMOD. One or more Enhancements can exist in a Project. But, if an Enhancement exists in a Project, it
cannot coexist in another Project.
The Project is “Activated” or “Deactivated”, i.e. on or off, not the individual Enhancements, therefore anything
in the Project must be deemed as an “All or Nothing”.
Needless to say, User and Customer Exits can require very careful management.
Solution
To address the problem above, I propose a simple and elegant way: -
Implement a custom BAdI inside the Enhancement
The Enhancement can then benefit from discrete pieces of work and remain detached and independent from
others that may share the Enhancement.
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
The initial setup for implementing the BAdI into the Enhancement is best performed away from any other
piece of work. This way, it too, remains separate and in its own Transport that must be Released prior to all
other surrounding work that maybe required.
Example
I have chosen a scenario, “Maintain Company Address” that should exist in all SAP versions concerned,
including the Netweaver Sneak Preview 2004s, and I hope all other training mini versions of SAP.
Transaction SUCOMP.
SAP Menu
Tools -> Administration -> User Maintenance -> SU01 Users
Environment -> Maintain company address
We will simply edit a newly created Company Address, and implement the related SAP Enhancement
SZSR0003.
We will program two separate Popup Dialogs to act as our multiple areas of custom functionality. The Popups
will be programmed in their own BAdIs. They will be “fired” when the user, for example, changes the “Time
Zone” of the Customer Address” and presses the Enter key.
Create an Active Project with Enhancement Assigned
To begin, we need to create a Project to implement the Enhancement. Transaction CMOD.
Give the “Project” name, and press the Create button.
Give the Project a Description and Save. When
prompted for a “Package”, simply choose “Local
Object”. The “Project” now exists and is empty.
1
Now we need to add our Enhancement, so choose the
“Enhancement assignments” button.
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
e possible
modifications for this Enhancement.
Add the Enhancement “SZRS0003” and Save. Now press the “Components” button to see th
From the component list, seen below, we can see we have a single Function Exit. e here, that
the Project is has yet to be “Activated”. This is indicated by the red Activation icons, which turn green when
click the “EXIT_SAPLSZAR_001” entry.
his navigates us to the Function Builder – SE37, in which we can see there is a single line inside the
Function.
We can also se
active.
Double
T
As you can see, the Include begins with a Z, therefore it is in the Customer Namespace, which enables us to
maintain our custom Exit code separately from the SAP code.
Double click the Include na g may appear.
me. A warnin
This is fine. Press enter to continue.
A “Create Object” popup may appear, in which we need to press “Yes” to create the Include Object. Again,
create the object as a “Local Object”, when prompted.
Now we are navigated to the ABAP Editor– SE38, where we can program the Enhancement.
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
It is in this type of Include where all necessary programming will need to be programmed or at least, called
from. The single Include, in this example, ZXSZARU01 would be the main cause of problems when managing
multiple developments.
For now, we will program a break point and watch it reached.
Notice, I have copied the parameters from the previous screen to enable me to see, what variables are
present in this include that I
can use.
Also, I have added a MOVE
o the Function
rtain coding
Add the statement “BREAK-POINT.
statement simply
transferring what is being
passed int
Module, back out. This
avoids a runtime error in
this example.
Each implementation of an
Enhancement is likely to
have its own interface and
may require ce
requirements, similar to this.
However, in this case it is
just a side issue and should
not detract from the point of
this paper.
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
ow "Syntax Check" and "Activate". Back out, to the Project Screen and Activate the Project. If this is not
done, our custom code will not be executed. This is Activating the Project, not the code.
N
The red Activation icons have now turned green. We are ready to test the Exit and our Break Point.
Test Enhancement
Navigate to the Company Address Maintenance Screen – SUCOMP, and enter a Company Name, then press
Create.
Enter the remaining mandatory fields, “Country” and “Time Zone” then press Enter
The Exit should have been entered and the code halted in the Debugger due to our break point statement in
code.
Simply press the F8 key to continue, and Save.
This has proved that we now have a working Active E it in
mode, and simply be alternating the Time Zon en UK and UTC.
x
place. For future testing will be using this company in edit
e betwe
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Create BAdI Definition
1
Now we need to create a custom BAdI Definition that is going to be used for our two BAdI Implementations.
ce will mirror the Enhancement’s interface as the Enhancement will serve purely as
The custom BAdI’s interfa
a wrapper for the BAdI.
Navigate to the BAdI Definition – SE18. Create a BAdI name and press Create.
Provide a short text, and make sure the “Multiple Use”, option for “Type”, is checked. It is this that enables the
multiple implementations for a single definition.
On the “Interface” tab, double click the provided “Interface Name”.
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1
When prompted, Save the BAdI definition, a “Local object” will suffice.
We are now in the Class Builder – SE24, in which we have a Class Interface to create. This Class Interface
will serve the purpose of providing the BAdI Definition with a Method Call, and its appropriate interface
parameters. To this end, we must provide a Method Name and configure its interface parameters, so that the
Enhancement can server as a wrapper, passing it’s parameters in and out correctly.
Enter a Method name and for this purpose, make it a Static Method, then press the “Parameters” button.
The idea here, is to replicate the Enhancement’s interface in the Method, enabling a somewhat transparent
handover. Remember, the Enhancement needs to only serve as a wrapper.
From
To
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
With “Multiple Use” type BAdIs, we must not specify any Export type parameters. Therefore, as we have
Export Parameters in the Enhancement, we have altered them to Changing.
Also, notice the ERROR_TABLE parameter. In the Enhancement it exists as a table, structure
ADDR_ERROR. Due to the nature of the ABAP Objects, table definitions must be typed as tables. Therefore
we either find a table type that is made up from the structure ADDR_ERROR, as we have, or have to create
one.
Perform a Syntax Check, Save and Generate.
That concludes our BAdI definition.
BAdI Hook
We must now code the BAdI hook. This is not coding any functional specific requirements whatsoever. It is
merely enabling the Enhancement to call the BAdI, if, and when it may be deployed. This hook is to be coded
in the original Enhancement Include – CMOD.
Due to the Type change of the ERROR_TABLE parameter in the BAdI, we need to perform a little extra work.
Variable declaration
y_error_table TYPE addr_error_tab
Line of code
APPEND LINES OF y_error_table TO error_table.
This enables us to pass the error data table back to the Enhancement, from the BAdI.
Again, due to nature of this particular Enhancement, we must pass through the ADRC structure. Normally,
this line of code would not be required.
y_adrc_struc = x_adrc_struc.
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Navigate to CMOD, Deactivate the Project, and Change.
In the following screen, select the “Component” button.
Double click the Function Exit component.
Double click the Function Exit’s Include, and click the Edit
button.
You should now be in the ABAP editor, where you can copy the following code over what we had before. It is
up to you, if you wish to keep the comments displaying the parameters available.
DATA: lr_exit TYPE REF TO zif_ex_enh_szrs0003,
y_error_table TYPE addr_error_tab.
************************************************************************
* Enhancement specific, else runtime error occurs when Project activated
y_adrc_struc = x_ adrc_struc.
************************************************************************
* BAdi stuff
* get BAdI implementation
CALL METHOD cl_exithandler=>get_instance
CHANGING
instance = lr_exit.
* call BAdI
CALL METHOD lr_exit->address_check
EXPORTING
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
x_dialog_allowed = x_dialog_allowed
x_accept_error = x_accept_error
x_adrc_struc = x_adrc_struc
CHANGING
y_adrc_struc = y_adrc_struc
y_retcode = y_retcode
error_table = y_error_table.
************************************************************************
* add the BAdI error table to the Enhancement
APPEND LINES OF y_error_table TO error_table.
The BAdI insertion code above is typically how SAP implements BAdI insertions. Notice the Object reference
to the Interface declaration, and the two Method calls, one fetching the BAdI instance (implementation) in
runtime, the other, making the actual Method call.
1
the Project. The Activation icons should turn green.
Syntax Check and Activate the Include, back out (F3) to the Project ZCMOD Change screen, and Re-Activate
Test the work so far by running the “Company address” maintenance screen – SUCOMP, this time we can
This proves that the Enhancement is Active, the BAdI Definition is in place, and without any BAdI
This would be a harmless state to leave the Enhancement in, active with the BAdI programmed, but without
BAdI Implementation 1
Now we are ready to implement the first of two BAdIs from our single BAdI ZENH_SZRS0003 Definition.
Navigate to the BAdI Definition – SE18, enter the BAdI name “ZENH_SZRS0003”, and from the menu select
simply edit the company created earlier. Alter the “Time Zone” and press enter. Nothing should look like it
happens.
Implementations so far, all is working.
any BAdI Implementations. We should not need to be concerned with CMOD any longer.
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Implementation -> Create
Enter an Implementation name, and continue. I have chosen the Definition name, and added a numeric value
indicating the possible implementations of this definition.
Save the Implementation as a “Local Object”.
Select the Interface tab & double click the Name of the given Implementing Class
We are now in the Class Builder – SE24, once again.
Notice that the Interface built during the BAdI definition has now been utilized in the BAdI implementation’s
Class – ZCL_IM_ENH_SZRZ0003_1.
We are finally ready to code our custom functionality that will be called by the Enhancement.
Click once on the Code Button
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Press the Signature button and now we can see all the parameters that we have mirrored from the BAdI,
available to the Method.
Using the trusty “POPUP_TO_CONFIRM” function module, we will program this Method accordingly. See
below. Simply cut this code and add it to the Method
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
* TITLEBAR = ' '
* DIAGNOSE_OBJECT = ' '
text_question = 'This was fired from Implementation 1'.
* TEXT_BUTTON_1 = 'Ja'(001)
* ICON_BUTTON_1 = ' '
* TEXT_BUTTON_2 = 'Nein'(002)
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
* POPUP_TYPE =
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
* IMPORTING
* ANSWER =
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
"Syntax Check", "Save", and "Activate" all objects.
Back out twice, returning to the BAdI Implementation screen. We now want to “Activate” the BAdI
Implementation. This would be comparative to activating the Project,
We have finished programming the first custom piece of functionality for our Company Address maintenance
screen.
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Test BAdI Implementation 1
Navigate to the Company Address maintenance screen – SUCOMP, and enter the company name we used
before and press Edit.
Change the Time Zone to something, and now you should see the popup programmed in the BAdI
Implementation.
Press any key to continue.
BAdI Implementation 2
Now we are ready to implement the second of our two BAdIs from our single BAdI ZENH_SZRS0003
definition.
Navigate to the BAdI definition – SE18, enter the BAdI name, and from the menu select
Implementation -> Create
Enter an Implementation name, and continue. Notice this name has a two at the end
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
On the next screen, supply a short text, and on the Interface tab, double click the Name of the given
Implementing Class
Save the Implementation if prompted and a “Local Object” type will suffice.
We have now been navigated to the Class Builder – SE24, once again.
This time the Interface built during the BAdIs second definition has now been utilized in the BAdI
implementation’s Class – ZCL_IM_ENH_SZRZ0003_2.
We are finally ready to code our second custom functionality that will be called by the Enhancement.
Click once on the Code Button
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Press the Signature button and now we can see all the parameters that we have mirrored from the BAdI,
available to the Method.
Using the trusty “POPUP_TO_CONFIRM” function module, we will program this Method accordingly. See
below. Only the "text_question" has changed.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
* TITLEBAR = ' '
* DIAGNOSE_OBJECT = ' '
text_question = 'This was fired from Implementation 2'.
* TEXT_BUTTON_1 = 'Ja'(001)
* ICON_BUTTON_1 = ' '
* TEXT_BUTTON_2 = 'Nein'(002)
* ICON_BUTTON_2 = ' '
* DEFAULT_BUTTON = '1'
* DISPLAY_CANCEL_BUTTON = 'X'
* USERDEFINED_F1_HELP = ' '
* START_COLUMN = 25
* START_ROW = 6
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
* POPUP_TYPE =
* IMPORTING
* ANSWER =
* TABLES
* PARAMETER =
* EXCEPTIONS
* TEXT_NOT_FOUND = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
"Syntax Check", "Save", and "Activate" all objects.
Back out twice, returning to the BAdI Implementation screen. We now want to “Activate” the BAdI
Implementation. This would be comparative to activating the Project,
We have finished programming the second and last custom piece of functionality for our Company Address
maintenance screen to prove the point.
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Test BAdI Implementation 1 and 2
Navigate to the Company Address maintenance screen – SUCOMP, and enter the company name we used
before and press Edit.
Change the Time Zone to something, and now you should see the popup programmed in the BAdI
Implementation.
Press any key to continue and now we get the second popup implemented in BAdI implementation 2.
That concludes the testing.
1
Implementing a BAdI in an
Enhancement Project (CMOD)
© 2006 SAP AG The SAP Developer Network: http://sdn.sap.com
Summary
This tutorial demonstrates how to program a custom BAdI in an SAP Enhancement. It further demonstrates
the ability to separate custom functionality away from non-related functionality, in different objects, which can
be maintained and activated independently. This behaviour would not be possible using the standard SAP
Enhancement CMOD, concept alone.
Author Bio
Graduated a mature student in 1994 with a BSc (Hons), I began work in a company
programming MS Access applications. After a year, I began contracting as a VB, MS Access,
and Excel Application Programmer. 2 years later, in 1997, I started a permanent job working as
an SAP Technical Consultant for an SAP Implementation Partner working on various projects
with an array of SAP technologies. In 2001, I decided to leap into contracting. More recently, I
have extended my skills by instructing courses at SAP UK.
I fell upon this workaround to Enhancements, when I was teaching myself some basic OO and BAdI skills.
When I learnt some BAdIs have multiple uses, i.e. several implementations of the same BAdI, it was then, I
thought about using a custom BAdI inside an Enhancement to remove some of the inherent problems that
beset Enhancements.
Disclaimer & Liability Notice
This document may discuss sample coding or other information that does not include SAP official interfaces
and therefore is not supported by SAP. Changes made based on this information are not supported and can
be overwritten during an upgrade.
SAP will not be held liable for any damages caused by using or misusing the information, code or methods
suggested in this document, and anyone using these methods does so at his/her own risk.
SAP offers no guarantees and assumes no responsibility or liability of any type with respect to the content of
this technical article or code sample, including any liability resulting from incompatibility between the content
within this document and the materials and services offered by SAP. You agree that you will not hold, or seek
to hold, SAP responsible or liable with respect to the content of this document.
1

More Related Content

DOC
1000 solved questions
PDF
ABAP for Beginners - www.sapdocs.info
PPTX
Sap User Exit for Functional Consultant
PDF
Enhancement framework the new way to enhance your abap systems
PDF
Abap reports
PDF
Beginner's Guide: Programming with ABAP on HANA
PPT
Module pool programming
PDF
Table maintenance generator and its modifications
1000 solved questions
ABAP for Beginners - www.sapdocs.info
Sap User Exit for Functional Consultant
Enhancement framework the new way to enhance your abap systems
Abap reports
Beginner's Guide: Programming with ABAP on HANA
Module pool programming
Table maintenance generator and its modifications

What's hot (20)

PPTX
SAP Adobe forms
PPTX
Reports
PPTX
Object oriented approach to ALV Lists in ABAP
PPT
Sap abap part1
DOCX
Badis
PPTX
Bdc BATCH DATA COMMUNICATION
PPT
Alv theory
PPTX
SAP Smart forms
PDF
Bapi step-by-step
PPT
Call transaction method
PPTX
SAP ALE Idoc
PPT
ABAP Open SQL & Internal Table
PDF
Ooabap notes with_programs
PDF
Smartforms interview questions with answers
PDF
Sap abap tutorials
PPTX
SAP BADI Implementation Learning for Functional Consultant
DOCX
Edit idoc , reprocess and test idoc
PDF
Sap Abap Reports
PPTX
Oops abap fundamental
PDF
Sap abap material
SAP Adobe forms
Reports
Object oriented approach to ALV Lists in ABAP
Sap abap part1
Badis
Bdc BATCH DATA COMMUNICATION
Alv theory
SAP Smart forms
Bapi step-by-step
Call transaction method
SAP ALE Idoc
ABAP Open SQL & Internal Table
Ooabap notes with_programs
Smartforms interview questions with answers
Sap abap tutorials
SAP BADI Implementation Learning for Functional Consultant
Edit idoc , reprocess and test idoc
Sap Abap Reports
Oops abap fundamental
Sap abap material
Ad

Similar to BADI IMPLEMENTATION.pdf (20)

PPTX
11 Enhancements & Modifications.pptx
PPT
enhancements.ppt
PDF
Introducing enhancement framework.doc
PDF
DOC
Badi document
PDF
022006 zaidi badi
DOCX
DOC
Srinivas_Ganta_IBM_INDIA1
PDF
18191198 enhancement-points
DOCX
377776000 call-badi-from-report
PDF
Enhancing data sources with badi in SAP ABAP
DOCX
SAP_ABAP_5+_YEARS_EXPERIENCE
DOC
Eufemia Vincent Resume
DOCX
Kranthi 3.5 exp
PDF
1690508475607.pdf
PDF
New Features of OBIEE 11.1.1.6.x
PDF
SUSE Technical Webinar: Build B1 apps in the Framework of the SAP and SUSE Ca...
PPT
Chapter 01 user exits
DOCX
Sap index
DOCX
11 Enhancements & Modifications.pptx
enhancements.ppt
Introducing enhancement framework.doc
Badi document
022006 zaidi badi
Srinivas_Ganta_IBM_INDIA1
18191198 enhancement-points
377776000 call-badi-from-report
Enhancing data sources with badi in SAP ABAP
SAP_ABAP_5+_YEARS_EXPERIENCE
Eufemia Vincent Resume
Kranthi 3.5 exp
1690508475607.pdf
New Features of OBIEE 11.1.1.6.x
SUSE Technical Webinar: Build B1 apps in the Framework of the SAP and SUSE Ca...
Chapter 01 user exits
Sap index
Ad

Recently uploaded (20)

PDF
Mushroom cultivation and it's methods.pdf
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
WOOl fibre morphology and structure.pdf for textiles
PDF
Zenith AI: Advanced Artificial Intelligence
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
Web App vs Mobile App What Should You Build First.pdf
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Tartificialntelligence_presentation.pptx
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Hybrid model detection and classification of lung cancer
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Mushroom cultivation and it's methods.pdf
1 - Historical Antecedents, Social Consideration.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Unlocking AI with Model Context Protocol (MCP)
Hindi spoken digit analysis for native and non-native speakers
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
MIND Revenue Release Quarter 2 2025 Press Release
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
WOOl fibre morphology and structure.pdf for textiles
Zenith AI: Advanced Artificial Intelligence
A novel scalable deep ensemble learning framework for big data classification...
Web App vs Mobile App What Should You Build First.pdf
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Tartificialntelligence_presentation.pptx
OMC Textile Division Presentation 2021.pptx
Encapsulation_ Review paper, used for researhc scholars
Hybrid model detection and classification of lung cancer
A comparative analysis of optical character recognition models for extracting...
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...

BADI IMPLEMENTATION.pdf

  • 1. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 Applies To: SAP R3 v4.70, however can be adapted for other releases, including Netweaver 2004 v7. Summary This tutorial explains how to implement a Business Add In (BAdI), in a Customer Modification – CMOD, environment and benefit from all the flexibility of the BADI, while avoiding all the limitations associated with CMOD. By: Glen Spalding Company: gingle Date: 10 February 2006
  • 2. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 Table of Contents Applies To:........................................................................................................................................1 Summary ..........................................................................................................................................1 Table of Contents .............................................................................................................................2 Enhancements..................................................................................................................................3 Historic Problem ...............................................................................................................................3 Solution.............................................................................................................................................3 Example............................................................................................................................................4 Create an Active Project with Enhancement Assigned ................................................................4 Test Enhancement........................................................................................................................7 Create BAdI Definition ..................................................................................................................8 BAdI Hook...................................................................................................................................10 BAdI Implementation 1 ...............................................................................................................12 Test BAdI Implementation 1 .......................................................................................................16 BAdI Implementation 2 ...............................................................................................................16 Test BAdI Implementation 1 and 2 .............................................................................................20 Summary ........................................................................................................................................21 Author Bio.......................................................................................................................................21 Disclaimer & Liability Notice...........................................................................................................21
  • 3. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 Enhancements SAP provides a variety of “Enhancements” for functional enrichment. Enhancements prior to Netweaver 2004 exist in a number of guises – User Exits, Customer Exits, Menu/Screen/Field Exits, and BADIs. Each has their own manner of implementation. This topic is concerned with User Exits and Customer Exits. Enhancements are scattered throughout the SAP System at predefined strategic points, where changes could prove beneficial without jeopardizing the integrity of the surrounding functionality. You may be lucky to find such an Enhancement right where you need it however there are times when the Enhancement needs to be shared among other developments. Historic Problem Because User and Customer Exits are implemented via code, it can become very cumbersome when the Exit is in a popular location and used for many purposes or requirements, especially if it is shared throughout developments. An example of this could be when using an “IDoc Extension”. The extended SAP IDoc could be required by a number of departments, each attempting to develop their own specific functionality, and the location to populate or read the customized segments of the IDoc exists in a single area of code as either a “Function Module” or "Include”. It becomes even more complicated when each developer shares the coded area and has to manage “Transports” of shared objects amongst them. Not to mention the trouble caused when a syntax or program error occurs across a shared object affecting all who are using it. Yet another problem exists when a developer has completed their work, and is ready to “Release” the associated Transport, which contains the shared code, and all remaining that use, program, or develop that object are not ready. A final runtime problem exists when each piece of functionality within an Enhancement must be implemented and run as a whole. Enhancements must exist in a “Project” when they are implemented – see transaction CMOD. One or more Enhancements can exist in a Project. But, if an Enhancement exists in a Project, it cannot coexist in another Project. The Project is “Activated” or “Deactivated”, i.e. on or off, not the individual Enhancements, therefore anything in the Project must be deemed as an “All or Nothing”. Needless to say, User and Customer Exits can require very careful management. Solution To address the problem above, I propose a simple and elegant way: - Implement a custom BAdI inside the Enhancement The Enhancement can then benefit from discrete pieces of work and remain detached and independent from others that may share the Enhancement.
  • 4. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com The initial setup for implementing the BAdI into the Enhancement is best performed away from any other piece of work. This way, it too, remains separate and in its own Transport that must be Released prior to all other surrounding work that maybe required. Example I have chosen a scenario, “Maintain Company Address” that should exist in all SAP versions concerned, including the Netweaver Sneak Preview 2004s, and I hope all other training mini versions of SAP. Transaction SUCOMP. SAP Menu Tools -> Administration -> User Maintenance -> SU01 Users Environment -> Maintain company address We will simply edit a newly created Company Address, and implement the related SAP Enhancement SZSR0003. We will program two separate Popup Dialogs to act as our multiple areas of custom functionality. The Popups will be programmed in their own BAdIs. They will be “fired” when the user, for example, changes the “Time Zone” of the Customer Address” and presses the Enter key. Create an Active Project with Enhancement Assigned To begin, we need to create a Project to implement the Enhancement. Transaction CMOD. Give the “Project” name, and press the Create button. Give the Project a Description and Save. When prompted for a “Package”, simply choose “Local Object”. The “Project” now exists and is empty. 1 Now we need to add our Enhancement, so choose the “Enhancement assignments” button.
  • 5. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 e possible modifications for this Enhancement. Add the Enhancement “SZRS0003” and Save. Now press the “Components” button to see th From the component list, seen below, we can see we have a single Function Exit. e here, that the Project is has yet to be “Activated”. This is indicated by the red Activation icons, which turn green when click the “EXIT_SAPLSZAR_001” entry. his navigates us to the Function Builder – SE37, in which we can see there is a single line inside the Function. We can also se active. Double T As you can see, the Include begins with a Z, therefore it is in the Customer Namespace, which enables us to maintain our custom Exit code separately from the SAP code. Double click the Include na g may appear. me. A warnin This is fine. Press enter to continue. A “Create Object” popup may appear, in which we need to press “Yes” to create the Include Object. Again, create the object as a “Local Object”, when prompted. Now we are navigated to the ABAP Editor– SE38, where we can program the Enhancement.
  • 6. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com It is in this type of Include where all necessary programming will need to be programmed or at least, called from. The single Include, in this example, ZXSZARU01 would be the main cause of problems when managing multiple developments. For now, we will program a break point and watch it reached. Notice, I have copied the parameters from the previous screen to enable me to see, what variables are present in this include that I can use. Also, I have added a MOVE o the Function rtain coding Add the statement “BREAK-POINT. statement simply transferring what is being passed int Module, back out. This avoids a runtime error in this example. Each implementation of an Enhancement is likely to have its own interface and may require ce requirements, similar to this. However, in this case it is just a side issue and should not detract from the point of this paper. 1
  • 7. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 ow "Syntax Check" and "Activate". Back out, to the Project Screen and Activate the Project. If this is not done, our custom code will not be executed. This is Activating the Project, not the code. N The red Activation icons have now turned green. We are ready to test the Exit and our Break Point. Test Enhancement Navigate to the Company Address Maintenance Screen – SUCOMP, and enter a Company Name, then press Create. Enter the remaining mandatory fields, “Country” and “Time Zone” then press Enter The Exit should have been entered and the code halted in the Debugger due to our break point statement in code. Simply press the F8 key to continue, and Save. This has proved that we now have a working Active E it in mode, and simply be alternating the Time Zon en UK and UTC. x place. For future testing will be using this company in edit e betwe
  • 8. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Create BAdI Definition 1 Now we need to create a custom BAdI Definition that is going to be used for our two BAdI Implementations. ce will mirror the Enhancement’s interface as the Enhancement will serve purely as The custom BAdI’s interfa a wrapper for the BAdI. Navigate to the BAdI Definition – SE18. Create a BAdI name and press Create. Provide a short text, and make sure the “Multiple Use”, option for “Type”, is checked. It is this that enables the multiple implementations for a single definition. On the “Interface” tab, double click the provided “Interface Name”.
  • 9. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com 1 When prompted, Save the BAdI definition, a “Local object” will suffice. We are now in the Class Builder – SE24, in which we have a Class Interface to create. This Class Interface will serve the purpose of providing the BAdI Definition with a Method Call, and its appropriate interface parameters. To this end, we must provide a Method Name and configure its interface parameters, so that the Enhancement can server as a wrapper, passing it’s parameters in and out correctly. Enter a Method name and for this purpose, make it a Static Method, then press the “Parameters” button. The idea here, is to replicate the Enhancement’s interface in the Method, enabling a somewhat transparent handover. Remember, the Enhancement needs to only serve as a wrapper. From To
  • 10. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com With “Multiple Use” type BAdIs, we must not specify any Export type parameters. Therefore, as we have Export Parameters in the Enhancement, we have altered them to Changing. Also, notice the ERROR_TABLE parameter. In the Enhancement it exists as a table, structure ADDR_ERROR. Due to the nature of the ABAP Objects, table definitions must be typed as tables. Therefore we either find a table type that is made up from the structure ADDR_ERROR, as we have, or have to create one. Perform a Syntax Check, Save and Generate. That concludes our BAdI definition. BAdI Hook We must now code the BAdI hook. This is not coding any functional specific requirements whatsoever. It is merely enabling the Enhancement to call the BAdI, if, and when it may be deployed. This hook is to be coded in the original Enhancement Include – CMOD. Due to the Type change of the ERROR_TABLE parameter in the BAdI, we need to perform a little extra work. Variable declaration y_error_table TYPE addr_error_tab Line of code APPEND LINES OF y_error_table TO error_table. This enables us to pass the error data table back to the Enhancement, from the BAdI. Again, due to nature of this particular Enhancement, we must pass through the ADRC structure. Normally, this line of code would not be required. y_adrc_struc = x_adrc_struc. 1
  • 11. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Navigate to CMOD, Deactivate the Project, and Change. In the following screen, select the “Component” button. Double click the Function Exit component. Double click the Function Exit’s Include, and click the Edit button. You should now be in the ABAP editor, where you can copy the following code over what we had before. It is up to you, if you wish to keep the comments displaying the parameters available. DATA: lr_exit TYPE REF TO zif_ex_enh_szrs0003, y_error_table TYPE addr_error_tab. ************************************************************************ * Enhancement specific, else runtime error occurs when Project activated y_adrc_struc = x_ adrc_struc. ************************************************************************ * BAdi stuff * get BAdI implementation CALL METHOD cl_exithandler=>get_instance CHANGING instance = lr_exit. * call BAdI CALL METHOD lr_exit->address_check EXPORTING 1
  • 12. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com x_dialog_allowed = x_dialog_allowed x_accept_error = x_accept_error x_adrc_struc = x_adrc_struc CHANGING y_adrc_struc = y_adrc_struc y_retcode = y_retcode error_table = y_error_table. ************************************************************************ * add the BAdI error table to the Enhancement APPEND LINES OF y_error_table TO error_table. The BAdI insertion code above is typically how SAP implements BAdI insertions. Notice the Object reference to the Interface declaration, and the two Method calls, one fetching the BAdI instance (implementation) in runtime, the other, making the actual Method call. 1 the Project. The Activation icons should turn green. Syntax Check and Activate the Include, back out (F3) to the Project ZCMOD Change screen, and Re-Activate Test the work so far by running the “Company address” maintenance screen – SUCOMP, this time we can This proves that the Enhancement is Active, the BAdI Definition is in place, and without any BAdI This would be a harmless state to leave the Enhancement in, active with the BAdI programmed, but without BAdI Implementation 1 Now we are ready to implement the first of two BAdIs from our single BAdI ZENH_SZRS0003 Definition. Navigate to the BAdI Definition – SE18, enter the BAdI name “ZENH_SZRS0003”, and from the menu select simply edit the company created earlier. Alter the “Time Zone” and press enter. Nothing should look like it happens. Implementations so far, all is working. any BAdI Implementations. We should not need to be concerned with CMOD any longer.
  • 13. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Implementation -> Create Enter an Implementation name, and continue. I have chosen the Definition name, and added a numeric value indicating the possible implementations of this definition. Save the Implementation as a “Local Object”. Select the Interface tab & double click the Name of the given Implementing Class We are now in the Class Builder – SE24, once again. Notice that the Interface built during the BAdI definition has now been utilized in the BAdI implementation’s Class – ZCL_IM_ENH_SZRZ0003_1. We are finally ready to code our custom functionality that will be called by the Enhancement. Click once on the Code Button 1
  • 14. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Press the Signature button and now we can see all the parameters that we have mirrored from the BAdI, available to the Method. Using the trusty “POPUP_TO_CONFIRM” function module, we will program this Method accordingly. See below. Simply cut this code and add it to the Method CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING * TITLEBAR = ' ' * DIAGNOSE_OBJECT = ' ' text_question = 'This was fired from Implementation 1'. * TEXT_BUTTON_1 = 'Ja'(001) * ICON_BUTTON_1 = ' ' * TEXT_BUTTON_2 = 'Nein'(002) * ICON_BUTTON_2 = ' ' * DEFAULT_BUTTON = '1' * DISPLAY_CANCEL_BUTTON = 'X' * USERDEFINED_F1_HELP = ' ' * START_COLUMN = 25 * START_ROW = 6 * POPUP_TYPE = 1
  • 15. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com * IMPORTING * ANSWER = * TABLES * PARAMETER = * EXCEPTIONS * TEXT_NOT_FOUND = 1 * OTHERS = 2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. "Syntax Check", "Save", and "Activate" all objects. Back out twice, returning to the BAdI Implementation screen. We now want to “Activate” the BAdI Implementation. This would be comparative to activating the Project, We have finished programming the first custom piece of functionality for our Company Address maintenance screen. 1
  • 16. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Test BAdI Implementation 1 Navigate to the Company Address maintenance screen – SUCOMP, and enter the company name we used before and press Edit. Change the Time Zone to something, and now you should see the popup programmed in the BAdI Implementation. Press any key to continue. BAdI Implementation 2 Now we are ready to implement the second of our two BAdIs from our single BAdI ZENH_SZRS0003 definition. Navigate to the BAdI definition – SE18, enter the BAdI name, and from the menu select Implementation -> Create Enter an Implementation name, and continue. Notice this name has a two at the end 1
  • 17. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com On the next screen, supply a short text, and on the Interface tab, double click the Name of the given Implementing Class Save the Implementation if prompted and a “Local Object” type will suffice. We have now been navigated to the Class Builder – SE24, once again. This time the Interface built during the BAdIs second definition has now been utilized in the BAdI implementation’s Class – ZCL_IM_ENH_SZRZ0003_2. We are finally ready to code our second custom functionality that will be called by the Enhancement. Click once on the Code Button 1
  • 18. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Press the Signature button and now we can see all the parameters that we have mirrored from the BAdI, available to the Method. Using the trusty “POPUP_TO_CONFIRM” function module, we will program this Method accordingly. See below. Only the "text_question" has changed. CALL FUNCTION 'POPUP_TO_CONFIRM' EXPORTING * TITLEBAR = ' ' * DIAGNOSE_OBJECT = ' ' text_question = 'This was fired from Implementation 2'. * TEXT_BUTTON_1 = 'Ja'(001) * ICON_BUTTON_1 = ' ' * TEXT_BUTTON_2 = 'Nein'(002) * ICON_BUTTON_2 = ' ' * DEFAULT_BUTTON = '1' * DISPLAY_CANCEL_BUTTON = 'X' * USERDEFINED_F1_HELP = ' ' * START_COLUMN = 25 * START_ROW = 6 1
  • 19. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com * POPUP_TYPE = * IMPORTING * ANSWER = * TABLES * PARAMETER = * EXCEPTIONS * TEXT_NOT_FOUND = 1 * OTHERS = 2 . IF sy-subrc <> 0. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF. "Syntax Check", "Save", and "Activate" all objects. Back out twice, returning to the BAdI Implementation screen. We now want to “Activate” the BAdI Implementation. This would be comparative to activating the Project, We have finished programming the second and last custom piece of functionality for our Company Address maintenance screen to prove the point. 1
  • 20. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Test BAdI Implementation 1 and 2 Navigate to the Company Address maintenance screen – SUCOMP, and enter the company name we used before and press Edit. Change the Time Zone to something, and now you should see the popup programmed in the BAdI Implementation. Press any key to continue and now we get the second popup implemented in BAdI implementation 2. That concludes the testing. 1
  • 21. Implementing a BAdI in an Enhancement Project (CMOD) © 2006 SAP AG The SAP Developer Network: http://sdn.sap.com Summary This tutorial demonstrates how to program a custom BAdI in an SAP Enhancement. It further demonstrates the ability to separate custom functionality away from non-related functionality, in different objects, which can be maintained and activated independently. This behaviour would not be possible using the standard SAP Enhancement CMOD, concept alone. Author Bio Graduated a mature student in 1994 with a BSc (Hons), I began work in a company programming MS Access applications. After a year, I began contracting as a VB, MS Access, and Excel Application Programmer. 2 years later, in 1997, I started a permanent job working as an SAP Technical Consultant for an SAP Implementation Partner working on various projects with an array of SAP technologies. In 2001, I decided to leap into contracting. More recently, I have extended my skills by instructing courses at SAP UK. I fell upon this workaround to Enhancements, when I was teaching myself some basic OO and BAdI skills. When I learnt some BAdIs have multiple uses, i.e. several implementations of the same BAdI, it was then, I thought about using a custom BAdI inside an Enhancement to remove some of the inherent problems that beset Enhancements. Disclaimer & Liability Notice This document may discuss sample coding or other information that does not include SAP official interfaces and therefore is not supported by SAP. Changes made based on this information are not supported and can be overwritten during an upgrade. SAP will not be held liable for any damages caused by using or misusing the information, code or methods suggested in this document, and anyone using these methods does so at his/her own risk. SAP offers no guarantees and assumes no responsibility or liability of any type with respect to the content of this technical article or code sample, including any liability resulting from incompatibility between the content within this document and the materials and services offered by SAP. You agree that you will not hold, or seek to hold, SAP responsible or liable with respect to the content of this document. 1