鉴于基于mxgraph的版本不能在中国使用,本人打算用Flex开发,不过Flex的图形处理功能目前还是不太强,主要表现在没有一个较好的图形处理框架,完成一个曲线绘制及编辑功能也需要大费周折,于是本人决定临时给客户开发一个基于Applet版的在线流程设计器。
用java开发,相对得心应手一些,,花了整整一个星期的时间,初步完成了流程的界面编辑设计,并且生成了XML文件。可以比较方便编辑在线的流程,目前尚未解决的是如何进行分支决定。在线完成画图相对比较容易,惟一困难的是如何让它生成的xml文件支持自动跳转分支的功能,因此需要让设计者画分支图的可以输入一些跳转的条件,生成流程图的时候,就可以让Jbpm流程自动来进行。
以下为程序的初步界面,其会随JOffice 1.3一起发布。
整合至EXT的界面如下所示:
流程设计中的分支条件设置,使用的是表达式方式,如下所示:
<decision name="evaluate document" g="96,102,48,48">
<transition to="submit document" g="120,60:">
<condition expr="#{content=="good"}" />
</transition>
<transition to="try again">
<condition expr="#{content=="bad"}" />
</transition>
<transition to="give up" g="120,189:" />
</decision>
我们在设计器中也允许用户设置以上的表达式,如下图所示:
以上流程图最终生成的jpbm流程定义以下所示:
<?xml version="1.0" encoding="UTF-8"?>
<process name="test">
<start g="63,34,58,58" name="开始">
<transition g="-36,-16" name="to" to="输入金额"/>
</start>
<task g="217,42,103,44" name="输入金额">
<transition g="-36,-16" name="t2" to="分支"/>
</task>
<task g="72,222,118,45" name="任务4">
<transition g="-36,-16" name="t5" to="结束1"/>
</task>
<decision g="243,137,58,58" name="分支">
<transition g="-36,-16" name="t4" to="任务5">
<condition expr="#{account <= 30}"/>
</transition>
<transition g="-36,-16" name="t3" to="任务4">
<condition expr="#{account > 30}"/>
</transition>
</decision>
<task g="364,229,137,42" name="任务5">
<transition g="-36,-16" name="t6" to="结束1"/>
</task>
<end g="239,336,58,58" name="结束1"/>
</process>
在eclipse中显示出来的图如下所示:
以下为稍为复杂一点的流程:
生成的源代码对应如下:
<?xml version="1.0" encoding="GBK"?>
<process name="test22">
<task name="任务1" g="48,127,77,41">
<transition name="t2" to="分支" g="-36,-16" />
</task>
<start name="开始" g="54,12,58,58">
<transition name="t1" to="任务1" g="-36,-16" />
</start>
<decision name="分支" g="60,231,58,58">
<transition name="t4" to="任务3" g="-36,-16">
<condition expr="#{account>20}" />
</transition>
<transition name="t3" to="任务2" g="-36,-16">
<condition expr="#{account<=20}" />
</transition>
</decision>
<task name="任务2" g="171,156,50,50">
<transition name="t5" to="同步任务" g="-36,-16" />
</task>
<task name="任务3" g="194,313,50,50">
<transition name="t10" to="结束1" g="-36,-16" />
</task>
<fork name="同步任务" g="238,61,58,58">
<transition name="t7" to="任务5" g="-36,-16" />
<transition name="t6" to="任务4" g="-36,-16" />
</fork>
<task name="任务4" g="375,65,50,50">
<transition name="t8" to="汇集任务" g="-36,-16" />
</task>
<task name="任务5" g="290,212,50,50">
<transition name="t9" to="汇集任务" g="-36,-16" />
</task>
<join name="汇集任务" g="446,248,58,58">
<transition name="t11" to="结束1" g="-36,-16" />
</join>
<end name="结束1" g="354,404,58,58" />
</process>