jbpm4 web整合学习

环境 Eclipse(ee版),tomcat6.0,jdk1.6

 

今天初学jbpm4 ,记录下过程,下面代码参考临远老师的视屏。

 

这个是公司请假流程图


jbpm4 web整合学习_第1张图片
第一个task 申请:expression #{owner}

经理审批  :expression manager

老板审批:expression boss

decision   : expression      #{day >3 ? '老板审批' :  '结束'}

 

leave.jpdl.xml

 

<?xml version="1.0" encoding="UTF-8"?>

<process name="leave" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="156,26,68,57" name="start1">
      <transition to="申请"/>
   </start>
   <task assignee="#{owner}" form="request.jsp" g="136,128,92,54" name="申请">
      <transition to="经理审批"/>
   </task>
   <task assignee="manager" form="manager.jsp" g="131,219,98,55" name="经理审批">
      <transition g="-34,-9" name="批准" to="exclusive1"/>
      <transition g="308,247;312,156:-45,-22" name="驳回" to="申请"/>
   </task>
   <decision expr="#{day >3 ? '老板审批' :  '结束'}" g="152,318,65,56" name="exclusive1">
      <transition g="-28,-8" name="结束" to="end1"/>
      <transition g="-30,-22" name="老板审批" to="老板审批"/>
   </decision>
   <task assignee="boss" form="boss.jsp" g="284,334,82,62" name="老板审批">
      <transition to="end1"/>
   </task>
   <end g="157,408,72,52" name="end1"/>
</process>
 

 

首先是login.jsp

 

<form action="doLogin.jsp">
	用户名:<input type="text" name="username"/>
	<button type="submit">登入</button>
</form>
 

 

doLogin.jsp

 

<%
	String username=request.getParameter("username");
 	session.setAttribute("username",username);
 	response.sendRedirect("index.jsp");
 
 %>

 

 index.jsp

 

<%
	ProcessEngine processEngine=Configuration.getProcessEngine();
	RepositoryService repositoryService=processEngine.getRepositoryService();
	
	ExecutionService executionService=processEngine.getExecutionService();
	TaskService taskService=processEngine.getTaskService();
	
	String username=(String)session.getAttribute("username");
	
	List<ProcessDefinition> list=repositoryService.createProcessDefinitionQuery().list();
	List<ProcessInstance> piList=executionService.createProcessInstanceQuery().list();
	List<Task> taskList=taskService.findPersonalTasks(username);
%>
<body>
	<a href="deploy.jsp">deploy new process</a><br>[username: <%=username %>]<a href="login.jsp">登入</a>
	<table>
		<tr><td> 流程定义</td></tr>
	    <tr>
	    <td>ID:</td>
	    <td>流程名:</td>
	    <td>Version:</td>
	    </tr>
	    <%
			for(ProcessDefinition pd : list)
			{
		%>
		<tr>
		<td><%=pd.getId()%></td>
		<td><%=pd.getName()%></td>
		<td><%=pd.getVersion() %></td>
		<td>
		<a href="remove.jsp?id=<%=pd.getDeploymentId() %>">remove</a>
		||||
		<a href="start.jsp?id=<%=pd.getId() %>">start</a>
		</td>
		</tr>
		<%
			}
		%>
	</table> 
	<table>
		<tr><td>流程实例</td></tr>
	    <tr>
	    <td>ID:</td>
	    <td>activity:</td>
	    <td>state:</td>
	    </tr>
	    <%
			for(ProcessInstance pi : piList)
			{
		%>
		<tr>
		<td><%=pi.getId()%></td>
		<td><%=pi.findActiveActivityNames()%></td>
		<td><%=pi.getState() %></td>
		<td>
		<!-- <a href="view.jsp?id=<%=pi.getId() %>">view</a> -->
		</td>
		</tr>
		<%
			}
		%>
	</table> 
	
	<table>
		<tr><td>代办任务</td></tr>
	    <tr>
	    <td>ID:</td>
	    <td>name:</td>
	    </tr>
	    <%
			for(Task task : taskList)
			{
		%>
		<tr>
		<td><%=task.getId()%></td>
		<td><%=task.getName()%></td>
		<td>
                //读取form的内容
		<a href="<%=task.getFormResourceName() %>?id=<%=task.getId() %>">view</a>
		</td>
		</tr>
		<%
			}
		%>
	</table> 
