对于.Net Workflow4,子活动,有Child,ImportedChild和ImplementationChild
实现子活动即 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.子活动 这些子活动通常由活动的使用者提供,例如Sequence的Activities集合就是这种情况。这些活动有权访问通过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这样描述:
导入的子活动是父活动不能直接安排的子活动。 相反,之后父活动可以使用此活动配置一些其他子活动。
暂时还不清楚它的用途