第四个C#工作流实例--构建流程图工作流
2015-08-04 15:49
525 查看
新建一个Workflow Console Application,从工具箱中的FlowChart(流程图)节点下,将一个FlowChart活动拖拽到设计器中,在Properties窗口中将DisplayName属性值更改为容易记住的名字,注意:在FlowChart活动的右下角有一个缩放处理的图标,可以用来增大或缩小流程图设计器空间的尺寸,随着活动的增多,你将需要扩大这个尺寸。
![](http://s3.sinaimg.cn/middle/731c5eeegcba92d309302&690)
Start图标表示该流程图活动的入口,在本例中它是我们放置的整个工作流中的第一个活动,并且将在使用WorkflowInvoker或WorkflowApplication类执行工作流时被触发。你可以将这个图标拖动到设计器的任何位置,我建议留在左上角,以便流出更多的空间。
我们的目标是通过连接多个活动将它们组装在一起,通常在流程中要用到FlowDecision活动,我们将WriteLine活动拖拽到设计器上,将Display名称改为GetProductName,如果现在你将鼠标停在Start图标上,会发现四个方向都出现了对接标记,单击并按住对接标记,然后拖动到WriteLine活动,这样会在这两项中出现一条连接线,这意味着工作流执行的第一个活动是GetProductName。
![](http://s5.sinaimg.cn/middle/731c5eeegcba94e71c6c4&690)
我们添加了一个名为ProductName的无默认值的字符串类型的工作流参数,该参数通过自定义的Dictionary<>对象动态传入,最后将WirteLine活动的Text属性值为如下的代码语句:
“产品:”&ProductName 这个语句的意思等同于我们代码里面写的“产品:”+ProductName,因为工作流输入代码条件时使用的是VB的语法,所以要这样写
在设计器中再添加一个WriteLine活动,并连接到前一个WriteLine,在Text属性中硬编码字符串值“库存状态”,并将DisplayName属性改为GetProductInventory,并添加一个参数InventoryState
![](http://s12.sinaimg.cn/middle/731c5eeegcba9795bab0b&690)
使用InvokeMethod活动
现在我们要检查产品的库存情况,因此我们可以很好地使用InvokeMethod活动,现在我们再添加一个WriteLine修改DisplayName属性为:Pay Y or N 并与GetProductInventory连接
![](http://s1.sinaimg.cn/middle/731c5eeegcba99589d510&690)
选择InvokeMethod活动要配置的第一个属性为TargetType,它表示类的名称,我们要调用的静态成员就定义在该类中。选择浏览类型(Browse for Types)选项,找到System.Console类之后,单击OK.选择下面的MethodName属性设置为ReadLine,这个方法是通过键盘输入的字符串。
![](http://s8.sinaimg.cn/middle/731c5eeegcba9b73c4357&690)
我们需要一种方法来得到这个返回值,接下来就将介绍这个方法。添加一个名为YesOrNo的参数string类型,点击我们的Pay Y or N看右侧的属性窗口,里面有个Result来接收返回值。
![](http://s10.sinaimg.cn/middle/731c5eeegcba9ce744a29&690)
使用FlowDecision活动
它提供了两种行为,它是基于布尔类型的返回值判断真假,来决定执行那个行为,将活动拖拽到设计器上,并与Pay Y or No相连接。
点击Decision看到右侧属性,我们可以直接在里面输入YesOrNo.ToLower() = "y",注意vb语法判断只能用一个等于号,鼠标放在Decision可以看到,true和false两个箭头,我们拖拽两个Writeline一个连接true,表示可以加入购物车,一个连接false表示不能购买,显示到货通知。
![](http://s3.sinaimg.cn/middle/731c5eeegcba9f9eac632&690)
打开Program.cs
static void Main(string[] args)
{
Dictionary wlData = new Dictionary();
wlData.Add("ProductName", "小米手机青春版");
wlData.Add("InventoryState", "Yes,请输入是否可以购买 Y/N");
WorkflowInvoker.Invoke(new Workflow1(), wlData);
}
运行程序:输入Y,显示加入购物车
![](http://s2.sinaimg.cn/middle/731c5eeegcbaa0b9fef41&690)
输入:N,显示到货通知
![](http://s15.sinaimg.cn/middle/731c5eeegcbaa0f41865e&690)
Start图标表示该流程图活动的入口,在本例中它是我们放置的整个工作流中的第一个活动,并且将在使用WorkflowInvoker或WorkflowApplication类执行工作流时被触发。你可以将这个图标拖动到设计器的任何位置,我建议留在左上角,以便流出更多的空间。
我们的目标是通过连接多个活动将它们组装在一起,通常在流程中要用到FlowDecision活动,我们将WriteLine活动拖拽到设计器上,将Display名称改为GetProductName,如果现在你将鼠标停在Start图标上,会发现四个方向都出现了对接标记,单击并按住对接标记,然后拖动到WriteLine活动,这样会在这两项中出现一条连接线,这意味着工作流执行的第一个活动是GetProductName。
我们添加了一个名为ProductName的无默认值的字符串类型的工作流参数,该参数通过自定义的Dictionary<>对象动态传入,最后将WirteLine活动的Text属性值为如下的代码语句:
“产品:”&ProductName 这个语句的意思等同于我们代码里面写的“产品:”+ProductName,因为工作流输入代码条件时使用的是VB的语法,所以要这样写
在设计器中再添加一个WriteLine活动,并连接到前一个WriteLine,在Text属性中硬编码字符串值“库存状态”,并将DisplayName属性改为GetProductInventory,并添加一个参数InventoryState
使用InvokeMethod活动
现在我们要检查产品的库存情况,因此我们可以很好地使用InvokeMethod活动,现在我们再添加一个WriteLine修改DisplayName属性为:Pay Y or N 并与GetProductInventory连接
选择InvokeMethod活动要配置的第一个属性为TargetType,它表示类的名称,我们要调用的静态成员就定义在该类中。选择浏览类型(Browse for Types)选项,找到System.Console类之后,单击OK.选择下面的MethodName属性设置为ReadLine,这个方法是通过键盘输入的字符串。
我们需要一种方法来得到这个返回值,接下来就将介绍这个方法。添加一个名为YesOrNo的参数string类型,点击我们的Pay Y or N看右侧的属性窗口,里面有个Result来接收返回值。
使用FlowDecision活动
它提供了两种行为,它是基于布尔类型的返回值判断真假,来决定执行那个行为,将活动拖拽到设计器上,并与Pay Y or No相连接。
点击Decision看到右侧属性,我们可以直接在里面输入YesOrNo.ToLower() = "y",注意vb语法判断只能用一个等于号,鼠标放在Decision可以看到,true和false两个箭头,我们拖拽两个Writeline一个连接true,表示可以加入购物车,一个连接false表示不能购买,显示到货通知。
打开Program.cs
static void Main(string[] args)
{
Dictionary wlData = new Dictionary();
wlData.Add("ProductName", "小米手机青春版");
wlData.Add("InventoryState", "Yes,请输入是否可以购买 Y/N");
WorkflowInvoker.Invoke(new Workflow1(), wlData);
}
运行程序:输入Y,显示加入购物车
输入:N,显示到货通知
相关文章推荐
- 第一个C#工作流
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_8.1实例构造器和类A
- c#之webapi
- C#的零星基础
- 2、C#面向对象:封装、继承、多态、String、集合、文件(上)
- C#中多屏现实--Screen类的使用
- C#中多屏现实--Screen类的使用
- C#动态操作DataTable(新增行、列、查询行、列等)
- c# DataGridView控件使用
- WPF C# Button 加载图片,背景图片
- C#笔记 使用杂项
- C#嵌套类的使用方法及特性
- C# 使用ffmpeg.exe进行音频转换完整demo
- C#实现 Linq 序列的Distinct—— IEnumerable<T>.Distinct<T>()——IEqualityComparer
- c# 事件机制
- C# 使用TimeSpan计算两个时间差
- C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*
- VS2010中使用C#实现向EXCEL文档中写入数据
- c# 遍历控件
- C# 中的委托和事件