Class OpenWFE::ConcurrentIteratorExpression
In: lib/openwfe/expressions/fe_concurrence.rb
Parent: ConcurrenceExpression

This expression is a mix between a ‘concurrence’ and an ‘iterator’. It understands the same attributes and behaves as an interator that forks its children concurrently.

Some examples :

    <concurrent-iterator on-value="sales, logistics, lob2" to-field="p">
        <participant field-ref="p" />
    </concurrent-iterator>

Within a Ruby process definition :

    sequence do
      set :field => f, :value => %w{ Alan, Bob, Clarence }
      #...
      concurrent_iterator :on_field => "f", :to_field => "p" do
        participant "${p}"
      end
    end

Methods

Attributes

template  [RW] 

Public Instance methods

[Source]

     # File lib/openwfe/expressions/fe_concurrence.rb, line 234
234:         def apply (workitem)
235: 
236:             return reply_to_parent(workitem) \
237:                 if @children.length < 1
238: 
239:             @template = @children[0]
240: 
241:             @children.clear
242: 
243:             @workitems = []
244: 
245:             iterator = Iterator.new self, workitem
246: 
247:             return reply_to_parent(workitem) \
248:                 unless iterator.has_next?
249: 
250:             while iterator.has_next?
251: 
252:                 wi = workitem.dup
253: 
254:                 @workitems << wi
255: 
256:                 vars = iterator.next wi
257: 
258:                 rawexp = get_expression_pool.prepare_from_template(
259:                     self, nil, iterator.index, template, vars)
260: 
261:                 @children << rawexp.fei
262:             end
263: 
264:             super
265:         end

[Source]

     # File lib/openwfe/expressions/fe_concurrence.rb, line 267
267:         def reply_to_parent (workitem)
268: 
269:             get_expression_pool.remove(@template)
270: 
271:             super
272:         end

Protected Instance methods

[Source]

     # File lib/openwfe/expressions/fe_concurrence.rb, line 276
276:             def get_workitem (workitem, index)
277: 
278:                 @workitems[index]
279:             end

[Validate]