JavaWeb Project 中使用JBPM,使用JUnit 4
?
2.
?
3.
?
PS:gpd.xml文件可能会报错,不用管,编码问题而已,也不需要打开查看。
?
4.打开processdefinition.xml文件。开始画流程图
?
5.流程图的一些解释。
?
?
6.员工申请报销 流程的设置
Description那里写的是 staff.apply
?
?Assignment是指分派任务,Actor有可以指定作用域或者直接指定人名,例如Jack。
?
7.部门经理审批 的流程设置
Description那里写的是 manager.approve
?
?
这次的分配任务交给一个Java类来处理,选择Handler,这个类要实现AssignmentHandler这个接口。
?
8.财务审批 流程的设置
?
?
?这里也是直接指定财务人。
?
9.通知员工 的流程设置
?
?
?
这里的Actor所指定的角色必须要和 员工申请报销 流程里的Actor所指定的角色一样。
?
10.当设置好流程图的属性的时候,就可以开始部署了。
?
输入一个名字,然后按打开就行了。
?
接着,点击Save Without Deploying... 这个按钮,你就发现你所选择的目录里会多了一个.zip压缩包。
?
11.此时,需要一个Java类,把流程图的属性写入到数据库中
package org.jbpm.test;import java.util.List;import org.jbpm.JbpmConfiguration;import org.jbpm.JbpmContext;import org.jbpm.context.exe.ContextInstance;import org.jbpm.graph.def.ProcessDefinition;import org.jbpm.graph.exe.ProcessInstance;import org.jbpm.taskmgmt.exe.TaskInstance;import org.junit.BeforeClass;import org.junit.Test;/** * 测试员工报销 * * @author miao * */public class TestApplyMoney {@BeforeClasspublic static void setUpBeforeClass() throws Exception {}@Testpublic void testProcess() {// 1.员工提交申请submitForm("user1");// 2.部门经理审核//managerApprove("manager1");// 3.财务拨款//cashierApprove("ali");// 4.员工领款//getMoney("user1");}/** * 1.添加员工提交申请 * * @param actorId */public void submitForm(String actorId) {JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();try {ProcessDefinition pd = jbpmContext.getGraphSession().findLatestProcessDefinition("applyMoney");ProcessInstance pi = pd.createProcessInstance();ContextInstance ci = pi.getContextInstance();jbpmContext.setActorId(actorId);ci.setVariable("issueperson", actorId);TaskInstance ti = pi.getTaskMgmtInstance().createStartTaskInstance();ti.end();} catch (Exception e) {e.printStackTrace();} finally {jbpmContext.close();}}/** * 2.部门经理审批 * * @param actorId */public void managerApprove(String actorId) {JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();try {@SuppressWarnings("unchecked")List<TaskInstance> list = jbpmContext.getTaskList(actorId);for (TaskInstance taskInstance : list) {taskInstance.end();}} catch (Exception e) {e.printStackTrace();} finally {jbpmContext.close();}}/** * 3.财务拨款 * * @param actorId */public void cashierApprove(String actorId) {JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();try {@SuppressWarnings("unchecked")List<TaskInstance> list = jbpmContext.getTaskList(actorId);for (TaskInstance taskInstance : list) {taskInstance.end();}} catch (Exception e) {e.printStackTrace();} finally {jbpmContext.close();}}/** * 4.员工领款 * * @param actorId */public void getMoney(String actorId) {JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();try {@SuppressWarnings("unchecked")List<TaskInstance> list = jbpmContext.getTaskList(actorId);for (TaskInstance taskInstance : list) {taskInstance.end();}} catch (Exception e) {e.printStackTrace();} finally {jbpmContext.close();}}}
?
每测试一个方法,就会在数据库中的 JBPM_TASKINSTANCE 表看见相应的数据。
?
六、demo(该例子中也包含复杂一点的流程处理,带分支判断,流程开始时不带任务人)
E276-JBPM.zip