今年的MVP Open Day和PDC的课程都介绍了WF 4.0的变化。在Tech Ed 2008北京分会场听了WF 4.0的课程并参加了相关动手实验后,发现WF 4.0的变化并不仅仅是升级那么简单,下面我就简单的讲一下关于WF4.0新特性的感受吧。
当然,虽然WF 4.0的变化甚多,我并没有完整的预览,而且由于它目前还没有发布,所以下面我提到的内容也有可能不会包含在最终发布版中,最终的WF 4.0是什么样子,就让我们拭目以待吧。
• 据说效率提高了10-100倍。
• 新的设计器完全基于WPF来展现,速度确实大有提高。
• 新增一种图:Flow Chart,我认为Flow Chart更复合我们设计流程的正常思维,试想一下,如果下一版本的SharePoint中的工作流也能基于WF 4.0,那么SharePoint Designer设计流程的能力将会得到非常大的提升。
• 新的Flow Chart和以前的Sequence以及StateMachine这三种图可以互相嵌套,可以简单的将这个功能理解为“子流程”,这无疑会让WF能够更加灵活的设计工作流。
• 活动之间不再使用依赖项属性的绑定来传递数据,在WF 4.0中,活动的输入输出属性叫做Arguments(参数),而且还可以为每个活动定义若干Variables(变量),活动就是通过绑定参数和变量来传递数据的。
我们知道,依赖项属性是在全局定义的,而变量则是有作用域限制的,就像编程语言中的变量作用域一样,理解起来非常简单,把活动想像成一对大括号就明白了。
通过使用变量,工作流就可以在需要的时候加载需要的变量即可,不用像依赖项属性一样将它们全部加载。
• 目前我们使用依赖项属性绑定时,我们只可以进行属性到属性的绑定。而WF 4.0在绑定时是可以输入Expression表达式的,比如:(variable1 * variable2).ToString()。这个改进确实不错,但希望最终版本的设计器会更加友好一些,至少要像目前的规则编辑器一样,弹出窗口,包含比较大的输入区域,最重要的是要支持智能感知。
• 代码编写方面,在动手实验中我简单的看了一下,发现WF 4.0中宿主只需要简单的实例化一个WorkflowInstance,然后调用这个实例Resume就可以启动了,并不需要实例化WorkflowRuntime,WorkflowRuntime的调用已经被封装了,这为我减轻了代码负担,但这并不意味着我们没法控制运行时了。
• 我们都天真的以为WF 4.0中的活动应该不会变化的,就算变化也应该像3.5那样增加几个活动而已,但事实是……WF 4.0的基础活动库包含了流控制、状态控制、规则控制、消息、数据库、SharePoint甚至PowerShell的相关活动。
虽然种类很多,但我个人觉得WF 4.0把SharePoint和PowerShell这些活动都包含进来似乎有些不太合适,这些活动还是应该由他们本身的平台来提供才对啊(像现在这样,由VSTO来提供SharePoint的相关活动)。如果不怕造成WF 4.0异常臃肿的话,干脆连Speech Server的活动也内置了得了。
于是我打开System.WorkflowModel.Activities命名空间想一看究竟,结果却没有找到几个熟悉的活动,下面是部分该命名空间下的类名,根据类名就可以推断出来功能,大家预览一下,发挥想象尽情猜测吧:
○ ActivityActionTrigger
○ ActivityActionTriggered
○ ActivityCompleted
○ ActivityFaulted
○ ActivityFlowEvent
○ Assign
○ Assign<T>
○ Break
○ CancellationScope
○ Catch
○ Catch<Texception>
○ Comment
○ Continue
○ CreateSharePointListItem
○ DbConnectionContext
○ DbQuery<TResult>
○ DbUpdate
○ Delay
○ DeleteSharePointListItem
○ DoWhile
○ DurableTimerExtension
○ DurableTimerStrings
○ Flowchart
○ FlowDecision
○ FlowElement
○ FlowEvent
○ FlowStep
○ ForEach<T>
○ GetSharePointListItems<TResult>
○ If
○ Interop
○ Loop
○ PowerShellCommand<TResult>
○ Sequence
○ SharePointConnectionContext
○ State
○ StateMachine
○ StateTransation
○ Switch<T>
○ Throw<TException>
○ TimerExtension
○ TryCatchFinally
○ UpdateSharePointListItem
○ While
○ WriteLine
从其中的Break、Catch、Continue、DoWhile、ForEach、If、Swith、TryCatchFinally和While等不难看出,WF大有将基本的编程语法移植过来的趋势,不过这些活动确实很实用。
• 此外WF 4.0的规则也进行了增强,但我并没有机会一览究竟,动手实验的虚拟机镜像也不允许复制,不过至少弄清楚一件事情,前段时间发布的Visual Studio 2010 CTP中的WF 4.0是个很原始很原始的版本,其设计器、工具箱甚至程序集都和我看到的版本有着很大的差异。
最后为大家共享一些资料:
• PDC的Sessions视频下载请访问我的这篇日志:http://www.cnblogs.com/xiaoshatian/archive/2008/11/01/1324216.html
• Tech Ed 2008的WF课程讲义下载请点击这里:http://files.cnblogs.com/xiaoshatian/TechEd2008BJWF.rar