assignee =“mike” 只能分配给用户,而不能是组
candidate-groups="sales" ,sales是group常量
candidate-groups="#{dev}" dev在map变量里
task
候选人
任务可能被分配给一组用户。 其中的一个用户应该接受这个任务并完成它。
表 6.11. 任务
属性:
属性 | 类型 | 默认值 | 是否必填 | 描述 |
---|---|---|---|---|
candidate-groups | 表达式 | 可选 | 一个使用逗号分隔的组id列表。 所有组内的用户将会成为这个任务的 候选人。 | |
candidate-users | 表达式 | 可选 | 一个使用逗号分隔的用户id列表。 所有的用户将会成为这个任务的候选人。 |
<processname="leave"xmlns="http://jbpm.org/4.4/jpdl">
<startg="196,25,48,48"name="start1">
<transitionto="approval request"/>
</start>
<taskform="qhrequest.jsp"g="172,118,92,52"name="approval request"candidate-groups="sales"> //sales是group常量
<!-- //*****candidate-groups="#{dev}" 采用JBPM用户组进行处理任务 candidate-groups="#{dev}" dev在map变量里
//*****assignee="manager" 采用指定manager用户进行处理任务 ,assignee只能分配给用户,manager是用户,而不能是组
-->
<transitionto="manager approval"/>
</task>
<taskassignee="manager"form="qhmanager.jsp"g="175,217,92,52"name="manager approval">
<transitiong="-32,-8"name="approval"to="exclusive1"/>
<transitiong="128,221;124,165:-42,-18"name="reject"to="approval request"/>
</task>
<decisionexpr="#{day > 3 ? 'administrator approval' : 'end'}" g="200,308,48,48"name="exclusive1">
<transitiong="-39,-10"name="end"to="end1"/>
<transitiong="339,342:-71,-17"name="administrator approval" to="administrator approval"/>
</decision>
<taskassignee="administrator"form="qhboss.jsp"g="294,375,92,52"name="administrator approval">
<transitiong="339,457:"name="approval"to="end1"/>
</task>
<endg="199,445,48,48"name="end1"/>
</process>
HttpSession session = request.getSession();
session.setAttribute("username", request.getParameter("username"));
response.sendRedirect("qhindex.jsp");
登录页面,验证用户登录,登录成功返回qhindex.jsp
3、qhindex.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
< %@page import="java.util.*,org.jbpm.api.*,org.jbpm.api.task.*" %>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
TaskService taskService = processEngine.getTaskService();
String username = (String) session.getAttribute("username");
List<ProcessDefinition> pdList = repositoryService.createProcessDefinitionQuery().list();
List<ProcessInstance> piList = executionService.createProcessInstanceQuery().list();
//***指对指定用户处理任务列表
List<Task> taskList = taskService.findPersonalTasks(username);
//***指对指定用户组处理任务列表
List<Task> groupTaskList = taskService.findGroupTasks(username);
%>
<!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>index</title>
</head>
<body>
<a href="qhdeploy.jsp">发布新流程</a> [username: <%=username %>]<a href="qhlogin.jsp">登陆</a>
<table border="1" width="100%">
<caption>流程定义</caption>
<thead>
<tr>
<td>id</td>
<td>name</td>
<td>version</td>
<td> </td>
</tr>
</thead>
<tbody>
<%
for (ProcessDefinition pd : pdList) {
%>
<tr>
<td><%=pd.getId() %></td>
<td><%=pd.getName() %></td>
<td><%=pd.getVersion() %></td>
<td>
<a href="qhremove.jsp?id=<%=pd.getDeploymentId() %>">remove</a>
|
<a href="qhstart.jsp?id=<%=pd.getId() %>">start</a>
</td>
</tr>
<%
}
%>
</tbody>
</table>
<table border="1" width="100%">
<caption>流程实例</caption>
<thead>
<tr>
<td>id</td>
<td>activity</td>
<td>state</td>
<td> </td>
</tr>
</thead>
<tbody>
<%
for (ProcessInstance pi : piList) {
%>
<tr>
<td><%=pi.getId() %></td>
<td><%=pi.findActiveActivityNames() %></td>
<td><%=pi.getState() %></td>
<td><a href="qhview.jsp?id=<%=pi.getId() %>">view</a></td>
</tr>
<%
}
%>
</tbody>
</table>
<table border="1" width="100%">
<caption>待办任务</caption>
<thead>
<tr>
<td>id</td>
<td>name</td>
<td> </td>
</tr>
</thead>
<tbody>
<%
for (Task task : taskList) {
%>
<tr>
<td><%=task.getId() %></td>
<td><%=task.getName() %></td>
<td><a href="<%=task.getFormResourceName() %>?id=<%=task.getId() %>">view</a></td>
</tr>
<%
}
%>
</tbody>
</table>
</body>
</html>
3-1、qhdeploy.jsp:发布新流程
<%@page import="java.util.*,org.jbpm.api.*,java.util.zip.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine
.getRepositoryService();
//repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
ZipInputStream zis = new ZipInputStream(this.getClass()
.getResourceAsStream("/leave.zip"));
repositoryService.createDeployment()
.addResourcesFromZipInputStream(zis).deploy();
response.sendRedirect("qhindex.jsp");
%>
3-2、qhstart.jsp:开始启动流程
<%@page import="java.util.*,org.jbpm.api.*,java.util.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
ExecutionService executionService = processEngine
.getExecutionService();
//***********对指定用户进行启动流程
Map map = new HashMap();
map.put("owner", session.getAttribute("username"));
Map map = new HashMap();
IdentityService identityService = processEngine.getIdentityService();
identityService.createGroup("dev");
identityService.createUser("user1", "user1", "user1");
identityService.createUser("user2", "user2", "user2");
identityService.createMembership("user1", "dev");
identityService.createMembership("user2", "dev");
map.put("dev",identityService.findGroupById("dev").getId());
executionService.startProcessInstanceById(request
.getParameter("id"), map);
response.sendRedirect("qhindex.jsp");
%>
3-3、qhview.jsp查看流程视图执行节点:
3-3-1qhview.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
< %@page import="org.jbpm.api.*,java.util.*,org.jbpm.api.model.*" %>
<%
String id = request.getParameter("id");
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.findProcessInstanceById(id);
Set<String> activityNames = processInstance.findActiveActivityNames();
ActivityCoordinates ac = repositoryService.getActivityCoordinates(processInstance.getProcessDefinitionId(),activityNames.iterator().next());
%>
<!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>
<img src="qhpic.jsp?id=<%=id %>" style="position:absolute;left:0px;top:0px;">
<div style="position:absolute;border:1px solid red;left:<%=ac.getX()%>px;top:<%=ac.getY()%>px;width:<%=ac.getWidth()%>px;height:<%=ac.getHeight()%>px;"></div>
</body>
</html>
3-3-2、qhpic.jsp 画出流程图
< %@page import="org.jbpm.api.*,java.io.*"%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
RepositoryService repositoryService = processEngine
.getRepositoryService();
ExecutionService executionService = processEngine
.getExecutionService();
String id = request.getParameter("id");
ProcessInstance processInstance = executionService
.findProcessInstanceById(id);
String processDefinitionId = processInstance
.getProcessDefinitionId();
ProcessDefinition processDefinition = repositoryService
.createProcessDefinitionQuery().processDefinitionId(
processDefinitionId).uniqueResult();
InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),"leave.png");
byte[] b = new byte[1024];
int len = -1;
while ((len = inputStream.read(b, 0, 1024)) != -1) {
response.getOutputStream().write(b, 0, len);
}
%>
3-4、进入表单处理任务<a href="<%=task.getFormResourceName() %>?id=<%=task.getId() %>">view</a>
表单定义:
leave.jpdl.xml
<task form="qhrequest.jsp" g="172,118,92,52" name="申请" candidate-groups="#{dev}"//指定用户组办理任务 ||assignee="manager" //指定用户办理任务>
<transition to="经理审批"/>
</task>
qhrequest.jsp:
<fieldset>
<legend>申请</legend>
<form action="qhsubmit.jsp" method="post">
<input type="hidden" name="taskId" value="${param.id}">
申请人:<input type="text" name="owner" value="${sessionScope['username']}"/><br/>
请假时间:<input type="text" name="day" value=""/><br/>
请假原因:<textarea name="reason"></textarea><br/>
<input type="submit"/>
</form>
</fieldset>
3-5、qhsubmit.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("owner");
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("qhindex.jsp");
%>
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("id");
Task task = taskService.getTask(taskId);
%>
<fieldset>
<legend>经理审核</legend>
<form action="qhsubmit_manager.jsp" method="post">
<input type="hidden" name="taskId" value="${param.id}">
申请人:<%=taskService.getVariable(taskId, "owner") %><br/>
请假时间:<%=taskService.getVariable(taskId, "day") %><br/>
请假原因:<%=taskService.getVariable(taskId, "reason") %><br/>
<input name="result" type="submit" value="批准"/><input name="result" type="submit" value="驳回"/>
</form>
</fieldset>
< %@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");
result = new String(result.getBytes("ISO-8859-1"), "UTF-8");
taskService.completeTask(taskId, result);
response.sendRedirect("qhindex.jsp");
%>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("id");
Task task = taskService.getTask(taskId);
%>
<legend>老板审核</legend>
<form action="qhsubmit_boss.jsp" method="post">
<input type="hidden" name="taskId" value="${param.id}">
申请人:<%=taskService.getVariable(taskId, "owner") %><br/>
请假时间:<%=taskService.getVariable(taskId, "day") %><br/>
请假原因:<%=taskService.getVariable(taskId, "reason") %><br/>
<input type="submit" value="批准"/>
</form>
</fieldset>
<%
ProcessEngine processEngine = Configuration.getProcessEngine();
TaskService taskService = processEngine.getTaskService();
String taskId = request.getParameter("taskId");
taskService.completeTask(taskId);
response.sendRedirect("qhindex.jsp");
%>