对于.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这样描述:
导入的子活动是父活动不能直接安排的子活动。 相反,之后父活动可以使用此活动配置一些其他子活动。
暂时还不清楚它的用途