Windows工作流自定义序列活动

本文关键字:活动 自定义 工作流 Windows | 更新日期: 2023-09-27 18:09:36

我正在使用Windows Workflow 4,我需要创建一个c#活动,基本上,从序列活动继承。我希望它看起来就像序列活动,所以用户可以从设计器拖放其他活动到它。但是,它在代码中的作用是不同的(也许我想以不同的顺序运行它们,或者在每一个之间做特殊的动作,这应该无关紧要)。

我该怎么做?我看到有人问过类似的问题,只有一个人给出了只适用于Windows Workflow 3的建议。在版本4中,序列活动至少不能被继承。

这似乎不是一个非常牵强的概念。Sequence活动是作为内置活动提供的。因此,它应该是可重复的,或者至少是可继承的,这似乎是合乎逻辑的,所以我可以有一个序列活动的自定义版本。

有人有什么想法吗?

Windows工作流自定义序列活动

System.Activities.Core.Presentation。"SequenceDesigner"设计器已在wf4中可用。然后可以组合Sequence活动并将此设计器用于外部类。

下面是一个工作示例:

using System.Activities;
using System.Activities.Statements;
using System.Collections.ObjectModel;
using System.ComponentModel;
[Designer("System.Activities.Core.Presentation.SequenceDesigner, System.Activities.Core.Presentation")]
public class MySeq : NativeActivity
{
    private Sequence innerSequence = new Sequence();
    [Browsable(false)]
    public Collection<Activity> Activities
    {
        get
        {
            return innerSequence.Activities;
        }
    }
    [Browsable(false)]
    public Collection<Variable> Variables
    {
        get
        {
            return innerSequence.Variables;
        }
    }
    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddImplementationChild(innerSequence);
    }
    protected override void Execute(NativeActivityContext context)
    {
        context.ScheduleActivity(innerSequence);
    }
}

这是将真实的行为转发给私有的innerSequence,这可能会使这段代码看起来毫无用处,但请注意,在Execute方法中,它给了我们在执行之前和之后做事情的机会。如果我们想提供自定义行为,我们必须实现它,而不是转发到内部私有活动。