Workflow 如何编写自定义工作流4代码活动,其中包括;人体模块;?

Workflow 如何编写自定义工作流4代码活动,其中包括;人体模块;?,workflow,.net-4.0,workflow-foundation-4,workflow-activity,Workflow,.net 4.0,Workflow Foundation 4,Workflow Activity,这可能吗?我知道这是针对MS的,因为他们有WF活动包,但我不确定它是如何完成的。如果没有太多麻烦和/或耗时的话,最好能让带有主体块的活动插入其他活动、按钮等。您需要从NativeActivity开始,而不是CodeActivity。NativeActivity允许您通过其执行上下文安排子活动。NativeActivity没有模板,您只需创建一个类并从NativeActivity派生即可。如果您遵循一些规则,就很容易了。下面是一个有孩子的本土活动的例子: [Designer(typeof(MyAc

这可能吗?我知道这是针对MS的,因为他们有WF活动包,但我不确定它是如何完成的。如果没有太多麻烦和/或耗时的话,最好能让带有主体块的活动插入其他活动、按钮等。

您需要从NativeActivity开始,而不是CodeActivity。NativeActivity允许您通过其执行上下文安排子活动。NativeActivity没有模板,您只需创建一个类并从NativeActivity派生即可。

如果您遵循一些规则,就很容易了。下面是一个有孩子的本土活动的例子:

[Designer(typeof(MyActivityDesigner)), ContentProperty("Child")]
public sealed class MyActivity : 
    NativeActivity, IActivityTemplateFactory
{
    // this "activity delegate" holds our child activity
    public ActivityAction Child { get; set; }

    // may be necessary to do this
    protected override void 
        CacheMetadata(NativeActivityMetadata metadata)
    {
        metadata.AddDelegate(Child);
    }

    protected override void 
        Execute(NativeActivityContext context)
    {
        // do some work here, then
        context.ScheduleAction(Child);
    }

    // better to use a template factory than a constructor to do this!
    Activity IActivityTemplateFactory
        .Create(System.Windows.DependencyObject target)
    {
        return new MyActivity
        {
            // HAVE to have this set, or it fails in the designer!
            Child = new ActivityAction()
        };
    }
}
注意:我们使用活动委托类型来容纳孩子。其次,我们实现IActivityTemplateFactory来为设计器配置我们的活动。这样做总比在构造函数中设置好/更稳定。我们将绑定到委托的一个属性,因此我们必须设置一个实例;否则绑定将失败

当我们执行时,您所要做的就是在适当的时候安排您的孩子并返回。当然,你不应该挡住

然后,在设计器中,您将绑定到如下子对象:

<sap:WorkflowItemPresenter
    HintText="Add children here!"
    Item="{Binding Path=ModelItem.Child.Handler}" />


布鲁斯·布科维奇(Bruce Bukovics)的.Net 4书中的Pro WF:Windows工作流也有很多例子。你可能想看看。

谢谢莫里斯。那么NativeActivity允许我创建在VS工作流设计器上显示执行主体的活动?我希望能够编写像sequence、parallel、while、foreach等具有执行块的活动,在这些块中,我的活动的用户可以在我的活动中删除其他活动。对此有何输入?你没有真正回答我问题的实际上下文。请查看Matt的这篇博文,这篇博文听起来很像你在寻找的内容:你能告诉我为了使用Designer属性而使用的名称空间吗?为了将来的参考,只需在MSDN中搜索“DesignerAttribute”或任何你正在寻找的内容。它将告诉您它所在的程序集,在本例中是System.ComponentModel感谢dmelinosky,我刚刚拿起它,我正在深入研究它。对于任何一个从WF或WF4开始的人来说,一定要拿起那本书,它非常棒。