已经写了两篇关于WF4.0的博客,算是基础博客,若是是WF比较熟悉就直接跳过吧,若是你对工做流不是很熟悉,或者想了解一下基础的东西,本文仍是比较适合你的。工做流中变量,参数,表达式属于数据模型中概念,变量表示存储区,参数表示流入和流出活动的数据,经过变量使用表达式能够给参数赋值.
程序员
变量是数据的存储位置,变量被声明为工做流定义的一部分。变量在运行时获取值,并将这些值存储为工做流实例状态的一部分。变量定义指定了变量的类型,还可指定变量的名称。首先简单的看一个小例子,设置一个变量,给变量赋值,而后输出变量:app
从工具箱拖一个Sequence,而后拖入一个Assign,最后拖入一个WriteLine:ide
一样的咱们能够再后台本身写代码实现以上过程,代码以下:工具
//定义变量 Variable<string> vars = new Variable<string> { Name = "MyName", }; Sequence sequence = new Sequence() { //活动中维护了一个变量组,将变量放入变量组中 Variables = { vars }, Activities = { new Assign<string>{ To=vars, Value="中山郎" }, //输出变量 new WriteLine(){ Text=vars } } }; //调用活动 WorkflowInvoker.Invoke(sequence);
变量在运行时的生存期与声明该变量的活动的生存期相同。活动完成后,其变量将被清除,而且没法再引用。特别说明一下,若是你给变量一个默认值或者但愿变量时只读的,能够进行以下设置:this
Variable<string> vars = new Variable<string> { Default = "MyName", Modifiers = VariableModifiers.ReadOnly };
参数来定义数据流入流出活动的方式,每一个参数都有特定的方向,In,Out,InOut;参数是WF的输出和输入接口,在同一个流程内,全部Activity共享一组参数.活动做者可以使用强类型机制来公开该活动的参数。实现方法是声明 InArgument、OutArgument 和 InOutArgument类型的属性。简单的看一个Demo:spa
拖Sequence,设置参数argument1,argument2,argument3,赋值,输出:blog
后台调用,注意一下这里调用使用的WorkflowApplication而不是WorkflowInvoke,以后的文章会单独讲诉一下二者的区别:接口
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("argument1", 21); dic.Add("argument2", 87); WorkflowApplication application = new WorkflowApplication(new Argument(), dic); application.Run();
自定义活动中InArgument,OutArgument的使用:字符串
1.定义一个HelloActivityget
public sealed class HelloActivity : CodeActivity { // 定义一个字符串类型的活动输入参数 public InArgument<string> Text { get; set; } // 定义一个字符串类型的活动输出参数 public OutArgument<string> OutText { get; set; } protected override void Execute(CodeActivityContext context) { // 获取 Text 输入参数的运行时值(两种不一样取值的方式) string text = context.GetValue(this.Text); string value = Text.Get(context); context.SetValue(OutText, "FlyElephant"); Console.WriteLine("姓名:"+text); Console.WriteLine("姓名:"+value); } }
2.流程图中定义个变量outName,一个输出参数myValue,将outName赋值给HellActivity的OutText,myValue赋值给Text,流程图以下:
3.调用方式以下:
Dictionary<string, object> dic = new Dictionary<string, object>(); dic.Add("myValue", "Programer"); WorkflowApplication application = new WorkflowApplication(new In(), dic); application.Run();
经过以上小例子应该明白的就是InArgument能够接收参数没法传出,OutArgument无需传入能够直接传出;上面若是不是很清晰的话,继续看一个简单赋值自定义活动:
定义v1,v2,v3三个变量,而后将v1赋值给v2,v3:
Variable<string> v1 = new Variable<string>() { Default = "ASP.NET程序员" }; Variable<string> v2 = new Variable<string>(); Variable<string> v3 = new Variable<string>(); // 定义工做流 Activity wf = new Sequence { Variables = { v1, v2, v3 }, Activities = { //关键点,InArgument传入以后赋值给v1,OutArgument传出以后赋值给v2 new Assign<string>(){ To=new OutArgument<string>(v2), Value =new InArgument<string>(v1) }, new WriteLine() { Text = v2 }, new Assign<string>() { To = v3, Value = v2 }, new WriteLine() { Text = v3 } } }; WorkflowInvoker.Invoke(wf);
这篇算是补发文章吧,基础文章仍是慢慢写吧,前面的有些例子比较简单,对于没有用过的可能不是很熟悉,补发以后但愿会好一点,文章很基础,高手可忽略,若是你以为文章对你有所帮助,帮忙给个推荐吧,多谢~