Jbpm4.4 简单请假流程
这里是用jbpm4.4+Hibernate做的简单的请假流程(采用MyEclipse 8.6+ MySql)。
一.画流程图
名称:leave.jpdl.xml
说明:
1.为apply任务节点设置属性:
2.为teacherdo任务节点设置属性:
3.为managerdo任务节点设置属性:
leave.jpdl.xml源码如下 :
<?xml version="1.0" encoding="UTF-8"?>
<process name="leave" xmlns="http://jbpm.org/4.4/jpdl">
<start g="155,147,48,48" name="start1">
<transition to="apply"/>
</start>
<task assignee="#{user}" form="apply_do.jsp" g="231,188,92,52" name="apply">
<transition to="teacherdo"/>
</task>
<task assignee="teacher" form="teacher_do.jsp" g="326,282,92,52" name="teacherdo">
<transition g="-19,-13" name="agree" to="end1"/>
<transition g="-23,-4" name="disagree" to="managerdo"/>
</task>
<end g="384,446,48,48" name="end1"/>
<task assignee="manager" form="manager_do.jsp" g="492,345,92,52" name="managerdo">
<transition to="end1"/>
</task>
</process>
二.流程发布
流程发布在deploy.jsp 页面中。核心代码如下:
<%@ page import="org.jbpm.api.*" %>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine
.getRepositoryService();
repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
response.sendRedirect("apply.jsp");
%>
三.流程实例化
3.1 流程启动
l流程的启动在start.jsp页面中。 核心代码如下:
<%@ page import="org.jbpm.api.*" %>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine
.getExecutionService();
Map map = new HashMap();
map.put("user", session.getAttribute("username"));
executionService.startProcessInstanceById(request
.getParameter("id"), map);
response.sendRedirect("apply.jsp");
%>
3.2.流程任务管理
3.2.1.申请
通过获得任务id来获得任务(task.getId)进入到apply_do.jsp页面进行申请
申请填完后提交到submit.jsp页面,完成任务。核心代码如下:
<%@page import="java.util.*,org.jbpm.api.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("taskId");
String owner = request.getParameter("user");
int day = Integer.parseInt(request.getParameter("day"));
String reason = request.getParameter("reason");
Map map = new HashMap();
map.put("day", day);
map.put("reason", reason);
taskService.completeTask(taskId, map);
response.sendRedirect("apply.jsp");
%>
3.2.2 老师审核
teacher登陆进入到apply.jsp中会看到自己需要处理的任务,点击查看跳转到teacher_do.jsp(也把任务的id传过来了),然后老师进行处理:
老师审核后跳转到submit_teacher.jsp页面中(也把result传过来了),核心代码如下:
<%@page import="java.util.*,org.jbpm.api.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("taskId");
String result = request.getParameter("result");
taskService.completeTask(taskId, result);
response.sendRedirect("apply.jsp");
%>
result为 agree则流程结束到达end 节点。Result 为disagree则流程到达managerdo节点。需要院长进行审核。
3.2.3 院长审核
manager登陆进入到apply.jsp中会看到自己需要处理的任务,点击查看跳转到manager_do.jsp(也把任务的id传过来了),然后院长进行处理:
院长点击提交后到达submit_manager.jsp页面对任务进行处理,核心代码如下:
<%@page import="java.util.*,org.jbpm.api.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("taskId");
taskService.completeTask(taskId);
response.sendRedirect("apply.jsp");
%>
一个流程运行到此结束。
四.用户登录说明
用户登录使用的是Servler+Hibernate +Filter处理,具体目录如下:
jsp页面目录
具体流程效果需要运行此项目才能体会到。
By Mr.Z