——SequenceWorkflowActivity
活动是Windows Worklow的基本组成块,准确的说,顺序工作流本身就是一个活动-SequentialWorkflowActivity.SequentialWorkflowActivity类继承自SequenceActivity类, SequenceActivity类又继承自CompositeActivity类.这些超类规定了顺序工作流的行为和特征.如下面的类图:

继承自CompositeActivity类的活动可以包含一个或者多个子活动。顺序工作流通常包含多个子活动,而且子活动也可以是CompositeActivity。
继承自SequenceActivity类的活动可以向前遍历其子活动,SequenceActivity一旦执行完一个子活动就跳转至下一个子活动,当最后一个子活动执行完毕后结束。SequenceActivity没有跳转至任意活动的功能。
WhileActivity继承自CompositeActivity,但是没有继承SequenceActivity,因此可以包含多个子活动,但是只能执行一个子活动。想要在WhileActivity中执行多个Activtiy的话,可以将这些Activity放在Sequence Activity内部,然后把Sequence Activity放在WhileActivity内部。
有一类基本活动库的Activity是基于Condition,这些Activity包括:While,IfElse,ConditionedActivityGroup,Replicator。
这些Actovoty有一个Condition属性,Condition属性包含CodeCondition和Declarative Rule ConditionReference两个选项,它们表示两种描述条件的技术,前者需要一个返回Boolen值得方法,后者则使用规则,Declarative Rule ConditionReference,规则条件(Rule Condition)是一个被命名的表达式,这个表达式返回True或者False,而且定义在外部文件(.rules)中。对于Code Condition,在WF中,代码通过对ConditionalEventArgs参数的Results属性进行设置True或者False来控制条件。
——CodActivity
重要属性:ExecuteCode事件;
不提倡CodeActivity大量使用,而是将其封装在自定义活动中,自定义活动可以有自己的属性,而且可以重复使用。
——IfElseActivity、WhileActivity、SequenceActivity
重要属性:Condition;
对于Condition的设置有两种情况:
1、Code Condition:用编程来实现其判断条件,在Condition的子属性里需要填写一个方法名称,在该方法种进行判断和赋值。通过对e.Result赋值为true或者false来确定时否满足该条件。
2、Declarative Rule Condition:设计器会将其以XML格式保存到一个外部的.rule文件中。可以从属性面板中启动规则条件编辑器(Rule Condition Editor),然后输入相应的表达式。举例:若工作流中有一个整型属性K,可以输入这样的表达式this.K>0。
IfElseActivity对于每个分支都有一个Condition属性,并且从左向右判断子分支的条件,并且执行第一个满足条件的分支,如果所有的分支都不满足条件,则都不会被执行,在这种情况下,如果最后一个分支没有设置条件,它将会被执行。
WhileActivity的Condition属性与IfElseActivity的设置相同。WhileActivity每次循环之前判断其条件是否满足,满足则一直执行。
WhileActivity只能拥有一个子活动,我们可以将多个子活动放在一个SequenceActivity文件中,然后再放入WhileActivity
——SuspendActivity
重要属性:Error
挂起工作流,当工作流遇到错误需要手动干预时,使用SuspendActivity。
宿主可以订阅WorkflowRuntime的WorkflowSuspended事件,并通过其事件参数(WorkflowSuspendedEventArgs类型)Error属性获取错误信息。该事件中可以使用e.WorkflowInstance.Resume()方法来使工作流恢复执行,也可以使用e.WorkflowInstance.Terminate(e.Error)来提前结束。
——TerminateActivity
重要属性:Error
终止工作流,当工作流执行到不可能继续执行,不可能恢复的情况下使用。
宿主可以订阅WorkflowRuntime的WorkflowTerminate事件,并通过其事件的参数(WorkflowTerminatedEventArgs类型)Exception属性获取错误信息。
如果想要指定引发WorkflowTerminated事件的异常类型,应该使用Throw活动.Throw活动可以使工作流捕捉到异常并继续执行,而Terminate活动则总是抛出异常并终止工作流。
——ThrowActivity
重要属性:
Fault:Fault属性可以引用要抛出的异常类型.我们可以绑定Fault属性到工作流的域或其它活动的属性.
FaultType:FaultType属性来描述并约束待抛出异常的类型.如果FaultType没有被设置,Throw活动可能抛出任何类型的异常
抛出异常在其他Code中都可以做,但是ThrowActivity不仅可以抛出异常还可以在工作流模型中构造一个显式的异常块。
如果异常没有被处理并且传播到工作流之外,那么WF Runtime将捕获它,接着终止工作流并抛出WorkflowTerminated事件.Runtime会在WorkflowTerminated事件的参数中包含异常的信息.
——InvokeWorkflowActivity
重要属性:TargetWorkflow :引用想要执行的工作流类型。
Invoking:事件、在该事件内可以编写代码初始化参数。
用途:异步的执行另一个工作流;
我们可以选择当前项目内部的工作流类型或者引用程序集的工作流类型,设置了目标工作流类型之后,属性面板会列出目标工作流类型的参数,可以将其与当前工作流的域或属性绑定。在开始第二个工作流之前,InvokeWorkflowActivity将触发Invoking事件,可以在此事件内编写代码初始化参数。
InvokeWorkflow活动允许我们独立的执行一个工作流.举例来说,一个软件bug跟踪工作流在每次新的build到达时都可能要进行好几中不同类型的测试,而其中每一种测试都可能被设计为一个工作流。
——ParallelActivity
用途:允许多个Activity并行执行。
在工作流内部只有一个线程执行,所以ParallelActivity并没有采用多线程机制,并不是真正意义上的并行。对分支的执行需要其它Activity,或者等待相应的事件。当所有的分支都执行完毕,ParallelActivity的执行才算结束。
——DelayActivity
重要属性:TimeOutDuration:值为TimeSpan类型,表示需要等待的时间。可以在设计器中初始化这个属性,也可以以编程的方式在InitialiazeTimeoutDuration事件中更改此属性的值,如例:
InitialiaeTimeoutDuration:事件名称,可以设置TimeoutDuration的值。
用途:初始化一个计时器并等待其到期,可以用来模拟超时。经常用在ListenActivity内部。
——ListenActivity
与ParallelActivity一样包含多个分支,不同的是ListenActivity只执行一个分支,ListenActivity的分支是EventDrivenActivity。当一个分支最先执行完毕时,ListenActivity会执行相应的分支事件并取消其它分支的执行。
EventDrivenActivity的特点是必须以事件的到达为其开始的条件(即其第一个子活动必须实现IEventActivity接口)
——EventHandlingScopeActivity
包含一个主要子活动,错误处理程序和取消处理程序。并且可以包含多个等待事件的分支,可以用右键单击查看不同的事件处理程序,在其主要子活动(默认视图显式的内容)未执行完之前会一直监听其余的事件,这一点是EventHandling与Listen的主要区别。
——SynchronizationScopeActivity
——ReplicatorActivity
——FaultHandlersActivity
重要属性:FaultType,指定将要捕获的异常类型,若设置为System.Exception,则可以捕获所有的异常。
Fault:可以将异常绑定到工作流的域或者属性中。
类似于编程中的Try...Catch...语句。
使用错误处理程序来捕捉这些异常并尝试做一些“修复”工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的数据被修复,工作流中对可能发生的错误进行处理,如果工作流抛出了一个异常,而我们又不知道如何去处理,那么只能等Runtime终止工作流。
——TransactionSopeActivity
——CompensatableTransactionScopeActivity
——CompensateActivity
——ConditionedActivityGroup
——PolicyActivity
与WebService相关的Activity
——InvokeWebServiceActivity
——WebServiceInputActivity
——WebServiceOutputActivity
——WebServiceFaultActivity
与state相关的Activity
——StateActivity
——StateInitializationActivity
——StateFinalizationActivit
——EventDrivenActivity
——SetStateActivity
本地通讯相关的Activity
——CallExternalMethodActivity
——HandleExternalEventActivity

