Zero new part specific UOM conversions

We are constantly have problems with people forgetting to set the UOM conversions for our metal parts. In the past, when you created a new part, the part specific UOM’s would be created with a value of zero - preventing their use until they were set properly. Some update along the way changed that so they now default to 1 when created - which means if the are not set properly and then they are used, you can’t fix them.

I have tried to write a BPM to zero out the part specific UOM’s when they are created, but I am having no luck. I should mention that we are on MT SaaS so I can’t use custom code.

Any ideas on how I can set them to 0 when a part is created or when the UOMClass is modified?

What have you tried with your BPM? What method did you put it on?


I have tried to just simply set those fields on both pre and post processing BPM on the GetNewPartUOM method. This had no effect. The best I can do is create a pop up message to the user.

I was trying to figure out if I can attach a data tag with the GetNewPartUOM method then use a data directive to update the field to zero – but neither a pre or post processing BPM attached a tag to the PartUOM records.

The other challenge is I need this to work both when a new part is created and when the user changes the UOM class. Depending on the sequence of when they hit the save button after a new part is created I think the behavior is different.

Thanks for your help.


Do you know how to do a trace? That will tell you which actions (business objects aka BOs) are firing, and give you guidance on where you should put your BPMs. Get New is at the very beginning of the process and may not even have data populated to change yet, which is why it probably isn’t working. Generally the “update” method catches everything, and is a good place to start. Otherwise there are change BO’s that change things in memory before they are committed to the DB and those can be useful as well.

A tool that you will need in your belt is to create messages in the popups that show you the rows that are being passed. Do you know how to do that?


I have done a trace for this, but I am no expert on reading them. I figured the “getnew” was the problem, but in this case, I need a way to differentiate between a proper update (user has changed the UOM conversion to a valid entry) and
the first update where the system sets the default to 1 (because in some cases, 1 may be the correct conversion). I haven’t been able to figure out how to do that.

I know how to create pop ups that give me information from the tt tables on the BPM, but I don’t think I know how to use them in the way you described below. Can you walk me through them?


UOM conversion.xml (358 KB)

So whenever I start a BPM, the first thing that I do after picking a BO to try, is to put a pop up message in there, and in the message body do a field or table query and display enough things to see what’s in the actual data set. Are there rows present? Because sometimes there isn’t. Are there more rows present that I didn’t realize where there? Because that can mess up your criteria.

So in your case, try on the GetNew, and do a table Query in your pop up message and see if there is any data there. Try Pre-processing and Post processing. This will give you an idea what data you have to work with. You can change anything that doesn’t exist.

Give that a shot, let me know what you find out.

bonus: In your tracing, make sure you turn of your system monitor before you run the trace, it will reduce some of the noise. And clear right before you do whatever is you are trying to do.

Also, the trace that you provided doesn’t have a GetNewPartUOM in it.

That is the best hint I’ve received – you’d think they would cover that in the Epicor BPM training.

Here’s what I got

So you see that there is nothing to change in the pre-processing, so it won’t work there. You should be able to change it in the post processing. That should change it in your view, then when update does hit, should save it that way. But that’s assuming none of the other BO’s mess with it along the way.

Make sure you add in the rowmod when you do those queries, because quite often, that’s what you are using as your criteria (new, added, updated, changed etc) to know which one to change.

So with that info, what is if you want to see? On new UOM’s the conversion should be 0?

Two other things you may want to look at… first, in the UOM Class program on the UOMs > Detail sheet, make sure the Conversion Factor is set to “Multiply” and “0”:


Second, have you tried a Data Directive on the PartUOM table?


Thanks for the suggestion. I tried to start with updating the conversion factor on the UOM Class program, but the ones we use frequently are now stuck in read only. I guess I know now to set this when setting up a new one, but I think I
am stuck on the old ones – unless I create a whole set of new conversions. I’ll try to see if support can help me data fix the key ones, but I doubt they will help.

I have also thought of the Data Directive, but I need a way to distinguish between PartUOM’s that have just been created, and ones that have just been updated by a user. Any ideas on how I can tackle that?

Using and in-transactions data directive, you make a condition, and one of them you can set for if there is an added row in the table.

1 Like

What @banderson said…

1 Like

Thanks guys for all your help. Ernie’s suggestion triggered something for me. I can’t edit those fields on the UOMClass program, but I just tested DMT and it lets me set them to 0. I’m going to try the DMT route and if that works, I won’t
need a BPM.

1 Like