获取子活动子树

时间:2012-09-21 20:01:06

标签: workflow-foundation-4 get-childitem custom-activity

我正在将传统的工作流程系统转换为WF4,因此我必须跳过几个环节,使其与我们的应用程序的api相匹配。所以我会尽量让问题探索尽可能简单。 :)

我有一个自定义活动,它将序列作为参数然后执行它。在执行它之前,自定义活动需要遍历序列(以及它的分支等)寻找特定类型的子活动 - 然后它会对这些特定的子活动进行一些报告。

我知道当Constraint可以使用GetChildSubtree活动时,可以在验证时间内遍历活动的子子树,但是这不允许我在运行时访问列表。我也知道也可以使用主机应用程序中的ActivityValidationServices执行类似的调用,但这对我的场景也不起作用。

那么从自定义活动的执行方法中获取子子树中的活动列表的最佳方法是什么?

提前致谢!

马库斯。

1 个答案:

答案 0 :(得分:2)

您可能需要查看WorkflowInspectionServices类,其中提供了处理活动树的运行时元数据的方法。特别是GetActivities方法。

GetActivities返回活动的所有直接子级,包括活动,委托处理程序,变量默认值和参数表达式。您现在可以编写一个扩展方法来返回所有活动,包括内部分支:

public static IEnumerable<Activity> GetInnerActivities(this Activity activity)
{
    var children = WorkflowInspectionServices.GetActivities(activity);

    foreach (var child in children)
    {
        children = children.Concat(child.GetChildren());
    }

    return children;
}

现在获取指定类型的所有活动的内部活动:

activity.GetInnerActivities().OfType<MySpecificType>();