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 "my-rule"</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's consequence is called first, the first enity in the list is 'update', but then update if propagated to immediately causing the rule to be evaluated with all the entities minus the updated one. So I'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 "close-shift"</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 > 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 >= $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>