工作流设计器
一开始接触WF时,我就想WF中的设计器是否可以直接给用户来使用,如果可以的话,那么我们便可以省去了单独开发这种图形操作界面所花的时间了。通过摸索,其中的困难还是挺多的。为此我这前也写了些相关的文章,有关如何在宿主中加载工作流设计器的话题已经在前面的文章中有说明,这里就不再述了。
这里的要说明的重点是如何设计一个通用的最终用户可自行设计的编辑器,也就是说这个编辑器不只是应用于前篇文章所说的新闻系统。这里的技术点在于,每个应用系统都有自己特定的自定义活动,而这个设计器又如何去识别这些自定义活动。对于这个技术点来讲其实现还是比较简单的,那就是用“反射”。
来看一下我们的应用系统会有什么样的要求?
l 由客户自已来设计业务工作流,操作简单、直观,
l 本身可以独立运行,也可作为二次开发的类库。
l 可以是一个独立的窗口,也可以是一个应用于其它窗口的控件。
l 如果是一个独立的编辑器窗口,我们可以设置窗口的标题。
l 可以定制根活动的标题,及相应的提示信息(非常有必要,SequentialWorkflowActivity是英文的:<)。对于如何改变活动的外观请参照前面我写的文章。
l 根活动的外观定制是可选的如,前景、背景、过渡、边框等。对于如何改变活动的外观就参照前面我写的文章。
l 我们设计时使用的活动列表,这些活动我们可以通过反射技术加以呈现。
l 将设计好的工作流导出。有两种方式一个直接生成文件,二是生成流。流可以方便应用系统自己去管理这些设计好的工作流。
l 应用系统可以给出一个设计好的工作流以进行编辑修改。
l 可以方便地修改工作流活动的各种属性,包括自定义活动的自定义属性。
对于这些定制,我们设计了一个配制文件来解决。配制文件示例如下:
<?xml version="1.0" encoding="utf-8"?>
<WWFDesigner xmlns="Infomedia.WWFDesigner">
<Appearance>
<WinformTitle>工作流设计器</WinformTitle>
</Appearance>
<Rules></Rules>
<RootActivity>
<AssemblyName>WWFDesigner</AssemblyName>
<TypeFullName>Infomedia.WWFDesigner.DefaultSequentialWorkflowActivity</TypeFullName>
<HeaderText>工作流设计器</HeaderText>
<HelpText>可以在此放活动</HelpText>
<ForeColor>Black</ForeColor>
<BackColor>White</BackColor>
<BorderColor>White,White</BorderColor>
<LineColor>Black</LineColor>
</RootActivity>
<Activities>
<Activity>
<AssemblyName>System.Workflow.Activities</AssemblyName>
<TypeFullName>System.Workflow.Activities.CodeActivity</TypeFullName>
</Activity>
<Activity>
<AssemblyName>System.Workflow.Activities</AssemblyName>
<TypeFullName>System.Workflow.Activities.DelayActivity</TypeFullName>
</Activity>
<Activity>
<AssemblyName>System.Workflow.Activities</AssemblyName>
<TypeFullName>System.Workflow.Activities.IfElseActivity</TypeFullName>
</Activity>
<Activity>
<AssemblyName>System.Workflow.Activities</AssemblyName>
<TypeFullName>System.Workflow.Activities.WhileActivity</TypeFullName>
</Activity>
</Activities>
</WWFDesigner>
这里需要注意的是<Rules></Rules>节,这里我没有给出配制的具体内容,原因是我还没这方面的实现。该节的目的是加载Rules文件,以将设计过程中的条件进行罗列,这样可以方便用户去选择条件表达式。至于条件Rules的生成,我计划是设计一个独立的表达式生成工具(让用户手动去编写这些条件表达式会被骂的^o^)。
这个条件表达式设计器也不是一件很容易的事情。表达式的组成主要有四部分组成:变量、关系运算符(=,!=,),《等)、值、逻辑运算符。其中变量和值是由具体的应用系统来决定的,这就是麻烦所在。还是由配制文件来完成这件事吧,它包含下面的内容:
应用系统中工作流活动所用到的变量列表。
每个变量的类型和取值范围。
条件设计器的产生物是一个XML化的Rules文件,即可将其指定到上面配制文件中的<Rules></Rules>节里。关于条件设计器的实现我这边还没有,如果有谁做了这方面的工作不妨分享一下。
大家可以不必太关心这个条件表达式设计器,至少我这边的项目还没有用到。因为我想我把所有的条件都用到了自定义活动中去了;也就是说工作流设计中不会有象IFELSE\WHILE之类的活动的。
说到自定义活动,请看我下面的文章,待续