# Epicor BPM & Functions Design Feedback

**URL:** <https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023>\
**Category:** Kinetic ERP\
**Created:** [July 28, 2021, 5:14pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023 "2021-07-28T17:14:33Z")\
**Posts on this page:** 20\
**Page:** 3

<div class="post-metadata">

**Author:** ![caleb.grundmeier](https://www.epiusers.help/letter_avatar_proxy/v4/letter/c/a4c791/32.png) [@caleb.grundmeier](https://www.epiusers.help/u/caleb.grundmeier)\
**Post date:** [August 30, 2021, 5:20pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/42 "2021-08-30T17:20:36Z")

</div>

My wish list:

Add the ability to call ContextLibrary classes in custom code. Like Erp.Internal.LibFindPart and Erp.Internal.Lib.CalendarDate. There a handful of helpful Context Bound classes.

Not sure if this was implemented or not but add the ability alias assemblies. Currently, you can’t use two services with the same Table signatures such as the SelectedSerialNumbersTable.

Add the ability to copy a Function to another Library or list a Function as a template and then have the ability to create a function from a Template function.

I agree with all the modal comments, sometimes I have to have two instances of Epicor running so I don’t have to close the designer all the time to lookup or trace things.

I agree with VS Editor or just a formatting tool to prettify the code.

Add the ability to Group Widgets so the group can be used on more than one result row after a condition widget so you don’t have to use custom code to loop through. Or even if it was only the Function widget that had the ability like the custom code/email/autoprint widget in a standard directive. Maybe there is a solution that exists that I’m simply missing. 🤷‍♂️

![image](https://www.epiusers.help/uploads/default/original/3X/f/1/f12517e4e60ecd275543814cb23c7f99002d84c8.png)

![image](https://www.epiusers.help/uploads/default/original/3X/4/e/4e724561a567cdede134ccf182c61c9aefef36e0.png)

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 11:35am UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/43 "2021-09-07T11:35:24Z")

</div>

> [@josecgomez](#):
>
> If you need to add 6 tables to a function right now you got to select click and search for each table one at a time its time consuming.

Hmm. Table search supports multi-selection. Definitely, if you need items from different areas of a list, it will be difficult.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 11:37am UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/44 "2021-09-07T11:37:32Z")

</div>

> [@Mark\_Wonsil](#):
>
> It would be nice to take a page from the Azure site and provide a way to export/save items to source control from the GUI.

BPM/EFx are not source code based. They are metadata-based. What would you expect to store in a source control?

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 11:39am UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/45 "2021-09-07T11:39:43Z")

</div>

Colleagues,

Brain is not a right person for such questions/requests. He is discussing UI design, not functionality.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 12:49pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/46 "2021-09-07T12:49:48Z")

</div>

> [@mng](#):
>
> f you were calling a Function from a BPM in custom code you couldn’t have more than 7 Output Paramters. If this isn’t fixed it would be nice to not have this limitation as I’ve had to do somethings inside a BPM that I would’ve rathered done inside a function because of this.

It is the limitation for the Tuple\<\>-based version of the InvokeFunction method.  
There is another overload of this function. Something like object InvokeFunction(lib, func, object args). Array-based overload works for cases covered by Tuple\<\>-based one too.

You can try to call a function with more than 7 in or out parameters with widget and look at generated code.

Tuple\<\>-based overload was implemented for performance reason.

Also, if you think about named tuples, then they are value types, so they are very inefficient in our case.

---

<div class="post-metadata">

**Author:** ![Mark\_Wonsil](https://www.epiusers.help/user_avatar/www.epiusers.help/mark_wonsil/32/51594_2.png) [@Mark\_Wonsil](https://www.epiusers.help/u/Mark_Wonsil)\
**Post date:** [September 7, 2021, 1:02pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/47 "2021-09-07T13:02:21Z")

</div>

> [@SAD](#):
>
> What would you expect to store in a source control?

I’ll start a new thread on this since it is tied to the ability to use DevSecOps practices for ALL Epicor customizations.

But briefly, I would want to store the same information that one would get in an BPM/EFx Export. I understand that with EFx, we might have to rely on encrypted artifacts for functions that are distributed by 3rd party providers but that’s a whole other version management issue.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 1:08pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/48 "2021-09-07T13:08:23Z")

</div>

> [@askulte](#):
>
> More detail in the error messages when compiling. I’m guessing what line 103 & 112 is… Can you add text in the error message with the widget name and condition statement that is creating it?

It is mostly impossible. Compilation errors (when you save enabled directive in maintenance UI) come from C# compiler.  
In general, directive validation should cover your needs. But it should be improved definitely.

> [@askulte](#):
>
> Combine Method Directive Maintenance and Data Directive Maintenance (they are effectively the same UI, almost…).

They only look similar. But they are completely different sub-systems. Anyway, the new UI will use way different approach.

> [@askulte](#):
>
> Import/Export from the overflow menu instead of a separate directive import and directive export process that’s independent of method directives maintenance (similar to BAQ’s).

I thought about this approach. The main “blocker” is targeting. Existing import/export UIs cover both MD and DD. Putting them into the action menu conflicts with this behavior.

Also, I’d prefer to completely remove Import/Export from BPM in favor of the new solution workbench (if and when it will be ready).

> [@askulte](#):
>
> For import, give the option to overwrite (instead of making a 2nd copy where it isn’t clear which one is the new one). Having a date created field would help.

In general, it is possible already (if you have a group and select overwrite mode).  
However, I understand what you mean.  
There are two problems here:

1. Since BPM does not support company mapping (how it is implemented for EFx), copying is the only way to use same directive in a few companies. And it makes overwriting much more complex. Especially since directive name is not an id and can be changed in one of the companies.
2. I have a few ideas how to improve that, but no ideas how to migrate existing environments.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 1:12pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/49 "2021-09-07T13:12:57Z")

</div>

In such a case, you already can do that via REST calls. A few years ago I created pretty stupid PowerShell scrip to import EFx libraries for our auto-test team.  
So such approach allows to export and import EFx export packages. Moreover, in the case of export/import (in contrast with installation), you can specify non-binary format.

BPM is harder. If you have no BPM forms and Hold Types associated with your directives, you can do similar thing (but in old format - compressed DataSets).

---

<div class="post-metadata">

**Author:** ![Mark\_Wonsil](https://www.epiusers.help/user_avatar/www.epiusers.help/mark_wonsil/32/51594_2.png) [@Mark\_Wonsil](https://www.epiusers.help/u/Mark_Wonsil)\
**Post date:** [September 7, 2021, 1:16pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/50 "2021-09-07T13:16:12Z")

</div>

> [@SAD](#):
>
> you already can do that via REST calls

That’s exactly how I would do it. That’s all I would add to the forms, a menu item to export as JSON and just make a REST call to get it. It would be just like the Azure Portal… 😉

Then that file goes to Git…

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 7, 2021, 1:21pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/51 "2021-09-07T13:21:51Z")

</div>

Why do you need that? Could you please explain a use case?

---

<div class="post-metadata">

**Author:** ![mng](https://www.epiusers.help/user_avatar/www.epiusers.help/mng/32/39965_2.png) [@mng](https://www.epiusers.help/u/mng)\
**Post date:** [September 9, 2021, 12:42pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/52 "2021-09-09T12:42:55Z")

</div>

It’s a quality of life thing. Often time I find myself wanting to copy something I’ve done in another function in a new function. I usually use the custom code widget so I can see all the code right from the main window without even having to demote the library. However if I want to see the using references for that code I have to demote it and then open it and click one tab over just to see it. If it was on the main screens tab like everything else then I wouldn’t have to do all that just to see what usings are being used.

---

<div class="post-metadata">

**Author:** ![Banderson](https://www.epiusers.help/user_avatar/www.epiusers.help/banderson/32/50875_2.png) [@Banderson](https://www.epiusers.help/u/Banderson)\
**Post date:** [September 9, 2021, 12:56pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/53 "2021-09-09T12:56:29Z")

</div>

@SAD @mng

I agree wholeheartedly with Matt on this one. You shouldn’t have to change the functionality (demote the function) in order to inspect it. If you’re trying to debug something, or recreate an issue it makes it more likely that something is going to get messed up by demoting the function when you don’t intend to change it at that time. And there are many times when you want to look at something that is working to use on something different, like Matt said.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 9, 2021, 1:32pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/54 "2021-09-09T13:32:48Z")

</div>

Got it

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 9, 2021, 1:35pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/55 "2021-09-09T13:35:30Z")

</div>

You don’t need to promote library to test/debug it. It works in BPM in the company where you created the library.  
Also it is accessible via REST (but not in the help page).  
Main difference is in additional segment (/api/v2/efx/staging instead of /api/v2/efx)

AFAIR, all above is documented.

Promotion is for production/qa environments mostly. Not for development one.

---

<div class="post-metadata">

**Author:** ![Banderson](https://www.epiusers.help/user_avatar/www.epiusers.help/banderson/32/50875_2.png) [@Banderson](https://www.epiusers.help/u/Banderson)\
**Post date:** [September 9, 2021, 1:39pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/56 "2021-09-09T13:39:14Z")

</div>

I get that. But it’s usually not that clean in the real world. We just think that a read only ability to inspect functions when they are promoted would be useful. I get not being able to change things, but to not even be able to see them is annoying.

And to be clear, this is a “nice to have” request, not a necessity. It would just be a time saver.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 9, 2021, 1:42pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/57 "2021-09-09T13:42:21Z")

</div>

You should remember, that EFx is not for customers only. It is for partners/CSG/CSF/etc too.  
So, stuff like that cannot be demoted and never will be available to read.  
I will play with an idea to relax this restriction for imported/created libraries, but it definitely never will be possible for the installed libraries.

---

<div class="post-metadata">

**Author:** ![Banderson](https://www.epiusers.help/user_avatar/www.epiusers.help/banderson/32/50875_2.png) [@Banderson](https://www.epiusers.help/u/Banderson)\
**Post date:** [September 9, 2021, 1:46pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/58 "2021-09-09T13:46:20Z")

</div>

> [@SAD](#):
>
> I will play with an idea to relax this restriction for imported/created libraries, but it definitely never will be possible for the installed libraries.

There really should be a setting for that on the library to encrypt it, not just if it’s installed using the solution workbench. We use the solution workbench all of the time in order to move a whole package from dev to production (like we are supposed to) but the fact that this locks the functions means that we can’t use the solution workbench for functions. If we did, then refreshed dev with a copy of production, we can no longer update our own functions. So a checkbox for partners to use that locks the function on installation would be extremely helpful.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 9, 2021, 1:48pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/59 "2021-09-09T13:48:38Z")

</div>

> [@Banderson](#):
>
> We use the solution workbench

Starting 2021.1, SW supports 3 modes for EFx when you create a solution.  
One of them is just an import (like EFx UI does).

Just in case. Installed mode was never been intended to be used during roll out of the internal ‘solutions’. But SW was not ready for that till 2021.1

---

<div class="post-metadata">

**Author:** ![Banderson](https://www.epiusers.help/user_avatar/www.epiusers.help/banderson/32/50875_2.png) [@Banderson](https://www.epiusers.help/u/Banderson)\
**Post date:** [September 9, 2021, 1:50pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/60 "2021-09-09T13:50:24Z")

</div>

Awesome! I didn’t know that. That’s great.

---

<div class="post-metadata">

**Author:** ![SAD](https://www.epiusers.help/user_avatar/www.epiusers.help/sad/32/22683_2.png) [@SAD](https://www.epiusers.help/u/SAD)\
**Post date:** [September 9, 2021, 1:51pm UTC](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023/61 "2021-09-09T13:51:28Z")

</div>

Now it supports even most restrictive mode, when library is visible in EFx maintenance UI only for SM/GSM. But can be used in BPM or via REST.

[Previous page](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023.md?page=2)

[Next page](https://www.epiusers.help/t/epicor-bpm-functions-design-feedback/81023.md?page=4)
