环境 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
分享到:
相关推荐
【jbpm5 web整合例子】是一个关于如何将JBPM5工作流引擎与Web应用程序整合的实践项目,适合那些想要在Web环境中使用业务流程管理(BPM)功能的开发者。JBPM5是一个开源的工作流和业务规则管理系统,它提供了一整套...
开发者可以通过研究这些源码,了解如何整合JBPM4与web应用,实现流程定义、发布、查看和删除等功能。 总结来说,JBPM4提供了一套强大的工具,用于管理和执行业务流程。在"Jbpm4Web"项目中,我们可以看到如何将这些...
**JBPM4与SSH整合详解** 在企业级应用开发中,Spring(Struts2、Hibernate)集成,简称SSH,是常见的Java Web开发框架组合。它们分别负责控制层、视图层和持久层的处理,而JBPM4则是一个强大的工作流管理系统,用于...
**jbpm4整合流程例子与Web流程设计器** jbpm4是一款功能强大的开源工作流管理系统,它为业务流程管理(BPM)提供了全面的解决方案。jbpm4的核心特性包括流程定义、执行、监控以及集成能力。在这个例子中,我们将会...
8. **集成**:jbpm能够与各种系统集成,如Spring框架、EJB、Web服务等,实现流程与其他应用的联动。 9. **错误处理和补偿**:jbpm支持异常处理和流程回退,允许在流程执行中处理错误,并通过补偿任务修复流程状态。...
"jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例" 这个标题表明我们将会探讨一个关于jBPM4的具体实战项目,特别关注的是如何将jBPM4版本与SSH(Spring、Struts和Hibernate)框架整合,并提供了一个完整的实现示例...
在提供的"jbpm4ssh整合小实例"中,可以深入学习和理解这个集成框架的具体实现细节,包括配置文件、Action类、Service层和DAO层的编写等。这样的整合方案对于开发复杂的业务流程系统具有很高的实用价值,能够帮助...
通过整合SSH,开发者可以在Spring的环境中无缝地使用JBPM,从而在Web应用中实现复杂的业务流程自动化。 整合SSH和JBPM4.3的过程主要涉及以下几个步骤: 1. **配置Spring**:在Spring配置文件中,需要添加对JBPM的...
### 五、JBPM4与其他技术的整合 1. **Spring集成**:JBPM4可以与Spring框架无缝集成,利用Spring的依赖注入和事务管理能力。 2. **EJB支持**:对于Java EE环境,JBPM4可以作为EJB服务运行,适应企业级应用。 3. *...
总的来说,这个"JBPM web(SSH+JBPM)例子"为学习者提供了一个全面了解如何在Java Web环境中集成工作流管理的实践案例。通过深入研究这个项目,开发者不仅可以掌握SSH框架的使用,还能熟悉JBPM的工作流管理机制,为...
【jbpm4与SSH整合详解】 在Java企业级开发中,Spring(SSH中的S)、Struts(H)和Hibernate(S)是常见的三大框架,它们分别负责依赖注入、MVC层处理和持久化操作。而jbpm4则是一个流程管理系统,用于业务流程的...
jbpm4的流程启动、结束等操作可以通过Struts2的Action类进行封装,提供Web界面操作。 - **Action与流程**:jbpm4的流程状态可以通过Struts2的Action传递给视图层,用户可以在页面上查看或操作流程。 4. **整合过程...
总结,SSH-JBPM框架整合使用涉及多个层次的技术,包括Web层的Struts2、业务层的Spring、持久层的Hibernate以及工作流管理的JBPM。理解并熟练掌握这些框架的特性,可以有效提升开发效率,构建出高效、灵活的业务系统...
【jbpm—web工程】是一个综合性的项目,它将jbpm(Java Business Process Management)与Struts、Spring和Hibernate这三大主流的Java开发框架进行了深度整合。该项目的主要目的是构建一个功能完善的Web应用程序,...
**jbpm + SSH 整合详解** jbpm(Java Business Process ...通过这个例子,开发者不仅可以学习如何利用jbpm管理业务流程,还能掌握如何将这些流程与SSH框架有效地结合起来,构建出高效、可维护的Web应用程序。
jbpm4.4与SSH的整合是Java Web开发中常见的实践,它结合了jbpm强大的工作流管理功能和SSH的灵活性,为开发高效、可维护的企业级应用提供了可能。整合过程涉及多个层面,包括框架集成、数据源配置、业务逻辑封装以及...
这个Web项目是完全开源的,可以通过Eclipse这样的集成开发环境来打开和运行,对于学习和理解jbpm4的工作流管理功能非常有帮助。 jbpm4是一款强大的业务流程管理系统(Business Process Management System,简称BPMS...
jbpm4与SSH框架的整合是将jBPM(java Business Process Managerment)这一轻量级工作流引擎与Struts2、Spring和Hibernate(SSH)这三大主流Java开发框架结合的过程,以实现企业级应用中的业务流程管理和控制。jBPM是...
### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...