`
nwj2010
  • 浏览: 91145 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

jbpm4 web整合学习

    博客分类:
  • jbpm
阅读更多

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

 

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

 

这个是公司请假流程图



第一个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

 

 

 

 

 

  • 大小: 15.1 KB
2
1
分享到:
评论

相关推荐

    jbpm5 web整合例子

    【jbpm5 web整合例子】是一个关于如何将JBPM5工作流引擎与Web应用程序整合的实践项目,适合那些想要在Web环境中使用业务流程管理(BPM)功能的开发者。JBPM5是一个开源的工作流和业务规则管理系统,它提供了一整套...

    Jbpm4提一个web项目

    开发者可以通过研究这些源码,了解如何整合JBPM4与web应用,实现流程定义、发布、查看和删除等功能。 总结来说,JBPM4提供了一套强大的工具,用于管理和执行业务流程。在"Jbpm4Web"项目中,我们可以看到如何将这些...

    Jbpm4与SSH整合

    **JBPM4与SSH整合详解** 在企业级应用开发中,Spring(Struts2、Hibernate)集成,简称SSH,是常见的Java Web开发框架组合。它们分别负责控制层、视图层和持久层的处理,而JBPM4则是一个强大的工作流管理系统,用于...

    jbpm4整合流程例子 web流程设计器

    **jbpm4整合流程例子与Web流程设计器** jbpm4是一款功能强大的开源工作流管理系统,它为业务流程管理(BPM)提供了全面的解决方案。jbpm4的核心特性包括流程定义、执行、监控以及集成能力。在这个例子中,我们将会...

    jbpm工作流整合

    8. **集成**:jbpm能够与各种系统集成,如Spring框架、EJB、Web服务等,实现流程与其他应用的联动。 9. **错误处理和补偿**:jbpm支持异常处理和流程回退,允许在流程执行中处理错误,并通过补偿任务修复流程状态。...

    jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例

    "jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例" 这个标题表明我们将会探讨一个关于jBPM4的具体实战项目,特别关注的是如何将jBPM4版本与SSH(Spring、Struts和Hibernate)框架整合,并提供了一个完整的实现示例...

    jbpm4整合struts2+spring2.5+hibernate3.3

    在提供的"jbpm4ssh整合小实例"中,可以深入学习和理解这个集成框架的具体实现细节,包括配置文件、Action类、Service层和DAO层的编写等。这样的整合方案对于开发复杂的业务流程系统具有很高的实用价值,能够帮助...

    SSH+JBPM4.3的整合 JBPM4.3

    通过整合SSH,开发者可以在Spring的环境中无缝地使用JBPM,从而在Web应用中实现复杂的业务流程自动化。 整合SSH和JBPM4.3的过程主要涉及以下几个步骤: 1. **配置Spring**:在Spring配置文件中,需要添加对JBPM的...

    JBPM4 学习使用总结

    ### 五、JBPM4与其他技术的整合 1. **Spring集成**:JBPM4可以与Spring框架无缝集成,利用Spring的依赖注入和事务管理能力。 2. **EJB支持**:对于Java EE环境,JBPM4可以作为EJB服务运行,适应企业级应用。 3. *...

    JBPM web(SSH+JBPM) 例子

    总的来说,这个"JBPM web(SSH+JBPM)例子"为学习者提供了一个全面了解如何在Java Web环境中集成工作流管理的实践案例。通过深入研究这个项目,开发者不仅可以掌握SSH框架的使用,还能熟悉JBPM的工作流管理机制,为...

    jbpm4与ssh整合

    【jbpm4与SSH整合详解】 在Java企业级开发中,Spring(SSH中的S)、Struts(H)和Hibernate(S)是常见的三大框架,它们分别负责依赖注入、MVC层处理和持久化操作。而jbpm4则是一个流程管理系统,用于业务流程的...

    jbpm4整合struts2+spring2[1].5+hibernate3.3

    jbpm4的流程启动、结束等操作可以通过Struts2的Action类进行封装,提供Web界面操作。 - **Action与流程**:jbpm4的流程状态可以通过Struts2的Action传递给视图层,用户可以在页面上查看或操作流程。 4. **整合过程...

    ssh-jbpm 框架的整合使用

    总结,SSH-JBPM框架整合使用涉及多个层次的技术,包括Web层的Struts2、业务层的Spring、持久层的Hibernate以及工作流管理的JBPM。理解并熟练掌握这些框架的特性,可以有效提升开发效率,构建出高效、灵活的业务系统...

    jbpm—web工程

    【jbpm—web工程】是一个综合性的项目,它将jbpm(Java Business Process Management)与Struts、Spring和Hibernate这三大主流的Java开发框架进行了深度整合。该项目的主要目的是构建一个功能完善的Web应用程序,...

    jbpm +ssh整合

    **jbpm + SSH 整合详解** jbpm(Java Business Process ...通过这个例子,开发者不仅可以学习如何利用jbpm管理业务流程,还能掌握如何将这些流程与SSH框架有效地结合起来,构建出高效、可维护的Web应用程序。

    jbpm4.4整合ssh代码

    jbpm4.4与SSH的整合是Java Web开发中常见的实践,它结合了jbpm强大的工作流管理功能和SSH的灵活性,为开发高效、可维护的企业级应用提供了可能。整合过程涉及多个层面,包括框架集成、数据源配置、业务逻辑封装以及...

    jbpm4的员工请假例子原码

    这个Web项目是完全开源的,可以通过Eclipse这样的集成开发环境来打开和运行,对于学习和理解jbpm4的工作流管理功能非常有帮助。 jbpm4是一款强大的业务流程管理系统(Business Process Management System,简称BPMS...

    jbpm与ssh框架整合

    jbpm4与SSH框架的整合是将jBPM(java Business Process Managerment)这一轻量级工作流引擎与Struts2、Spring和Hibernate(SSH)这三大主流Java开发框架结合的过程,以实现企业级应用中的业务流程管理和控制。jBPM是...

    jbpm4.4与ssh框架的整合

    ### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...

Global site tag (gtag.js) - Google Analytics