最近很多同行问到JOffice如何扩展自己的流程,鉴于此,本人以下公司用一个购车请款的流程为例,说明JOffice中的流程发布。
一、 用Jbpm Eclipse plugin 定义好需要发布的流程,如下所示:
其定义的XML文件如下所示:
<?xml version="1.0" encoding="GBK"?>
<process key="buyCarFlow" name="购车流程" xmlns="http://jbpm.org/4.0/jpdl">
<start g="196,22,48,48" name="开始">
<transition g="-143,-11" name="to 输入购车预算金额" to="输入购车预算金额"/>
</start>
<task g="153,104,133,52" name="输入购车预算金额">
<transition g="-92,-11" name="to 金额条件判断" to="金额条件判断"/>
</task>
<decision g="197,184,48,48" name="金额条件判断">
<transition g="-83,-17" name="金额小于2000" to="副经理审批">
<condition expr="#{reqAmount<2000}"/>
</transition>
<transition g="-28,-16" name="金额大于2000" to="总经理审批">
<condition expr="#{reqAmount>2000}"/>
</transition>
</decision>
<task g="10,271,98,52" name="副经理审批">
<transition g="-47,-17" name="to 取消" to="取消"/>
<transition g="-71,-17" name="to 财务审批" to="财务审批"/>
</task>
<task g="379,264,92,52" name="总经理审批">
<transition g="-47,-17" name="to 取消" to="取消"/>
<transition g="-71,-17" name="to 财务审批" to="财务审批"/>
</task>
<task g="172,365,92,52" name="财务审批">
<transition g="-47,-17" name="to 取消" to="取消"/>
<transition g="-47,-17" name="to 结束" to="结束"/>
</task>
<end-cancel g="195,272,48,48" name="取消"/>
<end g="197,460,48,48" name="结束"/>
</process>
说明:
1.注意以下这部分的定义
<transition g="-83,-17" name="金额小于2000" to="副经理审批">
<condition expr="#{reqAmount<2000}"/>
</transition>
<transition g="-28,-16" name="金额大于2000" to="总经理审批">
<condition expr="#{reqAmount>2000}"/>
</transition>
其使用了表达式来进行条件的跳转, reqAmount代表为流程表单中提交的数据字段名称,在后面我们会在表单中使用该字段名称。
二、 在JOffice中发布该流程
点击流程管理菜单中的流程管理,点击左流程左分类其中一项,再点“发布流程”按钮,如下所示:
把以上XML文件拷至该对话框。并且填写好流程名称为“购车请款”,注意,流程名称写好后,最好不要更改,否则后面的流程表单的路径也需要更改。再点击“保存”按钮,则成功发布了一个流程定义。
三、 分配各流程中的各任务节点的处理人员或角色
在流程管理列表中,点击“购车请款”流程行中的“ ”按钮,进入流程任务人员的设置界面,如下图所示:
双击“人员设置”面板中的用户列下的表格,会相应弹出该任务的人员选择对话框,如下图所示:
双击“人员设置”面板中的角色列,选择相应的角色:
说明:
在该设置中,人员的选择可以为发起人,即该任务会自动转给流程发起人来处理,另外还可以设置“上级”,即流程会流转至我的上级,若我的上级有多个人,即可以由其中一个锁定任务来执行。任务在执行过程中还可以转移由其他人来执行,如某人出差了,可以转至其他人来执行。
四、 定义好各任务的表单及表单字段映射
进入程序的WEB-INF/FlowForm/目录,为该流程定义好表单及表单的字段映射,
以流程的名称建立一个目录,如“购车请款”,如图所示。
并且以各个任务的名称定义表单,
如流程开始前填写的表单统一命名为“开始.vm”,其映射的字段文件为“开始-fields.xml”,若没有为开始或其他任务定义这两个对应的文件,其会默认使用“通用”目录下的表单及映射文件。
在请款流程里,我们需要在“输入购车预算金额”任务里填写请款内容,所以我们在“购车请款”目录下建立了“输入购车预算金额.vm”文件及“输入购车预算金额-fields.xml”
以下为两个文件的对应代码:
[输入购车预算金额.vm]
[
{
fieldLabel:'预购车日期',
xtype:'datefield',
allowBlank:false,
name:'reserveDate',
format:'Y-m-d',
value:'$dateTool.format("yyyy-MM-dd",$reserveDate)'
},
{
fieldLabel:'预算金额(RBM)',
xtype:'numberfield',
allowBlank:false,
name:'reqAmount',
value:'${reqAmount}'
},
{
fieldLabel:'购车描述',
xtype:'fckeditor',
height:300,
name:'desc',
value:'${desc}'
}
]
[输入购车预算金额-fields.xml]
<?xml version="1.0" encoding="UTF-8"?>
<fields>
<field name="reserveDate" label="预购车日期" type="datetime"/>
<field name="reqAmount" label="预算金额(RBM)" type="decimal"/>
<field name="desc" label="描述" type="text"/>
</fields>
用同样的方法,为其他流程配置其他任务对应的文件。
说明:以上过程在后面的版本直接通过程序界面来完成流程任务的表单配置,请看下一个版。
五、 启动流程
配置好以上的东西后,在流程管理中,点击“管理”列中最后一个按钮”新建流程“,即进入流程启动。如下图所示:
接着在“流程管理”目录下“我的待办事项”,可以看到刚才提交的购车请款事项:
点击管理列中的“ ”按钮,进入填写预算金额的任务表单,如下所示:
点击“转至:金额条件判断”,则流程进入下一个任务,如下所示:
进入我的申请流程中,可以看到该任务已经提交并转至“总经理审批”环节,(由于输入的金额>2000,所以流程会自动转至“总经理审批”)如下所示:
现在以李海2 用户登录,进入我的待办事项,如下所示:
提交至“账务审批”,即完成此次审批。
其他执行方式也相同,在此不介绍,往下执行的效果如下所示:
说明:
以上流程的定义目前还需要在eclipse工具中进行定义,后面的版本会提供一个在线的可视化设计的界面,同时也提供表单的在线设计。目前还是需要开发人员手工加入流程。