Workflow

Windows Workflow Foundation
     摘要: Windows Workflow Foundation中有两种调度服务:DefaultWorkflowSchedulerService和ManualWorkflowSchedulerService。 本文将为大家介绍这两种调度服务的区别,通过配置文件配置服务的方法,各自适合的场景。  阅读全文
posted @ 2008-07-29 13:09 Windie Chai(笑煞天) 阅读(1416) | 评论 (7)  编辑
     摘要: 在状态机工作流中,如何在接收并处理两个并行的事件呢?又如何在这两个事件都完成之后做进一步操作呢? 本文通过我的上一篇文章《MOSS多级审批工作流【StateMachine版】》来和大家分享我的一种方法。   阅读全文
posted @ 2008-07-22 09:04 Windie Chai(笑煞天) 阅读(1504) | 评论 (9)  编辑
     摘要: 去年我发布过一个MOSS多级审批工作流,采用顺序工作流模式开发;后来又做了一些改进,用ConditionedActivityGroupActivity取代了繁复的WhileActivity+IfElseActivity嵌套,但仍然是顺序工作流。
在第二篇文章的末尾我曾写道:“审批这样的流程并不适合用顺序工作流来实现,用WF的另外一种工作流-状态机工作流会更好”,前段时间终于又想起了这回事儿,抽空把这个工作流用状态机实现了,现在和大家分享一下开发心得。
  阅读全文
posted @ 2008-07-15 09:08 Windie Chai(笑煞天) 阅读(1850) | 评论 (41)  编辑
     摘要: Windows Workflow 其实是一个Runtime,而不是应用程序。在启动工作流之前,宿主进程必须先加载并运行工作流Runtime。宿主进程告诉Runtime要创建什么类型的工作流,Runtime则负责管理工作流的生命周期并通知宿主进程重要的生命周期事件,比如工作流的完成和终结。Runtime并不挑剔它的宿主,宿主可以是台式机上的智能客户端应用程序,也可以是机架上的服务器中运行的ASP.NET进程。所有宿主进程需要做的只是加载.NET 3.0工作流程序集而已。
在本章中,我们将深入探讨Windows Workflow Runtime和它的服务。首先来认识一下日志(Logging)、跟踪(Trackng)和工作流Runtime的配置选项;接着是调度服务(Scheduling Services),调度服务为Runtime执行工作流提供了线程支持;然后是持久化服务,持久化服务允许我们将工作流状态信息保存到持久存储设备;最后,我们将介绍跟踪服务,跟踪服务允许我们监视工作流的执行过程。  阅读全文
posted @ 2008-04-21 09:37 Windie Chai(笑煞天) 阅读(2288) | 评论 (13)  编辑
     摘要: 在Windows Workflow中,一个活动有几种可能的状态?它们之间是如何转换的?如果我们编写自定义复合活动,该如何控制子活动的状态转换?  阅读全文
posted @ 2008-04-10 09:30 Windie Chai(笑煞天) 阅读(2560) | 评论 (2)  编辑
posted @ 2008-03-18 09:33 Windie Chai(笑煞天) 阅读(6696) | 评论 (35)  编辑
     摘要: 从根本上来说,采用组成法或继承法来创建自定义活动并没有太大的差别.
而且相对组成发来说,继承法更加容易理解.
在组成法中,我们关注于如何组织自定义活动内的子活动,并且创建了活动属性和执行模型.
而继承法是一种相对更加初级的方法,我们关注的更多的是活动本身所承载的功能.
让我们用继承法编写一个向控制台输出字符串的自定义活动,并为其添加验证器和友好的设计器外观吧.  阅读全文
posted @ 2008-03-18 09:33 Windie Chai(笑煞天) 阅读(2174) | 评论 (1)  编辑
     摘要: 引进依赖属性的最终目标是什么?
依赖属性拥有什么功能?
怎样注册依赖属性?
什么时候应该选择依赖属性?  阅读全文
posted @ 2008-01-30 10:19 Windie Chai(笑煞天) 阅读(2394) | 评论 (2)  编辑
     摘要: 组合活动就像一个黑盒子,工作流设计器无法获取这个黑盒子内部的属性和事件,除非我们把这些属性和事件曝露给外部世界.
这时便需要利用属性升级(Property promotion),属性升级允许组合活动的设计者去决定属性对于外部世界的可见性.
  阅读全文
