Source: Red Hat ( Edson Tirelli)
Iteration is supported in DMN1.1 using the for..in..return operator, such as
for j in myList return myFunction(j,…)
But this only handles the case where each iteration of myFunction depends only on the value of j, the nth item in myList. It excludes cases where the iteration depends on:
1. The n-1st item in the list, or
2. The nth item of another list, or
3. The result of the n-1st iteration
These are all very common iteration use cases.
Reported: DMN 1.1 — Thu, 4 Jan 2018 14:46 GMT
Disposition: Resolved — DMN 1.2
add iteration context and 'partial' keyword to for..in..return
The solution requires two simple enhancements to the for..in..return operator.
1. Loop on index. Following “in”, instead of the list variable myList use the range syntax a..b, where expressions a and b are integers, for example:
for n in 1..N return myFunction(n, myList,…)
Most often N will be the count of myList and n an index into myList:
for n in 1..count(myList) return myFunction(myList[n],…)
2. Include partial results in the iteration. Much like the built-in variable item is defined for filter expressions, we introduce a new built-in variable partial for iteration, a list variable holding the results of previous iterations, for example:
for n in 1..N return myFunction(n, myList, partial, …)
Typically this would be used in an expression like
for n in 1..count(myList) return myFunction(myList[n], partial, …)
These two small changes allow for..in..return to handle all 3 iteration use cases.
Updated: Wed, 3 Oct 2018 14:17 GMT
- DMN12-223_proposal_v3.docx 83 kB (application/vnd.openxmlformats-officedocument.wordprocessingml.document)