转载于:https://www.cnblogs.com/jerryshi/archive/2008/02/25/1072153.html

Workflow之Activity相关推荐

  1. VS2012 开发SharePoint 2013 声明式workflow action(activity)之 HelloWorld

    本文讲述VS2012 开发SharePoint 2013 声明式workflow action 之 HelloWorld. 使用VS2012开发客户化的workflow action是SharePoi ...

  2. 什么是Activity 和 Activity分类

    什么是Activity:     现在提供的Activity大约有28种,分成8大类.Activity 是workflow一个已经编译的模块,是一个可执行的.可重用和可以组合的单元.基础的Activi ...

  3. Microsoft Windows Workflow Foundation 入门:开发人员演练

    有关向 Windows 平台添加工作流支持的初步知识 Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流 ...

  4. UML-based workflow |wfmc|面向对象的概念

    1.工作流的应用 一个电子政务系统中报文审批这一工作流程中的每个环节就组成了一个工作流,网上购物系统中从下定单到发货也是一系列的工作流程(其中包括用户取消定货和缺货等诸多环节),ERP系统中的工作流应 ...

  5. Windows workflow foundation入门

    Microsoft Windows Workflow Foundation (WWF) 是一个可扩展框架,用于在 Windows 平台上开发工作流解决方案.作为即将问世的 Microsoft WinF ...

  6. WorkFlow建立

    所谓WF,就是.NET Framework 3.0的一个构成部分--Windows Workflow Foundation. 工作流(workflow)是为了完成一些预定的目的,根据一组规则,而制定的 ...

  7. WF(Windows Workflow Foundation)

    0         前言 各位网友大家好!Vista的到来对于跟随微软的开发人员可谓又是一场技术的革命,革命尚未到来已经就有了山雨欲来风满楼的感觉.从去年的Avalon(WPF开发代号).Indigo ...

  8. 什么是Activity,Activity的其他概念, Activity分类

    2.4            什么是Activity 我们可以从两个方面理解Activity:            Activities are the building blocks of wor ...

  9. workflow是什么?

    workflow是为了完成一些预定的目的,根据一组规则,而制定的一系列步骤.对于一个开发者来说,workflow则是将复杂的业务规则以及控制流程以图形化的方法声明出来,组成一个高度可视化的图形环境. ...

