已经写了两篇关于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. iuap

    2017.12 用友今年着力点往云平台发展,是时候整理一下思路 第一:iuap 第二:Linux 第三:财务会计业务入门 第四:NC节点视频教程--财务模块 2019年3月4日 all in iuap ...

  2. The file will have its original line endings in your working directory.

    在空仓库的情况下,add,出现一下问题 The file will have its original line endings in your working directory. 当报这个警告时是 ...

  3. Mermaid 学习

    基础 在 VS code 中安装插件 Markdown Preview Mermaid Support,则便可支持 Mermaid 流程图 flowchart graph LR; A-->B; ...

  4. java-Excel导出中的坑

    在Excel导出过程中,若遇到合并单元格样式只有第一行合并,而下面要合并的行没有边框显示. 一般问题出在将单元格样式设置与合并单元格放在同一个循环中导致. 以下为一个完整版的demo以供参考 定义边框 ...

  5. poj2676(数独)

    也是一个简单剪枝的dfs.记录所有为0的位置,依次填写,当发现某个空格可选的填写数字已经没有时,说明该支路无效,剪掉. 不算是一个难题吧,但是还是花了不少时间,问题主要出在细节上,行列坐标反了.3乘3 ...

  6. 内容播放colorbox

    1.需要的js (1)jquery (2)colorbox (http://www.jacklmoore.com/colorbox/ 下载文件夹,其中有js.css文件) //加载的时候注意文件的路径 ...

  7. luoguP4491 [HAOI2018]染色 广义容斥原理 + FFT

    非常明显的摆了一个NTT模数.... 题目中求恰好\(k\),那么考虑求至少\(k\) 记\(g(k)\)表示至少\(k\)中颜色出现了恰好\(S\)次 那么,\[g(k) = \binom{M}{k ...

  8. 浅析SDWebImage

    浅析SDWebImage 在日常的开发过程中,如果去优雅的访问网络的图片并去管理每个工程必须要面对的问题,如果想要在工程里面提供易用.简洁.方便管理的解决方案还是很有挑战的,毕竟还要兼顾图片文件的缓存 ...

  9. Mysql 千万级快速查询|分页方案

    1.简单的 直接查主键id SELECT id FROM tblist WHERE LIMIT 500000,10 2对于有where 条件,又想走索引用limit的,必须创建一个索引,将where  ...

  10. Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate

    C. Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standa ...