But what's the main problem with BDT? well BDT was meant to extend the BP model, User interface, APIs, etc. from a central perspective, that's really cool but the problem here is the user interface when BDT was designed is based on SAP GUI, as we all know SAP CRM has suffered lots of changes since back then, the whole user framework was replaced by the Web UI, its tools and methodology, so, what now? Well some BDT were replaced by BADIs and Enhancement points and some others simply not, so the BDT events still working in some scenarios, for example during the maintenance of the BP relationships.
Can we still using BDT? Well I like the concept "all for one and one for all" enhancing the fronted forgetting about the APIs i think is a very big mistake and with BDT we have this covered, but what about BADIs and Enhancement points? of course if there's a BADI or a Enhancement spot shouldn't be a BDT because SAP should replace it, or because this BADI Enhancement point give us more detail about what we can or can't do and how to do it (the BDT FMs usually doesn't have interface so we need to deal with FG memory, i find this very dangerous as is the path is very open, maybe we don't have the time to really analyze how the stack is working and the real impact of what we performing, IMHO if I lack on documentation I prefer to be restricted by the system architecture/design )
All said, I will share with you some tips & ticks:
To invoke the BDT menu use the code BUPT in SAP GUI
In order to trace which events are been called or can be called during a process you can check the FG BDT_MEM_CONTROL searching by the FMs *GET, especially the FM BDT_TBZ1F_GET is the one for reading the FM related to events.
Usually BUP*CALLBACK FM will be useful as a bridge to retrieve the "in-memory" data, in order to use them, especially in the BDT scenario, be sure your event is preformed after the standard events/FM which manages the global Memory of the FG which comprehend the callback FM, one very common example is in the event DSAVC when the system stores the changes of a relationship in memory the first FRM called the standard FM BUB_BUPR_EVENT_DSAVC once this FM is executed without errors the global variables of the FG will be filled so the FM BUPA_BUT050_CALLBACK will return something. If you place your FM before this one you won't be able to read those values.
Analyze, analyze and analyze, take a look to various FM which are placed at the same event which you are enhancing in order to use the correct FM in the correct sequence.