最新文章

  1. 【MySQL】面试官:如何添加新数据库到MySQL主从复制环境?
  2. java同步互斥功能检测_猿考研之操作系统篇三(进程同步,管程,死锁)
  3. 【集合框架】JDK1.8源码分析之IdentityHashMap(四)
  4. 怎么去除CSDN上的广告?
  5. 笔记-高项案例题-2017年下-计算题
  6. Python+Selenium自动化测试:Page Object模式
  7. Excel文字输入技巧
  8. 那些年-SAP固定资产导入AS91 OASV
  9. 【机房报修管理系统】后端篇(一) 设计数据表
  10. linux cpu使用率太高,小技巧:教您一个窍门!解决Linux下CPU使用率过高的问题
  11. 保刚性图像变形算法-Siggraph 2004
  12. 我会java什么梗_抖音不会真的有人什么梗 不会真的有人不会吧不会吧别恶心我梗意思及出处...
  13. 银保监会回应中国金融机构数据被公开售卖:绝大部分系黑客伪造拼凑
  14. matlab plotroc 画roc曲线
  15. 《逃离禁闭岛》游戏评测:不一样的密室逃脱
  16. java freemarker word_Java 用Freemarker完美导出word文档(带图片)(示例代码)
  17. Response.Redirect引起System.Threading.ThreadAbortException
  18. 计算商场折扣 (分支)
  19. 基于Spark的电影推荐系统(推荐系统~4)
  20. 用syslog服务器收集java日志

热门文章

  1. 从H264/H265码流中获取宽、高及帧率
  2. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 从脚本到主类
  3. 【kafka】Kafka Consumer 中的心跳线程有什么作用?
  4. 【ElasticSearch】Es 源码之 IndicesClusterStateService 源码解读
  5. 【Elasticsearch】ES Elasticsearch查询优化
  6. 【registry】NoSuchFieldError: INCLUDE_ALL
  7. 【Kafka】Kafka IllegalArgumentException: Could not find a ‘KafkaClient‘ entry in the JAAS configuratio
  8. 【MySQL】MySQL运维及开发规范
  9. 【Java集合之Map】HashMap、HashTable、TreeMap、LinkedHashMap区别
  10. 第三方开源 jar 包推荐