Others have posted some useful stuff but I’ll just spew some of the terms so you (or anyone else new who finds this thread) can have a better grasp on whats happening here:
- Methods are called when you do pretty much anything in Epicor. Just for example, in your screenshot you have the GetNewCustomer method on the Customer business object. That method will be called when you do x thing on the Customer table (probably adding a new customer, I’m guessing?), and since it’s a post-directive it will happen after the GetNewCustomer method finishes.
- Traces are a way to see what methods are being called when you do something. You want to know what methods are called when you open a menu? Pop on a trace and see what the log says happened.
- BPMs are attached to a method, you have “pre”, “post”, and “base” directives which just means that whatever you want to happen, will happen before, after, or… I guess during the method (I have never had to touch base directives personally). They are like block code, and follow the arrows from the start block (when the directive is called) to whatever the last block is. Unless you have some wacky custom code you can generally guess what each block is doing, but building them really isn’t that complicated. Want a field changed? Drop in a field change block. Want to restrict that field change to a certain group? Drop in a condition block before it. I believe Epicor has a BPM cookbook with some examples to make if it doesn’t make sense.
- Data directives are a whole other can of worms, they activate whenever there is a change on a table. My rule of thumb is if it can be a BPM, it should be a BPM.
Hopefully I made at least something easier to understand ![]()



