Are Epicor Widgets Broken? šŸ¤

BPM/EFx are server-side stuff. It behaves as other server-side stuff works. In general, it behaves as the code of services. So the usual way here is different from the client-side way.

Again, trace shows client-to-server behavior. BPM works inside server and behaves like other server-side stuff.

What BeforeImage means? I do not know what it is :frowning:

Some UD fields for example.

Just in caseā€¦ Most likely, the ability to bypass facades will be removed in the future.

I agree that BPM and EFx need for-each functionality.

You make two mistakes simultaneously :wink:

  1. The article is about extension method added to ICE by me ;). There are 4 method, Add(), Updated(), Deleted() and Unchanged(). So Unchanged() means !Added() && !Updated() && !Deleted(). And therefore !Unchanged() == Added() || Updated() || Deleted().

  2. UI options are inherited from E9. And they have the original means. Actually, there is no relation between UI options and these extension methods.

As for me, the actual fix would be to switch to checkboxes :wink:
But I think that such changes have no chance to be implemented in windows client :frowning:

  1. Maybe, but without official requests, it is least likely possible.
  2. Do you realize that Update methods do not support multiple modified rows in most cases? (in contrast with UpdateExt).

Only after moving the editing logic from client to server. This transition is very complex and expensive.

2 Likes

Improper comparison :). You create a complex query with multiple fields. It is not needed for updating a single field.

But, in general, I wanted to add Udpate Table widget similar to Update Table by Query, but without source query. But again, there were no feature requests for that.
And now, most likely, no one approves such functionality for the existing UI.

1 Like

BeforeImage is when you are in a POST and you do GetByID and you make a change, before you call Update or UpdateMaster and sometimes other Methodsā€¦ you need to create a copy of the row, basically your own RowMod ā€œā€ blank and then you make changes to second copy of the row RowMod ā€œUā€.

image

If you donā€™t certain methods will fail, they kind of require both. Epicor uses this technique throughout all of their BPMs. Example from SDK


Its not always update that only requires it others too.

2 Likes

Do you not get to think for the users anymore :frowning: you know those ā€œour Customers would benefit from xā€. Is it required now that you always have a request first?

Right, and thatā€™s not a trivial distinction. I mean, a tech ref guide to BPM custom coding would be great, but I donā€™t see it ever happening, so itā€™s widgets, baby!

Exactly.

If.

Definitely, Iā€™m correct :slight_smile: I had to add this bloody stuff to the BPM on the late E10.0 development stage just because it works this way in E9 and this requirement was missed.
Actually, you need to remember that filtering is not applied to the directive variables. And completely disabled in EFx.

It is by design. By E9 design. Actually for directives where ā€œwith ruleā€ setting is available (Standard DD and MD on services with multiple dirty row support) you can change rule from ā€œmatchingā€ to ā€œexistingā€ (sorry, donā€™t remember the exact name).

1 Like

The thing is, there are like 50 people in the world who are wizards with Epicor widgets, and 50 million C# developers. For the company looking to hire someone to set up Epicor, the choice is clearā€¦ if they have a choice at all.

Iā€™m a professional developer (solution designer, architect) more than 30 years already.
And. definitely, code is a more native approach for me.
But widgets have a great benefit over the custom code blocks. They are upgrade-friendly. And it is a great benefit for the product customizations. Custom code is either hard to or even impossible to upgrade.

4 Likes

Just do not forget, that code generated now can be completely different from the code that BPM/EFx will generate in the next release.

1 Like

I do like widgets or coding in blocks, it also lets me visualize the BPM Flow better. I do appreciate your time SAD. I am not bashing widgets; actually I want to use them. But I feel like I canā€™t without cluttering my flow with ā€œhacksā€. :slight_smile:

Iā€™ve done plenty of:
image

I do prefer this more:
image

I want to get to this:

But I always end up with pockets of Custom Code :stuck_out_tongue:

1 Like

Thank you! Never heard about this recommendation. I never saw directives with such code. More precisely, no one sent such directives to me for review.

Just in case, modern versions (probably starting 10.2.700 or 2021.1) support BufferCopy-like stuff to clone the whole tableset.

Also, one of the things that I would like to see in BPM/EFx is clone widgets. But again - no requests mean no features :(.

1 Like

Do you work with management on your features? I guess it should be clear that management doesnā€™t want to invest in development if no requests come.

1 Like

Because the APIs the code is using are mostly undocumented in the sense of not being published and supported. When they change, no thought is given to backward compatibility. Evolving an API in a backward compatible way is a burden, but a much smaller burden than figuring out how to upgrade code after a breaking change. The problem from Epicorā€™s perspective is that they didnā€™t design these APIs to ever be supported. Supporting them would lock them in to their current design. And supporting them doesnā€™t align with their marketing.

I think between some of us we can send you some examples on email. Happens here and there :slight_smile:

Not only. For example BPM and EFx can be moved out of proc and start working with Epicor API via REST/gRPC/etc. In such a case, widgets will work after the upgrade. Custom codeā€¦ Most likely does not.

You are welcome. It can be a good input for the analysis.

1 Like

BPM is not about the full-fledged coding approach. It is about low-code customization. And we tries (mostly successfully) to support backward compatibility for them.
Custom code is a kind of last resort. And upgradability of them is not guarantied.

One last note on UpdateExt. I do know it does Multiple. But we have stumbled plenty of time with it causing a Row has been modified by another userā€¦ especially when we did alot of Service Connect. So switching to a loop and individually calling Update resolved many of those headaches.

I dont f with UpdateExt anymore I am all the way Update; lol

I do agree with you on so many things @SAD I hope that my bitching doesnt convey a negative image. I will try to make some Idea submissions and let them get evaluated.

As a full time Epicor developer; sometimes I feel like only Kinetic gets loved and everything else became second class citizen :slight_smile:

I will for sure put the Set Field RowMod idea in :stuck_out_tongue:

Also is there any plans to stop people from joining ttTable to DbTable.

Off to day job.

1 Like

I saw that when we switched from 10.1 to 10.2 EF4 to EF6ā€¦ had to rework a bunch of queries especially ones that used conversion helpers.

Iā€™ve actually never had custom code break after an upgrade. It would probably break if Epicor ever cleaned up their BO APIs in preparation for documenting and supporting them. I still wish they wouldā€¦

2 Likes