Class OpenWFE::IteratorExpression
In: lib/openwfe/expressions/fe_iterator.rb
Parent: WithTemplateExpression

The ‘iterator’ expression can be used like that for example :

    <iterator
        on-value="alice, bob, charles"
        to-variable="user-name"
    >
        <set
            field="${user-name} comment"
            value="(please fill this field)"
        />
    </iterator>

Within the iteration, the workitem field "__ic__" contains the number of elements in the iteration and the field "__ip__" the index of the current iteration.

The ‘iterator’ expression understands the same cursor commands as the CursorExpression. One can thus exit an iterator or skip steps in it.

    iterator :on_value => "alice, bob, charles, doug", to_variable => "v" do
        sequence do
            participant :variable_ref => "v"
            skip 1, :if => "${f:reply} == 'skip next'"
        end
    end

For more information about those commands, see CursorCommandExpression.

Methods

apply   reply  

Included Modules

CommandMixin

Attributes

iterator  [RW]  an Iterator instance that holds the list of values being iterated upon.

Public Instance methods

[Source]

     # File lib/openwfe/expressions/fe_iterator.rb, line 87
 87:         def apply (workitem)
 88: 
 89:             if @children.length < 1
 90:                 reply_to_parent workitem
 91:                 return
 92:             end
 93: 
 94:             @iterator = Iterator.new(self, workitem)
 95: 
 96:             if @iterator.size < 1
 97:                 reply_to_parent workitem
 98:                 return
 99:             end
100: 
101:             reply workitem
102:         end

[Source]

     # File lib/openwfe/expressions/fe_iterator.rb, line 104
104:         def reply (workitem)
105: 
106:             command, step = determine_command_and_step workitem
107: 
108:             vars = if not command
109: 
110:                 @iterator.next workitem
111: 
112:             elsif command == C_BREAK or command == C_CANCEL
113: 
114:                 nil
115: 
116:             elsif command == C_REWIND or command == C_CONTINUE
117: 
118:                 @iterator.rewind workitem
119: 
120:             elsif command.match "^#{C_JUMP}"
121: 
122:                 @iterator.jump workitem, step
123: 
124:             else # C_SKIP or C_BACK
125: 
126:                 @iterator.skip workitem, step
127:             end
128: 
129:             unless vars
130:                 reply_to_parent workitem
131:                 return
132:             end
133: 
134:             store_itself
135: 
136:             get_expression_pool.launch_template(
137:                 self, nil, @iterator.index, @children[0], workitem, vars)
138:         end

[Validate]