Thou shalt not use direct code in user-exits

images/thumbnail.jpg - Thumbnail

All code to be put in user-exits (BADIs, enhancements, SMOD, etc.) should be encapsulated.

  • It’s common for an user-exit to include multiple independent parts. Each of these parts should be encapsulated in its own method. Even if it is only one line;

  • This should apply to both new implementations and changes to existing code;

  • A change to existing code should always be seen as an opportunity to organize existing code into methods, since it will have to be tested again anyway;

Thou shalt not implement in classical processing blocks

images/thumbnail.jpg - Thumbnail

Official ABAP Programming Guidelines (page 34): [When a classical processing block is required], you should immediately delegate the execution to a suitable method (see Rule 6.37, No Implementations in Function Modules and Subroutines, and Rule 6.44, No Implementations in Dialog Modules and Event Blocks).

Thou shalt use ABAP OO whenever possible

images/thumbnail.jpg - Thumbnail

All new developments should be implemented using ABAP Objects unless still impossible (RFC, IN UPDATE TASK, screens, etc). Existing developments, when rewritten, should also be converted to OO, if it proves to be realistic. Official ABAP Programming Guidelines (page 32) rule 3.1: Use ABAP Objects whenever possible for new and further developments. Classical processing blocks may be newly created in exceptional cases only.

Always use message classes in exception classes.

images/thumbnail.jpg - Thumbnail

Exception classes let you state multiple texts describing the different possible errors that they can represent.

However, there exists an option to associate it with a message class (SE91). This allows texts to be defined as classic SE91 messages instead of being defined directly in the exception class. And it has advantages.

Share constants among several classes

images/thumbnail.jpg - Thumbnail

Imagine you have a herd of related classes sharing between them a whole bunch of constants. Saying the same thing a different way, would you like all the classes of the herd to have easy access to the bunch of constants?

(If you’re confused, then let me tell you that the “herd” thing was just to baffle you)

Carrying on…..

If you still don't use ABAP Objects you're chicken

images/thumbnail.jpg - Thumbnail

SAP has a book called Official ABAP Programming Guidelines which describes rules and best practices on how to program in ABAP. In there you can read:

Page 42: Rule 3.1: Use ABAP Objects whenever possible for new and further developments. Classic processing blocks may be newly created in exceptional cases only.

Page 45: Within such a [classic] processing block, however, you should immediately delegate the execution to a suitable method (see Rule 6.37, No Implementation in Function Modules and Subroutines, and Rule 6.44, No Implementation in Dialog Modules and Event Blocks).

Search object attributes in an internal table

images/thumbnail.jpg - Thumbnail

There are increasingly more objects in ABAP, gradually less fear of them and, lo and behold, more and more people are writing and using them. It is normal and desirable, if objects begin to appear everywhere, to start to stuff them into internal tables. I also stored a load of objects in tables a while back, unfortunately I did not know at that time what I am going to teach you here. It could have come in handy.

So, what exactly am I going to teach you here?

Implementing private methods in BADIs

images/thumbnail.jpg - Thumbnail

A little while ago I had an idea as eccentric as it was amazing that today I have decided to share here, namely, how to create private methods in BADI classes.

Let me explain.