Add or Edit any Operation - My Custom Dashboards

Hello Everyone!
After many months of tinkering around and begging for help on this forum, I finally have a set of dashboards that do what I expect them to. I would really appreciate if anyone else would take a look at these forms and let me know if there are any problems with them. I will continue to make minor updates as my end users get to use the forms more. If I make any major changes I will post them back here for you all to enjoy.

You will need an ECO group setup with your Epicor username. As this is where parts get checked out to. Import the dashboard file. This should include a BAQ with BPM. Once you deploy the dashboard, apply the appropriate customization to it.

First off is the Add Engineering Operation Dashboard. This is designed to insert an engineering op at the beginning of a given part’s operation list. The operation tries to take either Op# 5 then Op# 1. If these are both taken, then you get an error saying as much. Begin by entering a part number and hitting Tab. Next, choose a revision from the list at the bottom. Finally, enter a comment and a reason and click the big button to add the op.
App.AddEngOp.MainController_Customization_Custom2_CustomExport.xml (87.9 KB) AddEngOp.dbd (438.1 KB)

Next, is the Add Any Operation Dashboard. This is designed to insert an operation at any unused sequence number for a given part. Begin by entering a part number and hitting Tab. Next, choose a revision from the list at the bottom. Finally, enter values for all the fields. Some checking is in place to make sure values are filled in for every field. If you want to add multiple operations, check the “skip check in” box to make the process a bit faster.
App.AddAnyOp.MainController_Customization_Custom2_CustomExport.xml (211.6 KB) AddAnyOp.dbd (481.1 KB)

Lastly, I present the Edit Any Operation Dashboard. The purpose is to… you guessed it, edit any existing operation for a given part. Begin by entering part number, and selecting a revision and operation from the list. Next, make any changes you need in the provided form. Finally, click the big button to execute the changes.
App.EditAnyOp.MainController_Customization_Custom2_CustomExport.xml (264.6 KB) EditAnyOp.dbd (524.4 KB)

I hope these forms work for everyone. I am really curious to see what you think of them. Please let me know if you have any questions, comments, suggestions, or dire warnings.

Thank you all for your time and expertise!


Just dropping an updated version of my Edit Any Op dashboard.
EditAnyOp_NEW.dbd (513.3 KB)
App.EditAnyOp_New.MainController_Customization_custom3_CustomExport.xml (391.3 KB)

1 Like

I see that my dashboard also requires a couple of BAQs to help populate the combo boxes. I have added them here. You can just import these BAQs and leave them alone. The customization code takes advantage of the BAQs.
These two BAQs are used by the EditAnyOp Dash.
getPartRev.baq (13.5 KB)
getPartRevECOs.baq (14.2 KB)

Do you have a baq called getPartRevOpECO? Im getting an error that that one is needed for the customization as well.

You have to mark the BAQ as all companies.


getPartRevOpECO.baq (23.4 KB)

1 Like

After selecting a part and a revision and loading the operation I noticed that the Resource ID and Code section does not load anything. Where do I create the links for this?

Oh man… I am terrible developer! Someone take my keys!
Here is another BAQ that feeds the Resource Group ID combos. I put in two combos because some folks know the ID code, and some know the description. The two boxes are kept in sync, and should show the same info when populated.
ResourceGroupIDs_NoSub.baq (13.7 KB)


You may not need resource group ID. It depends on how your ops are setup. When I first created this dash, our ops pointed to resource groups. Now our ops point to capabilities, so I can’t use this dash without fixing the requirement for resource group.

I believe the requirement is at the customization level, and may also be inside the UBAQs BPM.

So that got the form to work. Now I am seeing an error for the bpm on the baq:

After validating I see these errors listed:


Apparently, this comes from a module that we do not have in our instance. Is there a way to get a copy of this baq/bpm without that object being mapped?

PS: This thing is amazing! Thank you so much for sharing this and helping revive it.

I will take a look. I am not sure which module it might be.

I am not sure on the specifics, but I think that at some point in the last year, a few new key fields were added to some tables. Notably, AltMethod and ProcessMfgID. Once these became requirements, I just pass empty strings for the values, and it seems to work.

To see what changes you might have to make, you have to do a little extra work. You have to add a new method to the BPM for each method that uses those new fields. As an example, open the BPM and go to the bottom. There is a method called CheckIn. Look at the parameters for this method and you should see those two fields (row 4 and 5).

Now go to the menu on the left and find Invoke BO Method. Drag that sucker onto the page next to the CheckIn Method. You don’t have to connect anything just yet.

