Alright, so today I’m gonna walk you through my little adventure with BADI in SAP ABAP. I know, sounds kinda techy, but trust me, it’s not rocket science. I’ll break it down Barney-style, just like I did for myself when I first tackled it.
First things first, I heard about BADI. Everyone kept saying it’s like a cooler, more modern version of Customer Exits. Basically, it lets you sneak your own code into SAP’s standard stuff without messing things up completely. Think of it as adding your own secret sauce to a dish without changing the original recipe.
So, I decided to dive in. The actual definition I looked up was something like “Business Add-In is a new SAP Object Oriented enhancement technique…” Blah blah blah. What it really means is that it’s a way to tweak SAP to do what you need it to do.

The first thing I did was try to understand where these BADIs actually are. Turns out, they’re all over the place! You can find them using transaction SE18 (that’s where you define them) and SE19 (that’s where you implement them). Think of SE18 as the architect’s office where you design the blueprint, and SE19 as the construction site where you build the actual extension.
Then came the tricky part: finding the right BADI for the job. I needed to add some extra checks when a sales order was being saved. So I went hunting. There are tons of BADIs, so it’s like finding a needle in a haystack. I ended up searching online, reading SAP documentation (ugh!), and asking around on forums. Eventually, I stumbled upon one called something like “SALES_ORDER_CHECK”.
Once I found the BADI, I had to create an implementation. This is where SE19 comes in. You give your implementation a name (something descriptive, so you don’t forget what it does later), and then you start writing code. Basically, you’re implementing a specific interface that the BADI defines. This interface has methods (like little functions) that you can fill with your own logic.
The coding part was actually pretty straightforward. I added my extra checks to the relevant method. Things like, “Is the customer’s credit limit exceeded?” or “Are all the required fields filled in?”. If a check failed, I’d throw an error message. SAP would then stop the sales order from being saved.
But here’s the thing: I messed up a few times. I forgot to activate my implementation, so nothing was happening. I also had some syntax errors in my code (who doesn’t?). And I spent a good hour trying to figure out why my error message wasn’t showing up (turns out I was using the wrong type of message!).

After a bit of trial and error (and a lot of Googling), I finally got it working! It felt like I’d climbed a mountain! Now, whenever someone tries to save a sales order with invalid data, my custom checks kick in, and the order is stopped in its tracks.
Now, there are a couple of types of BADIs you should know about, but I haven’t really played with them much myself. Apparently there’s “Filter” BADIs and “Multi-use” BADIs. From what I gather, Filter BADIs let you use different implementations based on certain criteria (like company code), and Multi-use BADIs let you have multiple implementations running at the same time. Sounds kinda cool, but I haven’t needed them yet.
- Filter BADI: Use different implementations based on some criteria.
- Multi-use BADI: Allow several implementations at the same time.
Anyway, that’s my BADI story. It wasn’t always easy, but it was definitely worth it. I learned a lot, and now I can tweak SAP to do pretty much anything I want. So, if you’re thinking about diving into BADIs, go for it! Just be prepared to get your hands dirty, and don’t be afraid to ask for help.