Hi,<div><br></div><div>I have some trouble to figure out how to stop / start the propagation of updates within a Then block.</div><div>Here is a snippet to represent the problem I have.</div><div><br></div><div>rule &quot;my-rule&quot;</div>
<div>    when</div><div>        $objects : List()</div><div>                from accumulate( $entity : Entity(closed==false), collectList($entity) )<br></div><div>    then<br></div><div>        for(Object obj : $objects) {</div>
<div>            ((Entity) obj).setClosed(true);<br></div><div>            update(obj);<br></div><div>        }</div><div>end</div><div><br></div><div>When this rule&#39;s consequence is called first, the first enity in the list is &#39;update&#39;, but then update if propagated to immediately causing the rule to be evaluated with all the entities minus the updated one. So I&#39;m wondering if there is a transaction like operation allowing me to update all the entities in the list and then fire the rules.</div>
<div><br></div><div>According to the documentation no-loop should have help me for this.</div><div><br></div><div>Here is the original rules</div><div><div>rule &quot;close-shift&quot;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>salience -1</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>when</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$shift : Shift( )</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$assignments : List( size &gt; 0 )</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>from accumulate (</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>$assignment : PlanifEventAssignment( </div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>close == false, </div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>shift == $shift ),</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>collectList($assignment) )</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>$availables : List( size &gt;= $assignments.size )</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                </span>from accumulate ( ( and</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>ShiftAssignment(</div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>shift == $shift,</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>$employee : employee)</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>$available : EmployeeAvailable (</div><div><span class="Apple-tab-span" style="white-space:pre">                                                </span>employee == $employee,</div>
<div><span class="Apple-tab-span" style="white-space:pre">                                                </span>assignment.shift == $shift) ),</div><div><span class="Apple-tab-span" style="white-space:pre">                                        </span>collectList($available) )</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>eval( Dfs.search($assignments, $availables) != null )</div>
<div><span class="Apple-tab-span" style="white-space:pre">        </span>then</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>// Recalculate the result.</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Map table = Dfs.search($assignments, $availables);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>for(Object entry : table.entrySet()) {</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>PlanifEventAssignment assignment = (PlanifEventAssignment)((Entry)entry).getKey();</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>EmployeeValue employee = (EmployeeValue)((Entry)entry).getValue();</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>assignment.setClose(true);</div>
<div><span class="Apple-tab-span" style="white-space:pre">                        </span>assignment.setEmployee(employee);</div><div><span class="Apple-tab-span" style="white-space:pre">                        </span>update(assignment);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>}</div>
<div>end</div></div><div><br></div><div><br></div><div>Patrik Dufresne<br>
</div>