已经写了两篇关于WF4.0的博客,算是基础博客,如果是WF比较熟悉就直接跳过吧,如果你对工作流不是很熟悉,或者想了解一下基础的东西,本文还是比较适合你的。工作流中变量,参数,表达式属于数据模型中概念,变量表示存储区,参数表示流入和流出活动的数据,通过变量使用表达式可以给参数赋值.

变量

变量是数据的存储位置,变量被声明为工作流定义的一部分。变量在运行时获取值,并将这些值存储为工作流实例状态的一部分。变量定义指定了变量的类型,还可指定变量的名称。首先简单的看一个小例子,设置一个变量,给变量赋值,然后输出变量:

从工具箱拖一个Sequence,然后拖入一个Assign,最后拖入一个WriteLine:

同样的我们可以再后台自己写代码实现以上过程,代码如下:

            //定义变量
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);

变量在运行时的生存期与声明该变量的活动的生存期相同。活动完成后,其变量将被清除,并且无法再引用。特别说明一下,如果你给变量一个默认值或者希望变量时只读的,可以进行如下设置:

             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,之后的文章会单独讲诉一下两者的区别:

            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

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

  这篇算是补发文章吧,基础文章还是慢慢写吧,前面的有些例子比较简单,对于没有用过的可能不是很熟悉,补发之后希望会好一点,文章很基础,高手可忽略,如果你觉得文章对你有所帮助,帮忙给个推荐吧,多谢~

WF4.0(3)----变量与参数的更多相关文章

  1. 【转】WF4.0 (基础篇)

    转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter  ——  兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...

  2. WF4.0(2)----设计工作流

    自从做了程序员,发现自己长胖了,而且自己的身体抵抗力也出了问题,最近身体不适,公司工作任务最近也很赶,上次写了WF4.0的简介,这次就工作中工作流设计的几种方式稍微总结一下.设计工作流包括四种方式:流 ...

  3. 15SpringMvc_在业务控制方法中写入模型变量收集参数,且使用@InitBind来解决字符串转日期类型

    之前第12篇文章中提到过在业务控制方法中写入普通变量收集参数的方式,也提到了这种凡方式的弊端(参数很多怎么办),所以这篇文章讲的是在业务控制方法中写入模型变量来收集参数.本文的案例实现的功能是,在注册 ...

  4. WF4.0 基础篇 (一)开始使用WF

    来源:https://www.cnblogs.com/caosenianhuan/p/WF.html 最近公司要重新上线一套新的CRM系统,要重整老系统里的业务流模块,团队讨论已微软的workflow ...

  5. SSIS 变量、参数和表达式

    动态包对象包括变量,参数和表达式.变量主要为包提供一种对象之间相互通信的方法,变量的值是可以更新的.而参数不同于变量,参数的值在包中是不能修改的,只能通过外部来设置参数.表达式可以引用变量.参数.常量 ...

  6. WF4.0(1)---WorkFlow简介

    编程编的越久就发现自己以前的语文真的没学好,写个随笔取个名字都需要思考半天,以前工作的时候只是听说过工作流,知道的范围仅限于工作流在OA审批流程中用的比较多,现在自己实实在在的用工作流也做过不少项目, ...

  7. LoadRunner变量到参数的互换

    作者QQ:764714258,转载请说明出处,阅读此文需要良好的C基础 LoadRunner中,web性能测试使用的脚步是C语言编写的.C语言中有变量的概念,LoadRunner工具中带有参数这个概念 ...

  8. 基于WF4.0的公文管理系统

    系统功能说明 公文管理 通过定义公文的基本信息,并将它按照工作流的定义流转实现公文的管理.包含以下功能: )公文创建:用户能够将格式化文本作为公文上传到系统中,并选择工作流启动流程. )公文审批:具有 ...

  9. C#4.0新特性:可选参数,命名参数,Dynamic

    1.可选参数 可以为方法的参数设置一个默认值,如下: class Program { static void Main(string[] args) { Show(); Show("cary ...

随机推荐

  1. [CodeChef - STREETTA] The Street 李超线段树

    大致题意: 给出两个序列A,B,A初始为负无穷,B初始为0,有三种操作 1.在A上区间[u,v]上加一个等差数列,取与原本A序列的最大值. 2.在B上区间[u,v]上加一个等差数列. 3.给出一个点X ...

  2. 为什么Java7开始在数字中使用下划线

    JDK1.7的发布已经介绍了一些有用的特征,尽管大部分都是一些语法糖,但仍然极大地提高了代码的可读性和质量.其中的一个特征是介绍字面常量数字的下划线.从Java7开始,你就可以在你的Java代码里把长 ...

  3. Linux-数据库4

    存储引擎 什么是存储引擎? mysql中建的库是文件夹,建的表是文件.文件有不同的类型,数据库中的表也有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了 ...

  4. 深入理解ajax系列第八篇

    前面的话 在以前,网站的用户与后端交互的主要方式是通过HTML表单的使用.表单的引入在1993年,由于其简单性和易用性,直到电子商务出现之前一直保持着重要位置.理解表单提交,对于更深入地理解ajax是 ...

  5. 用于兼容浏览器的js写法

    用于引用的源文件代码: var Common = { getEvent: function() {//ie/ff if (document.all) { return window.event; } ...

  6. SPOJ6717 Two Paths 树形dp

    首先有朴素的\(O(n^2)\)想法 首先枚举断边,之后对于断边之后的两棵子树求出直径 考虑优化这个朴素的想法 考虑换根\(dp\) 具体而言,首先求出\(f[i], fs[i]\)表示\(i\)号点 ...

  7. python开发_tkinter_菜单选项中英文切换_菜单选项不可用操作_博主推荐

    我使用的python版本为:3.3.2 如果你对python中tkinter模块的菜单操作不是很了解,你可以看看: python开发_tkinter_窗口控件_自己制作的Python IDEL_博主推 ...

  8. URAL 1873. GOV Chronicles

    唔 神题一道 大家感受一下 1873. GOV Chronicles Time limit: 0.5 secondMemory limit: 64 MB A chilly autumn night. ...

  9. 读书笔记_Effective_C++_条款三十四:区分接口继承和实现继承

    这个条款书上内容说的篇幅比较多,但其实思想并不复杂.只要能理解三句话即可,第一句话是:纯虚函数只继承接口:第二句话是:虚函数既继承接口,也提供了一份默认实现:第三句话是:普通函数既继承接口,也强制继承 ...

  10. The YubiKey -- HOW IT WORKS

    A single YubiKey has multiple functions for protecting access to your email, your apps and your phys ...