初学JBPM—简单的请假流程
来源:互联网 发布:java项目实战百度云 编辑:程序博客网 时间:2024/04/27 18:29
分类: JBPM
这是简单的流程图
下面是配置文件:
[xhtml] view plaincopyprint?
- <?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
[xhtml] view plaincopyprint?
- <%@ 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><ahref="leave?param=deploy" mce_href="leave?param=deploy">发布流程</a></h3>
- <h3><ahref="leave?param=leave&name=zhangsan" mce_href="leave?param=leave&name=zhangsan">请假</a></h3>
- <h3><ahref="leave?param=task&name=jingli" mce_href="leave?param=task&name=jingli" target="_blank">经理待办</a></h3>
- <h3><ahref="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><ahref="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><ahref="image.jsp?id=${pi.id}" mce_href="image.jsp?id=${pi.id}"target="_blank">查看流程图</a></td>
- </tr>
- </c:forEach>
- </table>
- </body>
- </html>
task.jsp
[xhtml] view plaincopyprint?
- <%@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=600border=1>
- <tr><tdcolspan="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里面
[java] view plaincopyprint?
- 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 longserialVersionUID = 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.createProcessDefinitionQ
uery().list(); - req.setAttribute("pdList", pdList);
- req.getRequestDispatcher("/index.jsp").forward(req, resp);
- }
- if (param.equals("remove")) {
- remove(req, resp);
- pdList = repositoryService.createProcessDefinitionQ
uery().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()
- .addResourcesFromZipInput
Stream(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.startProcessInstanceByKe
y("leave"); - String name = req.getParameter("name");
- piList = executionService.createProcessInstanceQue
ry().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.createProcessInstanceQue
ry().list(); - }
- }
- 初学JBPM—简单的请假流程
- 初学JBPM—简单的请假流程
- 一个Jbpm员工请假流程的实例
- 一个Jbpm员工请假流程的实例
- 一个Jbpm员工请假流程的实例
- JBPM实现请假流程
- jbpm工作流之简单请假流程例子(源码)
- 一个Jbpm员工请假流程的实例源代码下载
- JBPM4.4 入门 简单的请假流程
- JBPM学习(4):设计请假流程
- jbpm 通用流程设计,请假大家
- jbpm学习笔记(四)--请假流程的设计(1)
- jbpm学习笔记(五)--请假流程的设计(2)
- jbpm学习笔记(六)--请假流程的设计(3)
- jbpm4.4 简单请假流程
- JBPM4—请假流程
- JBPM之流程定义基本概念(通过请假流程进行解释)
- jbpm 定义请假流程 编程发布流程文件
- SQLITE3使用总结
- spring AOP的异常拦截
- spring之aop:LogAfterAdvice
- spring 编码过滤器
- MD5加密并转换成16进制字符
- 初学JBPM—简单的请假流程
- PHP数据加密
- Object(String,list,object and so on) To Json
- 走自己的程序之路
- Timstamp Util
- [线段树]POJ 2374 Fence Obstacle Course
- SSH分页
- Properties(读取、删除、写入properties文件)
- JSP中filter过滤器验证用户登录(