</body>

 

 点击deploy new process,发布新流程定义

deploy.jsp

 

<%
		//发布新流程
	ProcessEngine processEngine=Configuration.getProcessEngine();
	RepositoryService repositoryService=processEngine.getRepositoryService();
	repositoryService.createDeployment().addResourceFromClasspath("leave.jpdl.xml").deploy();
	
	response.sendRedirect("index.jsp");
%>
 

 

点击start,启动新的流程实例

start.jsp

 

<% 
	
		
		ProcessEngine processEngine=Configuration.getProcessEngine();
		ExecutionService executionService=processEngine.getExecutionService();
		
		Map<String,Object> map=new HashMap<String,Object>();
                //将用户名给了owner
		map.put("owner",session.getAttribute("username"));
		
		executionService.startProcessInstanceById(request.getParameter("id"),map);
		
		response.sendRedirect("index.jsp");
	
	
	%>

 

 user 申请:request.jsp

 

<body>
  <fieldset>
  	<legend>申请表</legend>
  	<form action="submit.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>
</body>

 

 完成申请:submit.jsp

 

<%
		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<String,Object> map=new HashMap<String,Object>();
		map.put("day",day);
		map.put("reason",reason);
                //没用名称的外向转移,map作为变量进入流程
		taskService.completeTask(taskId,map);
		
		response.sendRedirect("index.jsp");
	 %>	

 

 流程进入 经理审批:使用用户名为manager登入,进入该流程 manager.jsp

 

 <%
    ProcessEngine processEngine=Configuration.getProcessEngine();
	TaskService taskService=processEngine.getTaskService();
	
	String taskId=request.getParameter("id");
	Task task=taskService.getTask(taskId);
    
    %>
<body>
	<table>
	<tr><td>经理审核</td></tr>
	</table>
	<form action="submit_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>
</body>

 

 然后完成经理审批:submit_manger.jsp

 

<%
		String result=new String(request.getParameter("result").getBytes("iso8859_1"), "utf-8");
	//System.out.println("resutlt:"+result);
			ProcessEngine processEngine=Configuration.getProcessEngine();
			TaskService taskService=processEngine.getTaskService();
			
			String taskId=request.getParameter("taskId");
			
			taskService.completeTask(taskId,result);
			
			response.sendRedirect("index.jsp");
	
	%>
 

 

在这里有流程的驳回和批准,通过从manager.jsp中传进来的result的值来判断执行哪条

taskService.completeTask(taskId,result);有名字的外向转移。

 

如果day<=3 这所有的路程结束,反之,进入老板审批:boss.jsp

 

<%
    ProcessEngine processEngine=Configuration.getProcessEngine();
	TaskService taskService=processEngine.getTaskService();
	
	String taskId=request.getParameter("id");
	Task task=taskService.getTask(taskId);
    
    %>
<body>
	<table>
	<tr><td>老板审核</td></tr>
	</table>
	<form action="submit_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 name="result" type="submit" value="批准">
	</form>
</body>

 

 submit_boss.jsp 完成审批

 

<%
			ProcessEngine processEngine=Configuration.getProcessEngine();
			TaskService taskService=processEngine.getTaskService();
			
			String taskId=request.getParameter("taskId");
			
			taskService.completeTask(taskId);
			
			response.sendRedirect("index.jsp");
	
	%>

 

 这里taskService.completeTask(taskId);没用名称的外向转移,且没有要传入的变量

 

以上过程遇到的问题

建立环境时,由于是tomcat6.0版本的,有jar包的冲突,将项目中jbpm的juel-api.jar,juel-impl.jar,juel-engine.jar 三个包移到tomcat lib下

 

在使用taskService.completeTask时,会遇到No unnamed transitions were found for the task 'XXX

具体参考http://www.family168.com/tutorial/jbpm4.0/html/services.html#taskservice

 

 

 

 

 

你可能感兴趣的:(eclipse,tomcat,Web,jsp,jbpm)