posted @ 2008-01-10 09:36 Windie Chai(笑煞天) 阅读(2500) | 评论 (5)  编辑
     摘要: 有两种方式可以创建自定义活动,即通过组合的方式和使用继承的方式.
组合是一种简单的创建工作流的方式.我们在设计器中拖拽并配置活动的属性,然后把这个自定义活动封装成一个程序集,这样就可以供其它工作流项目使用了.这种方式的优点是快速并且简单.
使用继承的方式来创建自定义活动,我们需要编写一个类,并使其继承Activity类.也可以继承自Activity的子类从而获得更多的功能.我们可以自定义活动的设计视图,验证,序列化和代码生成.继承的方式允许我们对自定义活动进行更深层次的控制,并且提供了使用自定义代码来扩展Windows Workflow的途径.  阅读全文
posted @ 2007-12-07 09:56 Windie Chai(笑煞天) 阅读(2452) | 评论 (1)  编辑
     摘要: 3月份开始读《Programming Windows Workflow Foundation: Practical WF Techniques and Examples using XAML and C#》一书并写《WF编程》笔记,拖拖拉拉写到现在,居然也翻译了全书的一半。
这期间和很多朋友通过评论、留言、Email和IM等方式(就差写信了)就编写WF程序中遇到的问题进行探讨,套用某新闻节目中经常使用的和谐的五个字:“友好的交流”。
………………华丽的省略号………………  阅读全文
posted @ 2007-12-06 10:15 Windie Chai(笑煞天) 阅读(4636) | 评论 (16)  编辑
     摘要: 使用通用的framework来开发软件虽然轻松,但却不够高效.我们每天都会遇到一些问题,只有使用专门面向这些问题的framework来开发软件才是真正的轻松并且高效.通过自定义活动,我们可以为这些日常问题量身打造工作流.自定义活动可以用来解决特定业务领域的问题,譬如,医疗软件中化验病人的血液样本的过程;我们也可以为IT领域编写自定义活动.如果我们的应用程序大量使用了Microsoft Message Queuing(MSMQ),我们就可以创建和MSMQ交互的自定义活动.
这一章将会讲述如何编写自定义活动,并且深入研究实现自定义活动的不同方式.我们会讨论如何使用组合的方式创建黑盒活动和白盒活动;如何使用继承的方式来创建自定义活动;如何创建验证和设计时的行为.接着,我们还会讨论一些相关概念,比如依赖性属性(Dependency Property)和执行上下文(Execution Context).在本章的最后,我们将比较组合和继承这两种创建自定义活动方式,并理解创建自定义活动的要点.  阅读全文
posted @ 2007-11-25 23:58 Windie Chai(笑煞天) 阅读(1066) | 评论 (0)  编辑
     摘要: 本节来介绍一下在状态机工作流中工作的活动.
一个状态机是由一系列状态(State)组成的.譬如,用来模拟软件bug跟踪的状态机工作流也许会包含以下四个状态:开启,分配,关闭和延期,工作流总是处于其中一个状态中.状态机的执行完全依靠事件来驱动.只有当工作流接收到适当的事件,才可以从当前的状态转换到一个新的状态.一个状态机必须包含一个起始状态和一个可选的结束状态.当工作流转换到结束状态时,工作流就完成了.
状态机工作流适合于模拟由外部决策来驱动执行的工作流.当我们做出了决策,比如关闭一个bug,我们需要一个本地通信服务来为工作流触发事件.工作流知道当前所处状态和可能将要转换到的状态.譬如,我们规定一个开启的bug必须在关闭之前被分配给相关人员,但它也可以从开启状态直接转换到延期状态.
我们在建立一个状态机时,第一步就是定义这些状态.  阅读全文
posted @ 2007-10-30 10:23 Windie Chai(笑煞天) 阅读(1493) | 评论 (5)  编辑
     摘要: 今时今日,一个完善的软件无可避免的需要发送或接受SOAP请求,WF也包含了一些围绕Web Services的客户端或者服务器端的活动:
InvokeWebServiceActivity:调用Web Service方法;
WebServiceInputActivity:接受Web Service 请求;
WebServiceOutputActivity:响应Web Service请求;
WebServiceFaultActivity:抛出SOAP异常.  阅读全文
posted @ 2007-10-22 15:28 Windie Chai(笑煞天) 阅读(1205) | 评论 (1)  编辑
     摘要: WF中关于条件和规则的活动有两个: ConditionedActivityGroup(CAG) 活动和Policy活动.
