def position

      workitems.collect { |wi|

        r = [ wi.fei.sid, wi.participant_name ]

        params = (wi.fields['params'] || {}).dup
        params.delete('ref')

        if err = errors.find { |e| e.fei == wi.fei }
          params['error'] = err.message
        end

        r << params
        r
      }
    end
def position

      workitems.collect { |wi|

        r = [ wi.fei.sid, wi.participant_name ]

        params = (wi.fields['params'] || {}).dup
        params.delete('ref')

        if err = errors.find { |e| e.fei == wi.fei }
          params['error'] = err.message
        end

        r << params
        r
      }
    end
Returns the 'position' of the process.

   pdef = Ruote.process_definition do
     alpha :task => 'clean car'
   end
   wfid = engine.launch(pdef)

   sleep 0.500

   engine.process(wfid) # => [["0_0", "alpha", {"task"=>"clean car"}]]

 A process with concurrent branches will yield multiple 'positions'.

 It uses #workitems underneath.

 If you want to list all the expressions where the "flow currently is"
 regardless they are participant expressions or errors, look at the
 #leaves method.