Configure the new method you added to be setup just like the CheckIn. Click “specified” to choose the BO and method. The Service Name will be EngWorkBench, and the Method is CheckIn. Now click on “not configured” to see the method parameters. Do you have rows 4 and 5 that show AltMethod, and ProcessMfgID?

If you do have those fields, then I am not sure what is going on. You should be able to sue my original files. If you don’t have the fields. Then you can replace my check in method with your check in method. Just make sure to set all the parameters the same.

There are a few other methods in this BPM that use those fields. I think: CheckIn, CheckOut, and GetDatasetForTree, should be the only ones.

This was a lot of work to setup initially, so kudos for diving in! Happy to help any way I can.
Good luck!

1 Like

For some reason, the ipProcessMfgID wasn’t listed on the Invoke bo methods that came in on the original BAQ. After replacing those with new ones and configuring them the same way you had those errors are now gone.

The next error now seems to be with a parameter having a null value:

Is this error from the BPM, or from the custom code in the dashboard?
This section of the customization code on the dash is the only part that I can see that uses type:

	private void BAQRunCustomAction(EpiDataView iEdv, string iActionID)
	    BAQDataView BAQView = (BAQDataView)iEdv;
	    Assembly assembly = Assembly.LoadFrom("Ice.Lib.EpiClientLib.dll");
	    Type t = assembly.GetType("Ice.Lib.Framework.BAQUpdater");
	    BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy;
	    MethodInfo mi = t.GetMethod("BAQRunCustomAction", bf);
	    object[] param = new object[] { BAQView, iActionID};
	    mi.Invoke("Ice.Lib.Framework.BAQUpdater", param);

I also don’t see any issues with this code. In the dashboard custom code, make sure you have the custom assemblies reference:
These should pull in automatically. You will need that last one for sure to use the function above.

1 Like

Getting closer!

Those assembly references were missing. Once added I got an error that said the bpm was outdated. So I checked it as good and ran the dashboard again.

I am now getting the following error:

I checked the part im using and it only has one approved revision.

1 Like

I think this happens if the process doesn’t run all the way through. I assume you have already created the EngWB ECO group that matches your username. I also assume you are running in Pilot for testing.

Open EngWB, and look at the parts you have checked out. Go to Actions, and Approve and Check In All.
This will get rid of any revs you still have checked out. If the BPM doesn’t get all the way to the end, this is where you have to look to make sure you get the parts checked back in. Once it is working well, you shouldn’t need to look in EngWB.

I believe the BPM expects only one rev to be checked out at a time.

1 Like

Its still giving me the error even after check in and approve all. Does this bpm look at only approved revisions?

That is a slippery error. I hate to advise this, but you may have to debug the BPM widgets. I put a Test Stop message box in there to use for just this reason. In order to figure out which widget is generating that error we need to be able to stop the code at various points.

Look for the Test Stop widget. It should be at the end of a row of about 4 widgets. I think everything above this point is probably fine.* Disconnect the output of that last update method and attach the update to the test stop. Don’t attach anything else after that.

We are seeing if the code will run up to this point and have the proper values in the underlying datasets. The TestStop gives you a place to put those values for inspection. I have already put in most of what you will be interested in. Not connecting anything else after allows the BPM to run without error (if your test stop is before the widget that errors.)

After you setup that first test stop, save and run the BPM. It should run all the way up to the stop and then show the message box with the values you care about. If you get good values in the test stop, then open the BPM workflow designer back up, and disconnect the test stop and move it to the end of the next row of widgets.

Keep repeating this until you figure out where the error is occurring. If you narrow it down to a row of widgets, then insert that test stop between each widget one at a time and retest the BPM.

Note that while you are testing in this way, the eng wb is getting populated with records, so in between you may want to keep Eng WB open to clear it out (check in all) between tests.

*I put the test stop at the point where I was last using it, (near Update4). If you still get that error when testing with the test stop, then you need to move the test stop even earlier. Note the original connection layout, then disconnect a widget, and insert the test stop. Once you have tested it, you will have to reconnect the widgets as they were originally.

I can’t say which widget is the most likely cause. I had to trace this error over and over again until I finally got it working. Mostly because of how unwieldy the BPM widget map is. I think if you look at each step it is pretty clear what is supposed to happen. Happy to keep working with you to get it going again. I hope you can get it working!

1 Like

Back at it again. This time with a new error:

I have confirmed that this part does indeed have an op 100 on the selected revision.Any ideas on where to start hunting this error?

Sorry I’m not really contributing to the current questions, but why is this code in here?
Why not just reference it directly instead of via reflection?