On Thu, Jun 25, 2009 at 10:50 AM, Li Xiao<[email protected]> wrote:
>
> I have problem to define a workflow with the following scenario:
>
>   * there is big organization, lets say: have 10 groups of users: a,
> b, c, d, e, f, g, h, i, j
>   *  A document would be go through 3 steps
>   * the first step is started from group 'a'
>   * the next step maybe need some of other groups/users to review the
> document concurrently, user processes the first step will decide
> what's groups need to review the document.
>   * If all reviewers in second step think the document is ok, then
> the document will be pass to next step, otherwise, the document will
> be back to step 1.
>   * the third step do nothing special, and finish the process.
>
> For my understanding of Ruote currently, there is no way to define
> this kind workflow, (I think most of opensource workflow engine
> couldn't do it). I would be very happy someone point out I am wrong.
> Any ideas?

Hello Sun Hao,

what about :

---8<---
pdef = OpenWFE.process_definition :name => 'review' do
  sequence do
    cursor do
      participant '${f:launcher_group}', :activity => 'step 1', :if =>
'${f:not_ok}'
      participant '${f:review_group}', :activity => 'step 2'
      rewind :if => '${f:not_ok}'
    end
    participant 'other'
  end
end
--->8---

?

The value of the field 'launcher_group' is set at launch time.
The value of the field 'review_group' is set at launch time as well.
The value of the field 'not_ok' is set by the review_group members.

This is leveraging the cursor expression :

  http://openwferu.rubyforge.org/expressions.html#exp_cursor


The concurrent review requirement could be written as :

---8<---
pdef = OpenWFE.process_definition :name => 'review' do
  sequence do
    cursor do
      participant '${f:launcher_group}', :activity => 'step 1', :if =>
'${f:not_ok}'
      concurrent-iterator :on_value =>
'${f:list_of_review_group_members}', :to_field => 'reviewer' do
        participant '${f:reviewer}', :activity => 'step 2'
      end
      rewind :if => '${f:not_ok}'
    end
    participant 'other'
  end
end
--->8---

The 'list_of_review_group_members' is set at launch time, it could
look like "alice, bob, charly" it's a comma separated list of
user/group (participant) names.

  http://openwferu.rubyforge.org/expressions.html#exp_concurrent-iterator


> Further question: is this kind requirement should be considered as
> part of workflow engine?

This kind of requirement is essential.

Ruote supports directly a lot of the control-flow patterns at :

  http://workflowpatterns.com/patterns/control/index.php

Read more about it at :

  http://openwferu.rubyforge.org/patterns.html


I hope this will help, best regards,

-- 
John Mettraux   -   http://jmettraux.wordpress.com

--~--~---------~--~----~------------~-------~--~----~
you received this message because you are subscribed to the "ruote users" group.
to post : send email to [email protected]
to unsubscribe : send email to [email protected]
more options : http://groups.google.com/group/openwferu-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to