DataView-Conditions are kinda multi-purpose tools. I’ll try to summarize (sorry if it is long winded)…
Use Case One…
Evaluate my dataview and find records (rows) which match my expression/criteria. You can then create branches off of that and perform different actions based on the number of matches.
So, if I have a dataview (set of rows) that I want to evaluate, I can then set up options on what to do next.
OnNoMatch: Take a Nap
OnSingleMatch: Grab the fire extinguisher
OnMultipleMatch: Call the Paw Patrol!
In these “branch” cases… I’m not impacting the results… I’m just taking action based on the number of results (hopefully that makes sense).
Use Case Two…
The Iterative event is used when you want to do actions against each row that is put into the result dataset. So, for each row that meets the criteria, perform “this event”.
Here’s a rough explanation of the parameters:
The key thing to keep in mind is that Epicor is not “duplicating” data… your “AvailableQty” (result) dataview is NOT a separate dataset. Its a “window” into the PartAllocLot dataview. It references the same rows in the source dataview.
The iterative event iterates over the result dataview… not the source dataview.
This is why, in your iterative event, when you used PartAllocLot in your bindings, it only referenced the last active row in that dataview. So, all updates were applied using the same value.
By switching your iterative event row-update to reference the AvailableQty view, it then does your row-updates row-by-row, grabbing updated values from AvailableQty.AvailableQty and pushing them to AvailableQty.NewAllocatedQty.
But again, the changes done to this view are ACTUALLY being applied to the source dataview (PartAllocLot).
~*~
Anyway… When you use a dataview-condition, you can do branching… an iterative event against the matching rows… or both.