虽然我们也把CAG视作控制流的活动,但事实上CAG更加侧重于对条件和规则的控制.
Policy活动是一个规则引擎,它允许我们将业务逻辑从工作流并中分离并且声明性的定义业务策略.
本节将对这两个活动进行简单的介绍.  阅读全文
posted @ 2007-09-29 11:24 Windie Chai(笑煞天) 阅读(1270) | 评论 (3)  编辑
     摘要: 本节简单的介绍WF中有关事务和补偿的几个内置活动.  阅读全文
posted @ 2007-09-28 15:34 Windie Chai(笑煞天) 阅读(1380) | 评论 (5)  编辑
     摘要: 一直以来都被MOSS的工作流权限问题所困扰. 我们虽然将任务分配给了某人,但事实上,所有在任务列表中有编辑权限的用户都可以编辑该任务. 而我们并不希望用户能够看到不属于自己的任务. 我曾经尝试过采用以下两种方法解决这一问题,未果. 1.更改任务列表的视图. 2.EventHandler 我一直固执的认为任务列表的权限应该是在MOSS中配置,而不应该在工作流内部做判断,后来,我终于发现我错了. 我们使用CreateTask活动来创建任务,CreateTask活动有一个属性叫做SpecialPermissions,它的类型是HybridDictionary. 这个属性的作用就是,如果你为其指定了"特别权限",那么创建的任务就不再继承任务列表的权限了.所以我们可以在创建任务之前为其指定这个"特别权限".  阅读全文
posted @ 2007-08-21 01:38 Windie Chai(笑煞天) 阅读(4401) | 评论 (36)  编辑
     摘要: Fault,故障,现在官方已经将其翻译为错误,那么以后的随笔中我也就采用官方的翻译吧.
错误处理也属于流程控制的一部分,这一节我来介绍一下有关错误处理的活动.错误是指在工作流执行期间发生的异常.我们可以使用错误处理程序来捕捉这些异常并尝试做一些”修复”工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的数据被修复.
我们最好在工作流中对可能发生的错误进行处理,如果工作流抛出了一个异常,而我们又不知道如何去处理,那么只能等Runtime终止工作流.  阅读全文
posted @ 2007-08-09 22:59 Windie Chai(笑煞天) 阅读(1421) | 评论 (3)  编辑
     摘要: 像CallExternalMethod活动一样,HandleExternalEvent活动也有一个必须设置的InterfaceType属性.当我设置这个属性之后,我们就可以设置EventName属性了.
如果从本地服务而来的事件一直没有到达HandleExternalEvent的话,它就不会完成.假如事件有可能永远不会到达,或者事件需要过一段时间之后才会到达,那么最好把这个活动置于Listen活动内部.我在之前介绍过,Listen活动可以有多条分支,我们可以把Delay活动放到其中一条分支中来模拟超时.
Windows Workflow包含了一个命令行工具来执行Windows Workflow Communications活动生成器:wca.exe.
我们可以向wca.exe传递.NET程序集(.dll或.exe)的路径,这个工具会在程序集中寻找有ExternalDataExchange标识的接口.找到之后,它就会生成专门的自定义活动,可以执行接口中的方法和处理接口中的事件.  阅读全文
posted @ 2007-08-07 22:12 Windie Chai(笑煞天) 阅读(1644) | 评论 (1)  编辑
     摘要: 前几天从Kaneboy大侠处得知Visual Studio 2008 Professional Edition Beta 2和Visual Studio 2008 Team System 2008 – Team Suite Beta 2中包含了最新的VSTO 3.0(Visual Studio Tools for Office),SharePoint的工作流项目也被包含在了VSTO 3.0之中,而且极大的改进了调试方式,“基本上,调试一个SharePoint Workflow的方法就是直接按F5”(Kaneboy《即将从TechReady5归来》).

这个改进真是让我欣喜若狂啊,这一段时间正被”附加到进程”的调试方式折磨呢,不知道什么原因,两次附加中总会有一次导致Visual Studio 2005崩溃.

那么,今天,就来尝试一下用Visual Studio 2008 Beta 2来创建一个MOSS工作流,看看都有什么变化.
  阅读全文
posted @ 2007-08-06 00:28 Windie Chai(笑煞天) 阅读(3341) | 评论 (6)  编辑

Full Workflow Archive