Rob*_*anc 2 sharepoint workflow delay workflow-foundation
我正在尝试创建以下方案:
所以,我想到使用EventHandlingScope:
因此,尽管eventhandlingscope对此有好处,但它主要是,除了DelayActivity的问题.
如果我在其中一个事件处理程序分支中放置一个延迟活动,它会触发一次,但不会更多.然而,如果我在那里放置onTaskChange活动,那么每当有人改变该任务时它就会触发.
那么,这是预期的行为吗?为什么DelayActivity不循环?我怎么能这样做?我的想法是用CAG,但这看起来有点复杂......
更新:CAG的问题是整个事情都会阻塞,直到延迟活动触发,即使onChange事件被触发.这是有道理的,但使用起来有点棘手.
Update2:我已经对文本进行了重新编写,以使其更加清晰
解决方案
解决这个问题的基本活动安排WhileActivity包含一个ListenActivity.
listen活动有3个EventDrivenActivity分支.第一个是"用户任务完成"分支,第二个是"管理员更改分配的用户"分支,第三个包含a DelayActivity后跟您的电子邮件逻辑.
在监听活动中,任何分支都可以完成Listen活动,当他们这样做时,Listen活动中的其他活动将被取消.
您需要确保"用户任务已完成"序列设置一些可由while循环测试的值,以便在用户完成任务时退出while循环.
当"用户任务已完成"分支以外的分支负责完成ListenActivity工作流时,将循环回ListenActivity并重新执行所有3个事件驱动的活动,包括包含该活动的活动DelayActivity.
请注意,这与EventHandlingScope方法略有不同,因为"侦听用户任务已完成"将被取消并重新执行,而使用不会发生的EventHandlingScope.IMO这是一个更好的安排,因为这意味着当前选择在Listen活动开始时执行任务的用户在结束时保证不变(因为如果它被更改,则整个活动被丢弃并且新的活动开始).
为什么Delay只在EventHandlingScope中触发一次
实际上你设置的是一个监听两个事件的范围.一个是您的经理更改分配的用户事件,另一个是"计时器触发事件".
现在它在文档中描述的方式听起来像是一些循环,就好像一旦这些活动中的一个完成它们就会重新启动.然而它不是那样的,它实际上只是继续监听原始事件,并且如果触发另一个这样的事件将重新运行内容.
在这种情况下,DelayActivity正在收听一些内部"计时器触发事件".首次进入延迟时,会设置超时,以便定时器在适当的时间触发,然后监听该事件.一旦它触发了范围返回到监听"定时器触发事件",但是,没有重新运行设置超时的初始代码,因此没有其他"定时器触发事件"即将到来.
| 归档时间: |
|
| 查看次数: |
3963 次 |
| 最近记录: |