【问题标题】:Get Child Activity Subtree获取子活动子树
【发布时间】:2012-09-21 20:01:06
【问题描述】:

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

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

我知道当约束可以使用 GetChildSubtree 活动时,可以在验证期间遍历活动的子子树,但这并不能让我在运行时访问列表。我也知道也可以使用宿主应用程序中的 ActivityValidationServices 执行类似的调用,但这也不适用于我的场景。

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

提前致谢!

马库斯。

【问题讨论】:

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


    【解决方案1】:

    您可能想看看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的内部activity:

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

    【讨论】:

    • 是的。这样就可以了。非常感谢 Jota。
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2012-10-29
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多