Sharepoint 如何在并行审批工作流中实现拒绝?

Sharepoint 如何在并行审批工作流中实现拒绝?,sharepoint,sharepoint-2007,moss,workflow,workflow-foundation,Sharepoint,Sharepoint 2007,Moss,Workflow,Workflow Foundation,我开发了一个带有Replicator活动的SharePoint工作流,以便为每个审批者复制一个自定义活动。自定义活动为特定用户实现审批分支。它具有CreateTask、While、OnTaskChanged和CompleteTask活动的经典形式 我在replicator上设置untlcondition,在一个审批人选择拒绝审批后取消执行,然后工作流完成。问题发生在其他未完成的任务上,这些任务“挂起”在其当前状态。用户在打开任务时未看到此状态 我将UpdateAllTasks放在replacat

我开发了一个带有Replicator活动的SharePoint工作流,以便为每个审批者复制一个自定义活动。自定义活动为特定用户实现审批分支。它具有CreateTask、While、OnTaskChanged和CompleteTask活动的经典形式

我在replicator上设置untlcondition,在一个审批人选择拒绝审批后取消执行,然后工作流完成。问题发生在其他未完成的任务上,这些任务“挂起”在其当前状态。用户在打开任务时未看到此状态

我将UpdateAllTasks放在replacator之后,以将任务状态设置为Cancelled。但是,由于CompleteTask(针对被拒绝的任务)和UpdateAllTasks之间没有事件活动,因此针对被拒绝的任务的UpdateAllTask活动集也被取消

问题是,在UpdateAllTasks之前,我如何清除CompleteTTask所做的挂起更改


或者,也许有另一种方法来实现这样的工作流。我正在考虑使用UpdateTask为自定义活动实现Cancel处理程序的方法。但是我不知道如何实现它,并告诉取消处理程序它在被拒绝的情况下执行。

您是否尝试将代码活动放在完成任务和更新任务活动之间?

将您的活动结构如下: 创建任务->OnTaskChanged->如果/其他活动(如果审批人的决定为“拒绝”,则将条件设置为true”)->(在If分支内部)更新任务活动(在活动属性中将状态设置为取消)->(在If分支外部)完成任务活动


当审批人决定拒绝某项任务时,WF将取消所有任务。它还将取消被拒绝者的任务,但在“CompleteTask”活动启动后,会立即将相应的任务设置为已完成。

我今天遇到了类似的问题。我用以下方法解决了这个问题:

  • 如果任务已取消,则在ontaskchanged方法中将变量taskCancelled设置为true(基于字段completed和percentageCompleted)
  • 仅当taskCancelled变量为true时,updateAllTasks方法运行以在每个ontaskchanged事件之后取消每个任务(在replicator内的序列中)
  • 如果taskCancelled变量为true,则将replicator的条件设置为true

  • 在面对同样的问题并花费大量时间研究和尝试不同的选择之后,我认为我找到了一个非常好的解决方案。我把它贴在这里是为了子孙后代

  • 创建扩展SequenceActivity(称为ReviewActivity)的自定义活动
  • ReviewActivity包括典型的CreateTask->While->OnTaskChanged->CompleteTask场景
  • 在我的工作流程中,我有一个复制器,它正在创建许多ReviewActivity实例(以及许多任务)
  • replicator实现一个UntilCondition,用于检查任务是否被拒绝(这在ChildCompleted中设置)
  • 在复制程序之后,我有一个UpdateAllTasks来关闭剩余的任务
  • 如果您对这个场景有任何经验,您可以告诉我UpdateAllTasks也会更新最初被拒绝的任务,因为“CompleteTTask”尚未持久化到数据库中。神奇之处在于,您可以为名为PersistOnClose的自定义活动(ReviewActivity)定义一个属性

    [Designer(typeof(ActivityDesigner), typeof(IDesigner))]
    [PersistOnClose]
    public partial class ReviewActivity : SequenceActivity
    
    此属性确保一旦ReviewActivity完成,所有更改都会持久化到数据库中。由于ReviewActivity中的最后一个活动是“CompleteTask”,因此任务将保存到数据库中。因此,UpdateAllTasks不会触及它

    我希望这对某人有帮助