What’s the best way to programmatically enable a BPM from another BPM? I’m looking at a data directive that I want to enable when I run a process.
Tell us more before we answer the “best” way.

I am printing a report that is intended to use with physical inventory and I want to give the user the ability to enable a BPM that prevents part transactions while they do their counting.
Trying to steer away from customizations at this point so I figured either put it in a BPM or a function.
Is there a reason you aren’t using the Cycle Count or Full Physical inventory process?
Honestly, I’d love to learn more about how it works. I asked those who were involved in those types of discussions when we originally went live and they didn’t really remember why we didn’t use it. I think we’d like to use it if it makes sense. But at this point, it ain’t happening for this next count. We’re all geared up using our “custom” methods.
In your BPM you can just go look into the SysTask table, find the relevant process, and block things while it does not have the COMPLETE status (or the ERROR status, etc).
If you’re still on 2021.2, you may be in luck… check in your Embedded Education for the Cycle Count education course and course document… goes over it pretty well (but uses Classic screens). The current 2024.1 Inventory Management User Guide is a little breezier on the instruction side, but has Kinetic screens.
I ended up using an UpdateExt on the BpMethod BO and then I can toggle IsEnabled field. So that should get me going for this next run at least.
I will definitely check it out. Thanks!
The best way to enable one BPM from another is to use the CallContextBPMData table. On the Method BPM, you select the condition that you want to trigger the other BPM and then set one of the fields in the table to something unique (one time I used Pineapple). Then on the other BPM, you check the field on the table for your trigger and do what you need.
I’ve done this when trying to trigger functions via classic customization. Set an unused field to some keyword, then trigger the function in a data directive whenever that keyword is added to the field.
![]()
Cycle counting is also in the ELC if I recall
Cant speak to a best, but I’d start here:
Ice.BO.BpMethodSvc
This is where I was looking - I was trying to use the proper methods but I couldn’t get it to work. The trace was a bit confusing. I ended up using UpdateExt on it and that did the trick. Thanks!!
This sounds like a perfect example of the XY Problem where you are asking how to do X, when you really want to do Y…
I would NOT enable/disable a BPM… but instead put a condition in the BPM that would cause it to enable itself based on the conditions within the system… for example, if you are attempting to have the BPM enabled only when running Physical inventory, there is a field in the inventory tables that tells you if you have an open inventory…
OR you could have one BPM turn on/off a BPMHold (one when you initialize PI, and another when you post it)… BPM holds can then be checked from anywhere. If the BPM hold is on, then you can prohibit (or warn).
OR you can have the BPM always run based on a certain date parameter… There are multiple options here.
I personally do not like the idea of BPMs being turned on/off by the system. The reason is that when you turn on a BPM, it actually creates code, and compiles it. I would rather have an efficient BPM always turned on, but with an IF statement at the beginning to decide if you want it on or not.
I like the other ideas! This is definitely an example of an XY problem. It’s funny it’s like I can give advice to another person where they are asking about Y but the problem is probably X… but when I ask it, I’m blind to it.
In this case, I do want us to use the actual PI process in cycle counts but we’re not ready to do that for our count next week. So I’m working with what I already got. But even then, I like your alternate solutions other than just turning on/off the BPM that prevents transactions. I don’t like the idea of turning on/off a BPM that prevents anything from happening using code that is executed by a person who may or may not have any idea that the BPM exists. I think I’ll take another pass at a solution to this X problem.