We’ve been using consultants so far to get us up and running with some BPM’s, but eventually I plan to have myself and my team creating and managing these. I can see the power of the C# in how efficiently it can handle these tasks over using the blocks. I am a very out of date programmer, but can read C# fairly well. I do need to work on writing it better SQL and a few other languages I am fairly familiar.
I was trained on BPMs 2 years before we went live along with 4 other platforms all in the same month, terrible implementation planning. I have done pretty good with Application Studio, my coworker has been doing some SSRS, we’ve struggled through a few more platforms, btu I can see BPMs being something I need to get into fairly quickly.
I see Coda Bears offers training, but its a contact form. I don’t mind paying for training, but before I go down that rabbit hole is there somewhere else I can start? Or do you recommend I go straight to Coda Bears? I wouldn’t mind a self paced online video tutorial if it exists.
Everyone has a different learning style that they learn best with, what’s yours?
For me it’s hands on, I get the most value out of reading and understanding existing code, making modifications that have a business need (add a column, change a criteria, use another BO to pull in another data piece, etc.) and utilize examples found online with similar goals and targeted questions to an LLM of choice (C# is well trained by all LLM, so output is quite good)
Generally speaking, I break it right away and struggle through making it work. That teaches me how to “talk to myself” by not relying on epicor’s out of box exception logging mechanisms but by using a logging function and placing log() lines throughout my code. If I’m wondering what’s in a DataSet, I’ll json.stringify it to log so I can peek inside.
Verbose enough logging lets me build code a piece at a time - build each chunk and validate it works with logging, move to the next chunk. If something breaks, logging is already in place to see where the mistake was made and iterativey correct it. I won’t have the code actually affect data until I’m done coding and satisfied with the log output - generally by the time I flip the switch it works as designed. Trying to approach a task monolithically nearly always takes me longer because I made an incorrect assumption somewhere in the middle.
Consider spending some time learning how to “train” an Agentic IDE via Workflows, Rules, Skills, etc. Setting up a workspace to program BPMs… at this point in time “pair programming” with an Agentic IDE is good enough to be very useful, and avoids a lot of the context pitfalls of using a chat bot. It does not take very long to spin up a basic set of rules for Epicor BPM programming, and it becomes immediately useful as a “dumb reference” - concentrated effort will get you and the AI full autocomplete and class documentation, which enables some quite sophisticated code generation.
The key is to understand the business objects involved.
Try and use the widgets wherever possible.
If what you want to do can’t be done via the widgets and you need to use custom code, then with a good understanding of what you want the program to do, an Ai engine like Claude will do the hard work for you.
Lastly don’t forget functions - i always try to externalise any business rules to a function library and call it via the method directive.
BPMs and Epicor Functions (EFx) are twin sisters. But you can TEST an EFx.
“Testing” a BPM is thorny - you have to do some action to get it to run, and it’s not terribly obvious, even with pop-up messages, if the BPM ran and failed or never ran in the first place.
Also, I want to say that you can literally Ctrl+C Ctrl+V the widgets from an EFx to a BPM. (Obviously you could also do the same with code.)
Epicor has a REST guide and I followed that in order to use Postman for testing.
I have never tried the tool linked by @Evan_Purdy (I’m sorry), but I am sure it is excellent.
Since I already use Postman, I hadn’t seen a need to try something new.
Looking at it, I’d agree, start with the “Executioner.” But I would advise you get used to Postman also. It will help you understand what external systems need for REST calls (JSON body and headers).
And you can be working on an integration and say to some consultant “Well I tested it in Postman,” and you will sound smart.
good to know, i will take a look at that. i am used to writing debugging notes in my BPMs that show in the event viewer to check what my BPM is doing, is it possible to do that in functions?
Sorry everyone we are third week go live and lots of mistakes were made. Also lost my tech support guy so I am ticket guy, and ERP Admin for a newly launched ERP. Sorry I went quiet. Pick on me all you want, I appreciate all of you and will happily take a little fun poking in response
for learning pure C#, i always appreciated the approach of dotnetperls (C# - Dot Net Perls) which not only explains each programming syntax, but also shows speed tests in some cases showing why one approach is better than others. You can search for commands in this site… example great command explainer is for the case/switch statement: C# - case Examples - Dot Net Perls