zoukankan      html  css  js  c++  java
  • WF4.0 基础篇 (八) 控制流Activity

    本节主要介绍IF, Switch<T>, While, DoWhile, ForEach<T> 的使用.

     

    本文例子下载:

    https://files.cnblogs.com/foundation/controlActivitySample.rar

    本文例子说明

    控制流Activity

    IF 条件

    类名

    System.Activities.Statements.If

    文件

    System.Activities.dll

    结构说明

    继承 NativeActivity

    是一个 sealed类

    override 了 [CacheMetadata方法] 与 [Execute方法]

    [Condition]属性的类型为[ System.Activities.InArgument<bool> ],可以接受一个结果为[bool]的表达式

    [Then] 属性 的类型为[System.Activities.Activity]

    [Else] 属性 的类型为[System.Activities.Activity]

    功能说明

    [Then] 属性 Activity类型,如果[Condition]的表达式结果为[True],执行[Then]否则执行[Else]

     

    例:

    1. 在流程中添加string变量[myVariable]

    2. 添加[Assign]为变量[myVariable]赋值"wxd"

    3. 添加[If],[Condition]的表达式为[ myVariable = "wxd" ]

    4. 在[If]的[Then]中添加[WriteLine]打印[ "Then:" + myVariable ]

    在[If]的[Else]中添加[WriteLine]打印[ "Else:" + myVariable ]

     

    流程

    宿主

    WorkflowInvoker.Invoke(new IfWorkflow());

    结果

     

     

    Switch<T> 分支

    类名

    System.Activities.Statements.Switch<T>

    文件

    System.Activities.dll

    结构说明

    继承 NativeActivity

    是一个 sealed类

    override 了 [CacheMetadata方法] 与 [Execute方法]

    [Expression]属性的类型为[System.Activities.InArgument<T>],是case的 表达式

    [Default] 属性 的类型为[System.Activities.Activity]

    [Cases] 属性 的类型为[IDictionary<T, Activity>]

    功能说明

    在添加[Switch<T>]时,需要为case 表达式 [Expression属性] 指定类型

     

    [Switch]会比效[Expression]的值与[Case集合]中每个分支值,如果有相等的就执行该分支,如果没的相等的就执行[Default]

     

    [Switch]会自动检查[Case集合]中是否有相同的分支条件

     

    例:

    1. 在流程中添加string变量[myVariable]

    2. 添加[Assign]为变量[myVariable]赋值"wxwinter"

    3. 添加[Switch],[Expression]的表达式类型为[string],内容为[ myVariable]

    4. 在[Default]中添加[WriteLine]打印["Case Default :" + myVariable ]

    添加[case],值为"wxd",在新添加的[case] 中添加[WriteLine]打印["Case wxd :" + myVariable]

    添加[case],值为"lzm",在新添加的[case] 中添加[WriteLine]打印["Case lzm :" + myVariable]

     

    流程

    宿主

     

    WorkflowInvoker.Invoke(new SwitchWorkflow());

    结果

     

     

    While 循环

    类名

    System.Activities.Statements.While

    文件

    System.Activities.dll

    结构说明

    继承 NativeActivity

    是一个 sealed类

    override 了 [CacheMetadata方法] 与 [Execute方法]

    [Variables] 属性 的类型为[Collection<Variable>]

    [Condition]属性 的类型为[Activity<bool>],可以接受一个结果为[bool]的表达式

    [Body] 属性 的类型为[System.Activities.Activity]

    功能说明

    [While]中可以定义变量

    当[Condition]条件为真时会执行[Body]中的内容

     

     

    例:

    1. 在流程中添加int变量[myVariable]

    2. 添加[While],[Condition]的表达式为[myVariable<=10]

    3. 在[While]的[Body]中添加[Assign],为变量[myVariable]赋值为 [myVariable + 1]

    添加[WriteLine]打印变量[myVariable]的值

     

    流程

    宿主

     

    WorkflowInvoker.Invoke(new WhileWorkflow());

    结果

     

    DoWhile 循环

    类名

    System.Activities.Statements.DoWhile

    文件

    System.Activities.dll

    结构说明

    继承 NativeActivity

    是一个 sealed类

    override 了 [CacheMetadata方法] 与 [Execute方法]

    [Variables] 属性 的类型为[Collection<Variable>]

    [Condition]属性 的类型为[Activity<bool>],可以接受一个结果为[bool]的表达式

    [Body] 属性 的类型为[System.Activities.Activity]

    功能说明

    [DoWhile]中可以定义变量

    当[Condition]条件为真时会执行[Body]中的内容, 当[Condition]条件为假时会执行[Body]中的内容一次

     

     

     

    例:

    1. 添加[DoWhile],[Condition]的表达式为[False]

    2. 在[DoWhile]的[Body] 添加[WriteLine]打印"wxwinter"

     

    流程

    宿主

     

    WorkflowInvoker.Invoke(new DoWhileWorkflow());

    结果

     

    ForEach<T> 循环

    类名

    System.Activities.Statements.ForEach<T>

    文件

    System.Activities.dll

    结构说明

    继承 NativeActivity

    是一个 sealed类

    override 了 [CacheMetadata方法] 与 [Execute方法]

    [Body] 属性 的类型为[ActivityAction<T>]

    [Values] 属性 的类型为[ InArgument<IEnumerable<T>> ]

    功能说明

    [Values] 属性为要循环的集合

    [TypeArgument] 为要循环集合的的类型

    [item]为循环时的临时变量,可在[Body]中被访问

     

     

    例:

    1. 创建一code activity 名为[CollectionActivity],

    具有[Out]参数,类型为List<string>的参数[myOutCollection]

    2. 在流程中添加List<string>变量[myCollection]

    3. 在流程中添加[CollectionActivity],将[CollectionActivity.myOutCollection]参数绑定到 [myCollection] 变量

    4. 在流程中添加[ForEach<T>],[TypeArgument]属性指定[string]

    [Values] 属性绑定到 [myCollection] 变量

    在[Body]中添加[writeLine],打印[item]

     

    CollectionActivity

    public sealed class CollectionActivity : CodeActivity

    {

    public OutArgument<System.Collections.Generic.List<string>> myOutCollection { get; set; }

    protected override void Execute(CodeActivityContext context)

    {

    System.Collections.Generic.List<string> list = new List<string>();

    list.Add("wxd");

    list.Add("lzm");

    list.Add("wxwinter");

     

    context.SetValue (this.myOutCollection,list );

    }

    }

    流程

    宿主

     

    WorkflowInvoker.Invoke(new ForEachWorkflow());

    结果

     

     

     

  • 相关阅读:
    软件开发规范
    Fail2ban + firewalld 防护doss攻击
    SourceTree&Git部分名词解释
    训子
    一个网络下,手机如何访问本地网址
    tempalte.js的一般用法
    template.js的介绍
    获取URL中的参数
    js判断苹果和安卓端或者wp端
    HTML5与WebGL编程
  • 原文地址:https://www.cnblogs.com/foundation/p/1612470.html
Copyright © 2011-2022 走看看