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);

 

 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/3978284.html,如需转载请自行联系原作者

相关文章
|
9月前
|
SQL 负载均衡 数据可视化
第六章:参数和变量
第六章:参数和变量
470 1
|
1月前
|
Python
创建自定义函数 is_number() 方法来判
创建自定义函数 is_number() 方法来判
|
1月前
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
05-python之函数-函数的定义/函数的参数/函数返回值/函数说明文档/函数的嵌套使用/函数变量的作用域
C4.
|
1月前
|
Python
Phython定义函数
Phython定义函数
C4.
9 0
|
1月前
register定义变量
register定义变量。
16 0
|
6月前
|
Go
go 将函数 当做参数传递 实现 不同类型数据求和
go 将函数 当做参数传递 实现 不同类型数据求和
41 1
|
8月前
|
Python
输入函数以及eval函数的用法,获取变量的数据类型
输入函数以及eval函数的用法,获取变量的数据类型
|
10月前
|
Java 数据安全/隐私保护
java实现请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,使c1、c2、c3、c4、c5变为’G’、’l’、’m’、’r’、’e
java实现请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,使c1、c2、c3、c4、c5变为’G’、’l’、’m’、’r’、’e
|
Shell 索引
shell脚本变量详解(自定义变量、环境变量、变量赋值、变量运算、变量内容替换)
shell变量 shell变量是指用一个特定的字符串去表示不固定的内容 1.变量的类型 1.1自定义变量 一般情况下不怎么使用环境变量,如果需要在其他文件中引入某个文件的变量则在脚本最开始的位置使用source 或者. 执行下该脚本即可
2104 0
shell脚本变量详解(自定义变量、环境变量、变量赋值、变量运算、变量内容替换)
|
Python
【Python零基础入门篇 · 12】:函数的定义和作用、函数参数、函数嵌套、枚举函数enumerate
【Python零基础入门篇 · 12】:函数的定义和作用、函数参数、函数嵌套、枚举函数enumerate
【Python零基础入门篇 · 12】:函数的定义和作用、函数参数、函数嵌套、枚举函数enumerate

热门文章

最新文章