Dear list,

I had a conversation with Lucas from Howcast the other day:

  http://ruote-irclogs.s3.amazonaws.com/log_2011-08-11.html

There is always this recurring pattern, I emit a workitem towards a participant 
and I want it to be reminded of it, like 1 week before the timeout and then a 
final time, 1 day before the task closes.

Up until now, it involved writing something like:

---8<---
concurrence :count => 1 do
  participant 'toto', :task => 'clean the car', :timeout => '4w'
  sequence :lose => true do
    wait '2w'
    participant 'toto', :notification => 'clean the car !'
  end
  sequence :lose => true do
    wait '3w'
    participant 'toto', :notification => 'DO CLEAN THE CAR !!'
  end
end
--->8---

You can wrap that in a subprocess:

---8<---
define 'do_task' do
  concurrence :count => 1 do
    participant '${v:target}', :task => '${v:task}', :timeout => '${v:tout}'
    sequence :lose => true do
      wait '${v:first_reminder}'
      participant '${v:target}', :notification => '${v:task} !'
    end
    sequence :lose => true do
      wait '${v:second_reminder}'
      participant '${v:target}', :notification => '${v:task} !!'
    end
  end
end

do_task :target => 'toto', :first_reminder => '2w', :second_reminder => '3w', 
:tout => '4w'
--->8---

But it becomes quickly rather ugly.

With Lucas, we discussed having something shorter.

---8<---
participant 'toto', :task => 'clean the car', :reminders => '2w, 3w', :timeout 
=> '4w'
--->8---

or

---8<---
participant 'toto', :task => 'clean the car', :reminders => '2w: 
first_reminder, 3w: second_reminder, 4w: timeout'

define 'first_reminder' do
  participant '${v:text}', :msg => '1st reminder'
end
define 'second_reminder' do
  concurrence do
    participant '${v:text}', :msg => '2nd reminder'
    participant 'supervisor', :msg => '2nd reminder for ${v:text} / ${v:task}'
  end
end
--->8---

These are not always reminders, and it could be beneficial to attach them to 
other things that only participant expression. Let's try with "timers":

---8<---
sequence :timers => '2w: notify, 3w: timeout' do
  participant 'toto'
  participant 'doug'
end
--->8---

In this short example, the sequence has a timeout of three weeks, and after two 
weeks, the subprocess (or participant) named 'notify' is triggered.

I'm working on this feature right now, here is a summary of it:

- they are 'timers'
- it's a list than can get attached to any expression
- they trigger participants, subprocesses or the 'timeout' special behaviour
- maybe 'error' is another special behaviour, 'cancel' as well ('redo' ?)

It requires a bit of rework of the timeout infra, fortunately it should be 
backward compatible.


Thoughts, comments ?

--
John Mettraux - http://lambda.io/processi

-- 
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