How to implement an Implicit Enhancement in SAP objects?

Hello dearest ABAPers all over the world. It's Saturday today and its my rest day. Its me again sharing to you what I learned over the past few days of work. It was so busy week doing some developments on reports and enhancements as we are implementing a big project in Singapore. Well I do believe then that everyone of you have experiences now with these objects. 

Yesterday, I was assigned an object with our Project Manager. When I read the Functional design, it was an EXIT. Ohhh, it was an enhancement again. Upon checking the detail, I need to implement this exit - USEREXIT_NUMBER_RANGE. Since I am not sure with the project to implement, I made a google to find out what Include program handles this exit. Thats the amazing google can do for us... If you have questions, asks uncle Google not uncle Sam. :) hehehe....

In an instant, I got the result... It was MV45AFZZ handles this exit. Normally, an exit is an Include program called inside a Function Module. But in this case, this exit is a subroutine inside an Include program. 

So my next question now is, how can I modify this object (MV45AFZZ) since this is a SAP standard object? As you can see on the screenshot below, when clicking the edit button on the editor, it asks an access key. An access key is generated on the SAP market place.
But how about if you dont have an access in the SAP market place? Then how can you edit this exit then?

Implicit Enhancement Tutorial by ABAP Thinkers
So the most possible solution is Enhancement. It is a method develop by SAP to modify standard objects. So in this tutorial, I will discuss to you how to implement an enhancement. By the way, there are two types of enhancements. We have Implicit and Explicit enhancements. The simple difference I can say between the two are, Implicit enhancement is an enhancement that you declared (its not SAP who did). In short, this is a type of enhancement which has a Z* type object. Unlike with Explicit enhancement, it was SAP who defined this enhancement point. Do you get the difference between the two types of enhancement? I hope so. :) If not, just leave a message below and I will answer you the best I can.

So lets continue with this tutorial now. What I will discuss in details is how to implement an Implicit Enhancement. So just follow the steps and you will implement this type of enhancement into your next projects. Alright? So here are now the steps to do:

How to implement an Implicit Enhancement?
Steps:
1. In your editor, locate the "Enhance" button just like the one below. Click this button. Since what I am editing is an include program MV45AFZZ, I opened this in SE38 transaction code. By the way, you can implement any enhancements whether that is a Function Module, Class, Methods, BADI, BAPI, etc as long as you can see that "Enhance" button, implicit enhancement is possible.
Implicit Enhancement Tutorial by ABAP Thinkers

2. Once clicked the enhance button, the editor changes something like this one below. The editor looks grayed and the two buttons above Active<->Inactive and Enhancements appear in the application toolbar. The first button, Active<->Inactive is used to changed mode from the normal editor to enhancement editor. Try to click one at a time and you will see the difference between the two editor mode. The second button, Enhancement is used to activate any enhancement implementations. You will used this in the later part of this tutorial.
Implicit Enhancement Tutorial by ABAP Thinkers

3. The next step is to display those enhancement options. In order to do so, follow this path. On the menu, click Edit->Enhancement Operations -> Show Implicit Enhancement Options. This step is important because it shows where you can insert enhancement implementations. Otherwise, you cannot implement any implicit enhancement if you will not do this step.
Implicit Enhancement Tutorial by ABAP Thinkers
4. As you can see below, two bold arrows were shown at the left side of the editor. This signifies the start and end points where you can add enhancement points. However, please note that this step is only showing where an enhancement can be positioned. We can not add yet our own ABAP codes at this time. If you noticed, the editor is still grayed. We still need to create an enhancement implementations just like a normal EXIT or BADI. I know you are now eager to write your ABAP programs. Before you can create an enhancement implementation, position your cursor at the starting line just like this screenshot below. This is a MUST to-do since you cannot create a new enhancement implementations if your cursor is not positioned correctly.
Implicit Enhancement Tutorial by ABAP Thinkers

5. To create an enhancement implementation, go to the Menu again and follow this path.
Edit -> Enhancement Operations -> Create.
Implicit Enhancement Tutorial by ABAP Thinkers

6. On this pop up screen, it will first asks you the type of enhancement between declaration and code. Choose code in here as we will write ABAP codes. Honestly, I am not sure yet the difference between the two. But once I got a chance and time again, I will discover what this two is all about and add in this blog. But if you know now what makes them differ, please leave a message below for everyone else. I will be grateful to you.
Implicit Enhancement Tutorial by ABAP Thinkers

7. On this next pop up screen, you are required to select the enhancement implementation. Since this is a new implementation, we will create our own. Click the button at the right-bottom of the window. Its like a white folder paper. 
Implicit Enhancement Tutorial by ABAP Thinkers

8. This is the window where you will define the name of your enhancement implementation. Remember, it must begin with a Z* or Y* as this is a customized (Implicit) enhancement implementation. Also, give a short description for it. It must be descriptive. For the third parameter (composite enhancement implementation), just leave it blank. Then click the OK button after you are done.
Implicit Enhancement Tutorial by ABAP Thinkers

9. Since we are creating a new implicit enhancement implementation, it will ask you to save in a transport no. Just select your package and add this into your transport no if you want to move it to another system. But if you are just making a test, then saving as local object would suffice. 
Implicit Enhancement Tutorial by ABAP Thinkers

10. After adding it into your transport, select from the list of implementation the one you created. Just like in my case, I highlighted it then click the Ok buttom below. Congratulations as you are almost done implementing an Implicit enhancement.
Implicit Enhancement Tutorial by ABAP Thinkers

11. Finally and there you are, you can now add ABAP codes into our exit, USEREXIT_NUMBER_RANGE. As you can noticed, the grayed area while ago turns now into white which means we can write now our own ABAP Codes. Sorry but I did not write anything yet here since we will have a different logic to implement. You can also see the keywords ENHANCEMENT No. <name of enhancement implementation> and END ENHANCEMENT. Inside this keyword, you can write your own ABAP logic.
Implicit Enhancement Tutorial by ABAP Thinkers


12. And lastly, dont forget to click this button on the application toolbar. This is the activate button for the enhancement. Remember that any objects that is not activated will not take effect. Once done, you will see your object being activated. So if you want to go back to the normal editor, click the  button, Active<->Inactive button. 
Implicit Enhancement Tutorial by ABAP Thinkers


13. As a sidenote, If you want to go back again to your enhancement implementations, let say after one month there was a bug within your code, just do the same process. But rather clicking the create button, this time, click the change button to modify the existing implicit enhancement. Just follow this path to change:
Edit -> Enhancement Operations -> Change. 
Implicit Enhancement Tutorial by ABAP Thinkers


Congratulations. You can now implement an Implicit Enhancement into your projects. If you have further questions, please leave a message below. Until next week again. 

Enjoy :)

1 comment:

  1. Thank you for nice blog. In declaration part we declare the data variable which is going to be used in our implementation. thank you

    ReplyDelete