关于子活动

浏览:1464 发布日期:2022-01-06 10:38:57

关于子活动

对于.Net Workflow4,子活动,有Child,ImportedChildImplementationChild

  1. 实现子活动即 ImplementationChild,表示的是要执行的程序逻辑,它可以访问实现变量,父活动可直接安排此活动,并且子活动可以直接访问实现变量(ImplementationVariable

下面是实现子活动的例子:

// 将WriteLine添加为实现子活动,并将ContentVariable绑定到WriteLine的Text属性中
// 在Execution方法中设置ContentVariable的值,WriteLine可以反映此变化
public sealed class BxTest2 : NativeActivity
{
    [RequiredArgument]
    public InArgument<string> Content { get; set; }

    private Variable<string> ContentVariable { get; set; }

    public WriteLine _writeLine;

    public BxTest2()
    {
        this.ContentVariable = new Variable<string>();
        this._writeLine = new WriteLine
        {
            Text = new InArgument<string>(this.ContentVariable)
        };
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);
        metadata.AddImplementationVariable(this.ContentVariable);
        metadata.AddImplementationChild(this._writeLine);
    }

    protected override void Execute(NativeActivityContext context)
    {
        string contentStr = this.Content.Get(context);
        Console.WriteLine("content: {0}#", contentStr);
        context.SetValue(this.ContentVariable, contentStr);
        context.ScheduleActivity(this._writeLine);
    }
}

2.子活动 这些子活动通常由活动的使用者提供,例如SequenceActivities集合就是这种情况。这些活动有权访问通过AddVariable添加的变量。

下面是一个例子:

// 此示例演示 AddChild,并使用Variable变量, 并且子活动可以使用这些变量,但是父活动是不可以使用的
public class BxTest3 : NativeActivity
{
    [RequiredArgument]
    public InArgument<string> Content { get; set; }

    public WriteLine _writeLine;

    private Variable<string> contentVariable;

    public BxTest3()
    {
        this.contentVariable = new Variable<string>("contentVar", "java");
        this._writeLine = new WriteLine
        {
            Text = new InArgument<string>(this.contentVariable)
        };
    }

    protected override void CacheMetadata(NativeActivityMetadata metadata)
    {
        //base.CacheMetadata(metadata);

        metadata.AddVariable(this.contentVariable);

        RuntimeArgument argument = new RuntimeArgument("Content", typeof(string), ArgumentDirection.In);
        metadata.Bind(this.Content, argument);
        metadata.AddArgument(argument);

        metadata.AddChild(this._writeLine);
    }

    protected override void Execute(NativeActivityContext context)
    {
        string contentStr = this.Content.Get(context);
        Console.WriteLine("content: {0}#", contentStr);

        // this.contentVariable是普通变量,活动仅可使用实现变量,
        // 所以这句代码将baocuo
        //context.SetValue(this.contentVariable, contentStr);

        context.ScheduleActivity(this._writeLine);
    }
}

3.导入的子活动,msdn这样描述:

导入的子活动是父活动不能直接安排的子活动。 相反,之后父活动可以使用此活动配置一些其他子活动。

暂时还不清楚它的用途