您的位置:首页 > 产品设计 > 产品经理

初学JBPM—简单的请假流程

2010-05-09 22:12 393 查看


这是简单的流程图

下面是配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<process name="leave" xmlns="http://jbpm.org/4.3/jpdl">
<start g="240,0,48,48" name="start1">
<transition g="-22,-22" name="开始" to="请假申请"/>
</start>
<task assignee="zhangsan" g="224,133,92,52" name="请假申请">
<transition g="-30,-14" name="是否是经理" to="领导判断"/>
</task>
<decision expr="${manager}" g="237,262,48,48" name="领导判断">
<transition g="-37,-7" name="no" to="经理审批"/>
<transition g="-3,-15" name="yes" to="老板审批"/>
</decision>
<task assignee="jingli" g="18,357,92,52" name="经理审批">
<transition g="-34,-5" name="是否超过3天" to="天数判断"/>
</task>
<task assignee="laoban" g="470,380,92,52" name="老板审批">
<transition g="-2,-10" name="老板审批通过" to="结束"/>
</task>
<end g="392,515,48,48" name="结束"/>
<decision expr="${day>3? '大于3天':'小于3天'}" g="244,390,48,48" name="天数判断">
<transition g="-24,-7" name="小于3天" to="结束"/>
<transition g="-33,-22" name="大于3天" to="老板审批"/>
</decision>
</process>


JBPM的核心:

ProcessEngieen 流程引擎

RepositoryServoce 主要用于发布流程定义

ExecutionService 流程执行服务

TaskService 主要是任务服务

一下是主要的逻辑:

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="org.jbpm.api.*"%>
<%@page import="java.util.*"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3><a href="leave?param=deploy" mce_href="leave?param=deploy">发布流程</a></h3>
<h3><a href="leave?param=leave&name=zhangsan" mce_href="leave?param=leave&name=zhangsan">请假</a></h3>
<h3><a href="leave?param=task&name=jingli" mce_href="leave?param=task&name=jingli" target="_blank">经理待办</a></h3>
<h3><a href="leave?param=task&name=laoban" mce_href="leave?param=task&name=laoban" target="_blank">老板待办</a></h3>
<table border="1" style="width: 800px;">
<tr align="center">
<td colspan="5">流程定义</td>
</tr>
<tr>
<td>ID</td>
<td>KEY</td>
<td>名称</td>
<td>版本</td>
<td>操作</td>
</tr>
<c:forEach items="${pdList}" var="process">
<tr>
<td>${process.id }</td>
<td>${process.key }</td>
<td>${process.name }</td>
<td>${process.version }</td>
<td><a href="leave?param=remove&processId=${process.id }" mce_href="leave?param=remove&processId=${process.id }">移除</a></td>
</tr>
</c:forEach>
</table>

<br>
<br>
<br>
<table border="1" style="width: 800px;">
<tr align="center">
<td colspan="4">流程实例</td>
</tr>
<tr>
<td>ID</td>
<td>Key</td>
<td>状态</td>
<td>查看流程图</td>
</tr>
<c:forEach items="${piList}" var="pi">
<tr>
<td>${pi.id }</td>
<td>${pi.key }</td>
<td>${pi.state }</td>
<td><a href="image.jsp?id=${pi.id}" mce_href="image.jsp?id=${pi.id}" target="_blank">查看流程图</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>


task.jsp

<%@page contentType="text/html;charset=UTF-8" %>
<%@page import="org.jbpm.api.*" %>
<%@page import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>请假审批</title>
</head>
<body>
<table width=600 border=1>
<tr><td colspan="8">任务列表</td></tr>
<tr>
<td>ID</td>
<td>名称</td>
<td>分配人</td>
<td>创建时间</td>
<td>持续时间</td>
<td>优先级</td>
<td>描述</td>
<td>操作</td>
</tr>
<c:forEach var="task" items="${taskList}">
<tr>
<td>${task.id}</td>
<td>${task.name}</td>
<td>${task.assignee}</td>
<td>${task.createTime}</td>
<td>${task.duedate}</td>
<td>${task.priority}</td>
<td>${task.description}</td>
<td>
<a href="leave?param=confirm&taskId=${task.id }&name=${task.assignee}" mce_href="leave?param=confirm&taskId=${task.id }&name=${task.assignee}">批准</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>


