代码改变世界

《WF编程》系列之35 - 自定义活动:为何创建自定义活动?

2007-11-25 23:58 by Windie Chai, 2576 阅读, 收藏, 编辑
摘要: 使用通用的framework来开发软件虽然轻松,但却不够高效.我们每天都会遇到一些问题,只有使用专门面向这些问题的framework来开发软件才是真正的轻松并且高效.通过自定义活动,我们可以为这些日常问题量身打造工作流.自定义活动可以用来解决特定业务领域的问题,譬如,医疗软件中化验病人的血液样本的过程;我们也可以为IT领域编写自定义活动.如果我们的应用程序大量使用了Microsoft Message Queuing(MSMQ),我们就可以创建和MSMQ交互的自定义活动.
这一章将会讲述如何编写自定义活动,并且深入研究实现自定义活动的不同方式.我们会讨论如何使用组合的方式创建黑盒活动和白盒活动;如何使用继承的方式来创建自定义活动;如何创建验证和设计时的行为.接着,我们还会讨论一些相关概念,比如依赖性属性(Dependency Property)和执行上下文(Execution Context).在本章的最后,我们将比较组合和继承这两种创建自定义活动方式,并理解创建自定义活动的要点.阅读全文

《WF编程》系列之34 - 基本活动:状态活动

2007-10-30 10:23 by Windie Chai, 3582 阅读, 收藏, 编辑
摘要: 本节来介绍一下在状态机工作流中工作的活动.
一个状态机是由一系列状态(State)组成的.譬如,用来模拟软件bug跟踪的状态机工作流也许会包含以下四个状态:开启,分配,关闭和延期,工作流总是处于其中一个状态中.状态机的执行完全依靠事件来驱动.只有当工作流接收到适当的事件,才可以从当前的状态转换到一个新的状态.一个状态机必须包含一个起始状态和一个可选的结束状态.当工作流转换到结束状态时,工作流就完成了.
状态机工作流适合于模拟由外部决策来驱动执行的工作流.当我们做出了决策,比如关闭一个bug,我们需要一个本地通信服务来为工作流触发事件.工作流知道当前所处状态和可能将要转换到的状态.譬如,我们规定一个开启的bug必须在关闭之前被分配给相关人员,但它也可以从开启状态直接转换到延期状态.
我们在建立一个状态机时,第一步就是定义这些状态.阅读全文

《WF编程》系列之33 - 基本活动:Web Services

2007-10-22 15:28 by Windie Chai, 2964 阅读, 收藏, 编辑
摘要: 今时今日,一个完善的软件无可避免的需要发送或接受SOAP请求,WF也包含了一些围绕Web Services的客户端或者服务器端的活动:
InvokeWebServiceActivity:调用Web Service方法;
WebServiceInputActivity:接受Web Service 请求;
WebServiceOutputActivity:响应Web Service请求;
WebServiceFaultActivity:抛出SOAP异常.阅读全文

《WF编程》系列之32 - 基本活动:条件与规则

2007-09-29 11:24 by Windie Chai, 2557 阅读, 收藏, 编辑
摘要: WF中关于条件和规则的活动有两个: ConditionedActivityGroup(CAG) 活动和Policy活动.
虽然我们也把CAG视作控制流的活动,但事实上CAG更加侧重于对条件和规则的控制.
Policy活动是一个规则引擎,它允许我们将业务逻辑从工作流并中分离并且声明性的定义业务策略.
本节将对这两个活动进行简单的介绍.阅读全文

《WF编程》系列之31 - 基本活动:事务(Transactions)与补偿(Compensation)

2007-09-28 15:34 by Windie Chai, 3100 阅读, 收藏, 编辑
摘要: 本节简单的介绍WF中有关事务和补偿的几个内置活动.阅读全文

SharePoint工作流开发点滴(6) - “我的任务不给你看”

2007-08-21 01:38 by Windie Chai, 9871 阅读, 收藏, 编辑
摘要: 一直以来都被MOSS的工作流权限问题所困扰. 我们虽然将任务分配给了某人,但事实上,所有在任务列表中有编辑权限的用户都可以编辑该任务. 而我们并不希望用户能够看到不属于自己的任务. 我曾经尝试过采用以下两种方法解决这一问题,未果. 1.更改任务列表的视图. 2.EventHandler 我一直固执的认为任务列表的权限应该是在MOSS中配置,而不应该在工作流内部做判断,后来,我终于发现我错了. 我们使用CreateTask活动来创建任务,CreateTask活动有一个属性叫做SpecialPermissions,它的类型是HybridDictionary. 这个属性的作用就是,如果你为其指定了"特别权限",那么创建的任务就不再继承任务列表的权限了.所以我们可以在创建任务之前为其指定这个"特别权限".阅读全文

《WF编程》系列之30 - 基本活动:错误处理

2007-08-09 22:59 by Windie Chai, 2642 阅读, 收藏, 编辑
摘要: Fault,故障,现在官方已经将其翻译为错误,那么以后的随笔中我也就采用官方的翻译吧.
错误处理也属于流程控制的一部分,这一节我来介绍一下有关错误处理的活动.错误是指在工作流执行期间发生的异常.我们可以使用错误处理程序来捕捉这些异常并尝试做一些”修复”工作.我们可以补偿提交的事务,或者发送Email来警告管理员并等待丢失的数据被修复.
我们最好在工作流中对可能发生的错误进行处理,如果工作流抛出了一个异常,而我们又不知道如何去处理,那么只能等Runtime终止工作流.阅读全文

《WF编程》系列之29 - 本地通信事件:HandleExternalEventActivity & 活动生成器

2007-08-07 22:12 by Windie Chai, 3557 阅读, 收藏, 编辑
摘要: 像CallExternalMethod活动一样,HandleExternalEvent活动也有一个必须设置的InterfaceType属性.当我设置这个属性之后,我们就可以设置EventName属性了.
如果从本地服务而来的事件一直没有到达HandleExternalEvent的话,它就不会完成.假如事件有可能永远不会到达,或者事件需要过一段时间之后才会到达,那么最好把这个活动置于Listen活动内部.我在之前介绍过,Listen活动可以有多条分支,我们可以把Delay活动放到其中一条分支中来模拟超时.
Windows Workflow包含了一个命令行工具来执行Windows Workflow Communications活动生成器:wca.exe.
我们可以向wca.exe传递.NET程序集(.dll或.exe)的路径,这个工具会在程序集中寻找有ExternalDataExchange标识的接口.找到之后,它就会生成专门的自定义活动,可以执行接口中的方法和处理接口中的事件.阅读全文

使用VISUAL STUDIO 2008 BETA2 创建 SHAREPOINT 工作流

2007-08-06 00:28 by Windie Chai, 4500 阅读, 收藏, 编辑
摘要: 前几天从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工作流,看看都有什么变化.
阅读全文

《WF编程》系列之28 - 本地通信事件:CallExternalMethodActivity

2007-08-03 16:47 by Windie Chai, 3850 阅读, 收藏, 编辑
摘要: 让工作流和外部世界进行交互也并不是什么难事,因为WF本身就内置了一些活动来完成这样的工作.
为了能让本地通信可以工作,我们需要以.NET接口的形式定义一个合同.在这个接口中会包含一些方法和事件,工作流可以通过这些方法来调用本地服务,而本地服务则可以触发这些会被工作流处理的事件.阅读全文

《Office SharePoint Server2007开发入门指南》预订!

2007-08-02 23:34 by Windie Chai, 2323 阅读, 收藏, 编辑
摘要: 涂曙光老师,陈曦兄和赵琦峰兄的《Office SharePoint Server2007开发入门指南》终于发行了,现在在第二书店已经开始接受预订了.
下面是这本书的介绍:

【简介】
本书向SharePoint开发人员和高级管理员介绍了Windows SharePoint Sevices 3.0与Office SharePoint Server 2007应用与开发的基本内容,包括:SharePoint技术概览、站点管理、对象模型、Web Part开发、工作流、Excel Services和InfoPath Forms Services等内容。读者可以以本书为基础,快速了解如何在SharePoint之上进行应用开发。阅读全文

MOSS多级审批工作流【Sequential+ConditionedActivityGroup版】v1.1

2007-08-01 23:08 by Windie Chai, 7841 阅读, 收藏, 编辑
摘要: 今年二月份,我开发了一个MOSS多级审批工作流,并在《SharePoint多级审批工作流开发文档[Sequential版]》这篇文档中详细的描述了整个开发过程而且提供了项目源码下载。 其实我在匆匆的写这篇文档的时候,对MOSS和WF连一知半解都谈不上。 所以为了实现审批流程中常见的动作-“回退”,我用了好几层的While和IfElse嵌套,使工作流看起来非常繁复,最近终于决定腾出一个分区安装了Windows Server 2003 和MOSS,然后把这个审批工作流改了一下。阅读全文

《WF编程》系列之27 - 基本活动:EventHandlingScopeActivity & SynchronizationScopeActivity & ReplicatorActivity

2007-07-27 02:41 by Windie Chai, 3186 阅读, 收藏, 编辑
摘要: 和Listen活动类似,EventHandlingScope活动也可以包含多个等待事件的分支.那么这两个活动的区别是什么呢?
Parallel活动会同时执行它的每个分支, SynchronizationScope活动则正好相反,它的作用是阻止将要同时执行的活动,并让它们一个接一个的执行.
Replicator活动和While活动类似,而且更加复杂.也可以这样理解,Repicator活动只能包含一个子活动,在其运行时,会取出InitialChildData属性中的所有数据,然后为每一个数据创建一个子活动的副本.阅读全文

《WF编程》系列之26 - 基本活动:ParallelActivity & DelayActivity & ListenActivity

2007-07-26 15:11 by Windie Chai, 3325 阅读, 收藏, 编辑
摘要: Parallel活动允许多个活动同时执行并等待它们全部完成;
与它相似,Listen活动也可以包含多个分支.但不同的是Listen活动的目的仅仅是完成一个分支;
Delay活动会初始化一个计时器并等待它到期,经常用来模拟超时.
本节我们使用这三个活动来模拟一个文件在公司的审批流程.
阅读全文

《WF编程》系列之25 - 基本活动:InvokeWorkflowActivity

2007-07-25 09:27 by Windie Chai, 2950 阅读, 收藏, 编辑
摘要: InvokeWorkflow活动可以在工作流执行过程中异步的执行另一个工作流.我们可以设置这个外部工作流的输入参数,却无法直接获取其输出参数(因为执行过程是异步的).
本节非常简单的介绍了InvokeWorkflow的基本概念,属性和事件,关于这个活动的详细探讨,包括如何获取外部工作流的输出参数,将在以后的文章中分享.阅读全文

《WF编程》系列之24 - 基本活动:SuspendActivity & TerminateActivity & ThrowActivity

2007-07-24 14:17 by Windie Chai, 2793 阅读, 收藏, 编辑
摘要: 这一节我们来介绍SuspendActivity,TerminateActivity和ThrowActivity.
这三个活动有一个共同的特点是都可以中断工作流的执行,不同的是Suspend用来暂停工作流,Terminate用来终止工作流,而Throw则可以抛出异常.
本节将介绍这三个活动的简单使用方法以及关键属性.阅读全文

《WF编程》系列之23 - 基本活动:IfElseActivity & WhileActivity & SequenceActivity

2007-07-23 09:27 by Windie Chai, 3302 阅读, 收藏, 编辑
摘要: 这一节介绍两个基本活动:IfElse,While和Sequence.
这三个活动都是复合活动,它们都可以包含多个子活动,但While活动有个特殊的限制,它只能直接包含一个子活动.
本节将介绍这三个活动的简单使用方法,子活动,以及关键属性.阅读全文

《WF编程》系列之22 - 基本活动:CodeActivity

2007-07-20 09:07 by Windie Chai, 2843 阅读, 收藏, 编辑
摘要: 活动是组成工作流的基本块.Windows Workflow的基本活动库包含了一些都通用的工作流活动.功能涉及流程控制,事务管理,本地通信,Web Services以及其他等等.这些活动都在工具箱中可以找到.有一些活动比较简单,比如CodeActivity,它的工作就是执行一段代码.而有的活动就比较复杂,如PolicyActivity可以以正向链法(forward chaining)来估算优先级. 通过使用这些基本活动,我们可以构建强大的工作流.
从这篇随笔开始,我将逐个介绍基本活动库中的所有活动,第一个出场的是一直出现在范例中的CodeActivity.阅读全文

《WF编程》系列之21 - 故障 Faults

2007-07-19 09:34 by Windie Chai, 2608 阅读, 收藏, 编辑
摘要: 和所有软件一样,工作流未必总是能够完美的执行.例如,数据库服务器的故障就可能使工作流抛出异常.此外,我们还可以通过TrowActivity来人为的抛出一个异常.

在工作流内部管理异常和管理C#中的异常类似.复合活动包含一个故障处理程序(fault handlers)来捕捉异常. 在.NET中,异常一直向上传递直到.NET Runtime为其找到合适的异常处理程序.在工作流内部也是一样,如果活动没有处理发生的异常,Runtime会把这个异常传递给它的父活动.如果Runtime无法找到故障处理程序,Runtime会终止工作流并触发WorkflowTerminated事件.阅读全文

仿BlogEngine.NET的cnBlog主题

2007-07-18 09:31 by Windie Chai, 1215 阅读, 收藏, 编辑
摘要: 昨天写了一个CSS来仿照BlogEngine.NET中的Standard主题.阅读全文