工作流开发总结
工作流开发已经有一段时间了,这里把自己的一些想法小结一下。仅仅就工作流引擎来说,不包括一些外围的实现,例如流程定义器,管理控制,工作项列表等。
工作流引擎其实就是一个状态机,只不过在状态变化的过程中加入了其他一些工作。我把工作流引擎的职责理解为以下四个方面:
1、对工作流模式的支持。
这无疑是最重要的部分,状态的变迁往往取决于不同模式的选择。支持的模式越多则客户的开发代码会越少。衡量一个工作流引擎的技术水准很大程度取决于引擎支持模式的多少。
2、工作流变量的传递和转换。
工作流引擎通过工作流变量与外部应用交互,工作流变量在各个活动节点以及父流程与子流程之间传递。变量除基本类型(String,int等)以外,也需要支持一些复杂的数据类型(例如对象,以一种配置映射的方式)。这里还涉及到一个上下文的问题。
3、任务项的分配。
任务项的分配往往和工作流组织权限联系起来,其实工作流组织权限存在的目的就是决定任务项分配,决定由谁来完成这个工作项。工作项涉及到的内容也比较多,比如工作项的回退,撤回等等。
4、调用外部应用。
单纯的表单推动已经不再适用,活动节点本身需要支持许多的业务操作,而这些操作与引擎本身是无关的,与外部的应用有关,所以就需要引擎提供一种调用外部应用的机制。外部应用可以是javabean,webservice,rcp等等形式。
除去上述四方面还有一些外围的工作:例如时间服务,节点的事件机制等等。
对客户而言,他们需要的仅仅只有两个接口:任务项管理接口(比如提交任务项,委派任务项等等)和流程状态管理接口(比如启动一个新的流程实例,推动流程流转等等)。在理想的情况下,给用户提供一个封装完全的提交页面和父类Action也是很好的一种方法。