逻辑处理全写在一个servlet里面

package cn.com;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipInputStream;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jbpm.api.Configuration;
import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
public class LeaveServlet extends HttpServlet {
/**
* 流程操作
*/
private static final long serialVersionUID = 1L;
private ProcessEngine processEngine = null;
private RepositoryService repositoryService = null;
private List<ProcessDefinition> pdList = null;
private ProcessInstance processInstance = null;
private List<ProcessInstance> piList = null;
private ExecutionService executionService = null;
private TaskService taskService = null;
private List<Task> taskList = null;
private Task task = null;
private Execution execution = null;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
process(req, resp);
}
@Override
public void init(ServletConfig config) throws ServletException {
super.init();
processEngine = Configuration.getProcessEngine();
repositoryService = processEngine.getRepositoryService();
executionService = processEngine.getExecutionService();
taskService = processEngine.getTaskService();
}
protected void process(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String param = req.getParameter("param");
if (param.equals("deploy")) {
deploy(req, resp);
pdList = repositoryService.createProcessDefinitionQuery().list();
req.setAttribute("pdList", pdList);
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
if (param.equals("remove")) {
remove(req, resp);
pdList = repositoryService.createProcessDefinitionQuery().list();
req.setAttribute("pdList", pdList);
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
if (param.equals("leave")) {
leave(req, resp);
req.setAttribute("piList", getProcessInstance(req, resp));
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
if (param.equals("task")) {
req.setAttribute("taskList", getTask(req, resp));
req.getRequestDispatcher("/task.jsp").forward(req, resp);
}
if (param.equals("confirm")) {
confirm(req, resp);
req.setAttribute("taskList", getTask(req, resp));
req.getRequestDispatcher("/task.jsp").forward(req, resp);
}
}
// 发布流程
protected void deploy(HttpServletRequest req, HttpServletResponse resp) {
// repositoryService.createDeployment().addResourceFromClasspath(
// "leave.jpdl.xml").deploy();
ZipInputStream zis = new ZipInputStream(this.getClass()
.getResourceAsStream("/leave.zip"));
repositoryService.createDeployment()
.addResourcesFromZipInputStream(zis).deploy();
}
// 删除已发布流程
protected void remove(HttpServletRequest req, HttpServletResponse resp) {
String processId = req.getParameter("processId");
repositoryService.deleteDeployment(processId);
}
// 请假
protected void leave(HttpServletRequest req, HttpServletResponse resp) {
processInstance = executionService.startProcessInstanceByKey("leave");
String name = req.getParameter("name");
piList = executionService.createProcessInstanceQuery().list();
Map<String, Object> map = new HashMap<String, Object>();
map.put("day", 2);
map.put("manager", "no");
taskService.setVariables(taskService.findPersonalTasks("zhangsan").get(
0).getId(), map);
taskService.completeTask(taskService.findPersonalTasks("zhangsan").get(
0).getId());
}
// 经理审批
protected void confirm(HttpServletRequest req, HttpServletResponse resp) {
String taskId = req.getParameter("taskId");
task = taskService.getTask(taskId);
execution = executionService.findExecutionById(task.getExecutionId());
if (execution.getProcessInstance().isActive("经理审批")) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("day", 4);
taskService.setVariables(taskId, map);
taskService.completeTask(taskId);
}else if(execution.getProcessInstance().isActive("老板审批")){
taskService.completeTask(taskId);
}
}
// 获取任务列表
protected List<Task> getTask(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
taskList = taskService.findPersonalTasks(name);
return taskList;
}
// 获取流程实例
protected List<ProcessInstance> getProcessInstance(
HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
return executionService.createProcessInstanceQuery().list();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: