WF4.0(3)----变量与参数
已经写了两篇关于WF4.0的博客,算是基础博客,如果是WF比较熟悉就直接跳过吧,如果你对工作流不是很熟悉,或者想了解一下基础的东西,本文还是比较适合你的。工作流中变量,参数,表达式属于数据模型中概念,变量表示存储区,参数表示流入和流出活动的数据,通过变量使用表达式可以给参数赋值.
变量
变量是数据的存储位置,变量被声明为工作流定义的一部分。变量在运行时获取值,并将这些值存储为工作流实例状态的一部分。变量定义指定了变量的类型,还可指定变量的名称。首先简单的看一个小例子,设置一个变量,给变量赋值,然后输出变量:
从工具箱拖一个Sequence,然后拖入一个Assign,最后拖入一个WriteLine:
同样的我们可以再后台自己写代码实现以上过程,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | //定义变量 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); |
变量在运行时的生存期与声明该变量的活动的生存期相同。活动完成后,其变量将被清除,并且无法再引用。特别说明一下,如果你给变量一个默认值或者希望变量时只读的,可以进行如下设置:
1 2 3 4 5 | Variable< string > vars = new Variable< string > { Default = "MyName" , Modifiers = VariableModifiers.ReadOnly }; |
参数
参数来定义数据流入流出活动的方式,每个参数都有特定的方向,In,Out,InOut;参数是WF的输出和输入接口,在同一个流程内,所有Activity共享一组参数.活动作者可使用强类型机制来公开该活动的参数。实现方法是声明 InArgument、OutArgument 和 InOutArgument类型的属性。简单的看一个Demo:
拖Sequence,设置参数argument1,argument2,argument3,赋值,输出:
后台调用,注意一下这里调用使用的WorkflowApplication而不是WorkflowInvoke,之后的文章会单独讲诉一下两者的区别:
1 2 3 4 5 | 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.定义一个HelloActivity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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.调用方式如下:
1 2 3 4 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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); |
这篇算是补发文章吧,基础文章还是慢慢写吧,前面的有些例子比较简单,对于没有用过的可能不是很熟悉,补发之后希望会好一点,文章很基础,高手可忽略,如果你觉得文章对你有所帮助,帮忙给个推荐吧,多谢~
出处:http://www.cnblogs.com/xiaofeixiang
说明:博客经个人辛苦努力所得,如有转载会特别申明,博客不求技惊四座,但求与有缘人分享个人学习知识,生活学习提高之用,博客所有权归本人和博客园所有,如有转载请在显著位置给出博文链接和作者姓名,否则本人将付诸法律。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述