事件处理范围活动中的延迟活动 - Windows工作流共享点

Rob*_*anc 2 sharepoint workflow delay workflow-foundation

我正在尝试创建以下方案:

  • 任务被分配给用户完成
  • 为管理员创建一个任务,以便在必要时重新分配用户任务(不要问,他们想要这样)
  • 当任务接近截止日期时,需要发送电子邮件提醒

所以,我想到使用EventHandlingScope:

  • 我正在听eventhandlingscope活动的主要分支上的任务更改,
  • 在事件驱动的分支中侦听重新分配任务更改 - 如果重新分配任务被激活,则将第一个任务重新分配给指定的用户
  • 在另一个事件驱动分支中使用延迟活动并定期检查用户分配的任务是否即将到期并发送电子邮件提醒

因此,尽管eventhandlingscope对此有好处,但它主要是,除了DelayActivity的问题.

如果我在其中一个事件处理程序分支中放置一个延迟活动,它会触发一次,但不会更多.然而,如果我在那里放置onTaskChange活动,那么每当有人改变该任务时它就会触发.

那么,这是预期的行为吗?为什么DelayActivity不循环?我怎么能这样做?我的想法是用CAG,但这看起来有点复杂......

更新:CAG的问题是整个事情都会阻塞,直到延迟活动触发,即使onChange事件被触发.这是有道理的,但使用起来有点棘手.

Update2:我已经对文本进行了重新编写,以使其更加清晰

Ant*_*nes 5

解决方案

解决这个问题的基本活动安排WhileActivity包含一个ListenActivity.

listen活动有3个EventDrivenActivity分支.第一个是"用户任务完成"分支,第二个是"管理员更改分配的用户"分支,第三个包含a DelayActivity后跟您的电子邮件逻辑.

在监听活动中,任何分支都可以完成Listen活动,当他们这样做时,Listen活动中的其他活动将被取消.

您需要确保"用户任务已完成"序列设置一些可由while循环测试的值,以便在用户完成任务时退出while循环.

当"用户任务已完成"分支以外的分支负责完成ListenActivity工作流时,将循环回ListenActivity并重新执行所有3个事件驱动的活动,包括包含该活动的活动DelayActivity.

请注意,这与EventHandlingScope方法略有不同,因为"侦听用户任务已完成"将被取消并重新执行,而使用不会发生的EventHandlingScope.IMO这是一个更好的安排,因为这意味着当前选择在Listen活动开始时执行任务的用户在结束时保证不变(因为如果它被更改,则整个活动被丢弃并且新的活动开始).

为什么Delay只在EventHandlingScope中触发一次

实际上你设置的是一个监听两个事件的范围.一个是您的经理更改分配的用户事件,另一个是"计时器触发事件​​".

现在它在文档中描述的方式听起来像是一些循环,就好像一旦这些活动中的一个完成它们就会重新启动.然而它不是那样的,它实际上只是继续监听原始事件,并且如果触发另一个这样的事件将重新运行内容.

在这种情况下,DelayActivity正在收听一些内部"计时器触发事件​​".首次进入延迟时,会设置超时,以便定时器在适当的时间触发,然后监听该事件.一旦它触发了范围返回到监听"定时器触发事件​​",但是,没有重新运行设置超时的初始代码,因此没有其他"定时器触发事件​​"即将到来.