【问题标题】:workflow replicator activity: how to determine if task was approved or rejected工作流复制器活动:如何确定任务是被批准还是被拒绝
【发布时间】:2026-02-12 22:00:01
【问题描述】:

我有基本的工作流程,里面有复制器活动。 Replicator 包含我的自定义序列活动,其中包含标准创建任务 --> ontaskchanged --> 完整任务序列。

现在:任务已创建并且可以毫无问题地完成。问题是我找不到获得已完成任务价值的方法。是批准还是拒绝?

请提供几行复制器的 ChildCompleted 事件的代码,以从 Sequence 活动实例(或任何其他方式)中获取任何内容。

谢谢

更新:似乎为了在工作流实例之间交换值,您需要使用DependencyProperty。所以这里的解决方案是:
1) 将 DependencyProperty 添加到父工作流并添加用于存储值的属性,如下所示:

public static DependencyProperty childStatusProperty = 
System.Workflow.ComponentModel.DependencyProperty.Register("childStatus", 
typeof(string), typeof(parentWorkflowTypeName));

public string childStatus
    {
        get
        {
            return (string)base.GetValue(childStatusProperty);
        }
        set
        {
            base.SetValue(childStatusProperty, value);
        }
    }

2) 在自定义序列活动中访问父实例并使用定义的 DependencyProperty 将属性设置为如下值:

private void completeTask1_MethodInvoking(object sender, EventArgs e)
    {
        var replicator = this.Parent;
        var workflowParent = (parentWorkflowTypeName)replicator.Parent;
        workflowParent.childStatus = "my custom status value";
    }

3) 使用普通属性读取该值:

//from parent workflow
string status = childStatus;

【问题讨论】:

    标签: sharepoint workflow


    【解决方案1】:

    问题是您必须在某处记录已创建的所有任务的列表。我猜你正在并行创建任务(不是顺序)。 我有同样的问题,我花了一段时间来解决这个问题。

    请检查此链接作为一个好的起点:http://rmanimaran.wordpress.com/2010/12/02/sharepoint-workflow-replicator-parallel-approval-problem-solution/

    【讨论】:

    • 我现在读过那篇博文几次,但它只提供了如何在 Replicator 中为 SequenceActivity 实例设置值的信息。我设置这些值没有问题。我有一个问题如何检索该 SequenceActivity 实例的 RESULT。在哪里记录表示任务被批准或拒绝的变量?
    • 我所做的是在 ChildCompleted 中跟踪 taskid(即创建的审批任务的项目 ID)。复制器完成后,我知道其中一项任务被批准或拒绝(只有一项)。我只是遍历所有批准任务以找到一项任务。
    • 您能否提供代码如何在 ChildCompleted 事件中使 taskId 脱离序列活动?我完全迷路了
    • 您可以在工作流设计器中执行此操作。您可以将 C# 属性分配给 TaskID 属性。因此,在设计器中打开活动,转到属性并检查 TaskID(或类似的东西)。该属性由 SharePoint 自动设置,您可以在 ChildCompleted 事件中使用它。