工作流无疑是一个热门话题,以前的开发中一直不会接触到这个层面,所以一直没有来得及看到。现在由于工作需要开始接触工作流,这里留下一个我学习的过程,提供一些好的资源和一些自己的体会,方便大家学习探讨。
一、为什么使用工作流、工作流这个技术的现状
出于习惯,每当我学习一个技术的时候,必须要知道为什么要学习它,它能给我带来什么好处,了解了这个才能让我决定是否使用,在什么时候使用。另外了解一下这个技术的现状有助于从总体上把握这个技术。对于一个发展阶段的技术和一个成熟的技术对待方式是不一样的。
关于这点,参考这篇文章:http://www.joinwork.net/document/The%20State%20of%20Workflow2.htm
所有我看过的文章中,这篇文章最清晰的说明了我上边的两个问题,而且以问答的方式来写的,适合从头开始的人。
这篇文章的作者Tom Baeyens (jbpm工作流框架的作者)翻译dinghong,感谢他们提供了一个好的文章。
二、工作流框架的选择
由于开源的流行我们可以有更多的选择,这给我们带来了很多的方便,好处多多不用说了,但也给我们带了了一些麻烦,用Java 的人都了解,百家争鸣让人眼花缭乱,一个重要的事情是选择,哪一个适合自己,或者说你更喜欢哪一个。选择也是一个难题。选择的好能节省很多时间,少走弯路。
在这个问题上我没有选择,因为我不是这个方面的主要负责人,框架的选择已经定下来了,OSWorkFlow.这对我也许是个好消息,因为我不需要再在大量的框架中去选择,只需要专一于一个,省去大量的时间。
三、OSWorkFlow主要优势
OSWorkflow 给你绝对的灵活性。OSWorkflow 被认为是一种“低级别”工作流实现。与其他工作流系统能用图标表现“Loops(回路)”和“Conditions(条件)”相比,OSWorkflow 只是手工“编码(Coded)”来实现的。但这并不能说实际的代码是需要完全手工编码的,脚本语言能胜任这种情形。OSWorkflow 不希望一个非技术用户修改工作流程,虽然一些其他工作流系统提供了简单的 GUI 用于工作流编辑,但像这样改变工作流,通常会破坏这些应用。所以,进行工作流调整的最佳人选是开发人员,他们知道该怎么改变。不过,在最新的版本中,OSWorkflow 也提供了 GUI 设计器来协助工作流的编辑。
OSWorkflow 基于有限状态机概念。每个 state 由 step ID 和 status 联合表现(可简单理解为 step 及其 status 表示有限状态机的 state)。一个 state 到另一 state 的 transition 依赖于 action 的发生,在工作流生命期内有至少一个或多个活动的 state。这些简单概念展现了 OSWorkflow 引擎的核心思想,并允许一个简单 XML 文件解释工作流业务流程。
上边这段话是从OSWorkFlow的教程中得到的,总结一下,OSWorkFlow是基于xml手工配置的,它特点是灵活,它认为工作流的调整应该是程序员的事情。
四、OSWorkFlow核心概念
步骤(Step)
一个 Step 描述的是工作流所处的位置。可能从一个 Step Transtion(流转)到另外一个 Step,或者也可以在同一个 Step 内流转(因为 Step 可以通 Status 来细分,形成多个State)。一个流程里面可以多个Step。
状态(Status)
工作流 Status 是用来描述工作流程中具体Step(步骤)状态的字符串。OSWorkflow 的有 Underway(进行中)、Queued(等候处理中)、Finished(完成)三种 Status。一个实际State(状态)真正是由两部分组成:State = (Step + Status) 。
流转(Transtion)
一个State到另一个State的转移。
动作(Action)
Action 触发了发生在 Step 内或 Step 间的流转,或者说是基于 State 的流转。一个 step 里面可以有多个Action。Action 和Step 之间的关系是,Step 说明“在哪里”,Action 说明“去哪里”。 一个 Action 典型地由两部分组成:可以执行此Action(动作)的
Condition(条件),以及执行此动作后的 Result(结果)。
条件(Condition)
类似于逻辑判断,可包含“AND”和“OR”逻辑。比如一个请假流程中的“本部门审批阶段”,该阶段利用“AND”逻辑,判断流程状态是否为等候处理中,以及审批者是否为本部门主管。
结果(Result)
Result 代表执行Action(动作)后的结果,指向新的 Step 及其 Step Status,也可能进入 Split 或者 Join。Result 分为两种, Contidional-Result (有条件结果),只有条件为真时才使用该结果,和 Unconditional-Result(无条件结果),当条件不满足或没有条件时使用该结果。
分离/连接(Split/Join)
流程的切分和融合。很简单的概念,Split 可以提供多个 Result(结果);Join 则判断多个 Current Step 的态提供一个 Result(结果)。
好了,到这里,工作流的一个概貌是出来了。在下边的文章中会以OSWorkFlow为例来进入工作流的天地。