在jbpm4.4开发过程中,我们需要使用其提供的接口来完成任务,为什么我们要心甘情愿的被jbpm绑架呢?主要是因为它简单呗……
1.AssignmentHandler
AssignmentHandler是jbpm为我们提供的一个绑定用户,分配任务的接口,我们可以通过实现这个接口来指定Task 的执行者,必须配合jpdl.xml下的标签和程序来使用,web环境下一般都是session中的用户。
举个例子:
一个员工提交一个请假申请,如果我们给这个Task添加一个AssignmentHandler,把员工的姓名绑定进去,那么jbpm就会知道,这个流程是这个员工创建的……
按正常逻辑请假单已经提交到了领导那,我们可以通过再实现一个AssignmentHandler接口,通过AssignmentHandler动态的对流程实例定义Actor,将领导设置成task的执行者。这样做的好处就是灵活……
当领导登录时,session中是领导的姓名,领导查自己的任务列表就会看到那份员工提交的请假单了。
- jpdl.xml的一部分(主要是<assignment-handler > 和<decision >两个标签)
- <task assignee="${name}" g="235,146,92,52" name="LeaveApplication">
- <assignment-handler class="com.mtf.jbpm.handler.NewApplicationAssignmentHandler"/> //创建请假单前绑定用户,员工
- <transition g="-113,-17" name="SubmitApply" to="ManagerApprove"/>
- </task>
- <task assignee="${name}" g="244,235,92,52" name="ManagerApprove">
- <assignment-handler class="com.mtf.jbpm.handler.ManagerApproveAssignmentHandler"/>//当请假单流转到manager那时触发,领导
- <transition g="-46,-23" name="ManagerApproved" to="DaysCheck"/>
- <transition g="-15,-35" name="ManagerDisApproved" to="end"/>
- </task>
- <decision g="67,240,48,48" name="DaysCheck">
- <handler class="com.mtf.jbpm.handler.DaysCheckHandler" /> //分支流程
- <transition g="-20,-2" name="LessThan3Days" to="HrMakeSure"/>
- <transition g="-49,-11" name="MoreThan3Days" to="ExecutiveApprove"/>
- </decision>
- 申请请假单的AssignmentHandler
- public class NewApplicationAssignmentHandler implements AssignmentHandler{
- @Override
- public void assign(Assignable assignable, OpenExecution execution)
- throws Exception {
- System.out.println("pxj 创建一leave");
- String name =(String) execution.getVariable("name");
- System.out.println(name);
- assignable.setAssignee(name);
- }
- }
- 领导的AssignmentHandler
- public class ManagerApproveAssignmentHandler implements AssignmentHandler{
- @Override
- public void assign(Assignable assignable, OpenExecution execution)
- throws Exception {
- System.out.println("经理 开始审批");
- String id = (String) execution.getVariable("parentId");
- int managerId = Integer.parseInt(id);
- EmployeeDao employeeDao = new EmployeeDaoImpl();
- Employee e= employeeDao.findEmployeeById(managerId);
- assignable.setAssignee(e.getE_name_cn());
- }
- }
其中parentId是请假单提交的时候设定的,解释一下:员工提交请假单当然是提交到自己领导那了,于是我在提交请假单的方法中查找了一下自己领导的id,存在这个parentId中,到这里面在寻找这个人的姓名(领导的名字)通过assignable.setAssignee(e.getE_name_cn()); 将这个Task的执行者设置成领导……于是乎当领导查自己的任务列表时,就能查到自己下属提交的请假单了
- 这个方法就是提交请假单的方法,应该写在前面才对,思路有些混乱……
- /**
- * submitApplication 2012-7-9
- */
- @Override
- public void submitApplication(String actorId, float days,
- ProcessInstance pi, int id) {
- String taskId = processEngine.getTaskService().createTaskQuery()
- .processInstanceId(pi.getId()).uniqueResult().getId();
- // 绑定流程
- // 寻找上级
- LeaveDao dao = new LeaveDaoImpl();
- Leaves leaves = null;
- try {
- List<Leaves> all = dao.queryParentById(id, 1);
- for (int i = 0; i < all.size(); i++) {
- leaves = all.get(i);
- }
- } catch (Exception e) {
- }
- System.out.println("TaskId" + taskId);
- Task tasks = processEngine.getTaskService().getTask(taskId);
- String executionId = tasks.getExecutionId();
- processEngine.getExecutionService().setVariable(executionId,
- "parentId",new String(leaves.getL_emp_id()+""));
- processEngine.getExecutionService().setVariable(executionId, "days",
- days);
- processEngine.getTaskService().completeTask(taskId);
- }
主要接收:流程实例id,创建人姓名,请假人id,本次总结我只想把jbpm的接口总结一下,关于流程的部分请看下部分。
- 实际上任务的分配方式有很多种
- 任务的分类与分配方式
- 任务的分类:
- 个人任务
- 方式一:指定assignee属性
- 可以指定为具体的某个String(具体某人);
- 也可以指定一个流程变量,会使用计算出的结果(结果要是String型)表示办理人。
- 方式二:
- AssignmentHandler中
- assignable.setAssignee(userId);
- 方式三:
- processEngine.getTaskService().assignTask(taskId, userId);
- 组任务
- 方式一:指定candidate-users属性
- 可以指定为具体的String(多个人之间用英文的逗号隔开);
- 也可以指定一个流程变量,会使用计算出的结果(结果要是String型,多个人之间用英文的逗号隔开)表示候选人。
- 方式二:
- AssignmentHandler中
- assignable.addCandidateUser(userId); // 添加一个组成员(候选人)
- 方式三:
- processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);
到这里,有关AssignmentHandler的问题都差不多了
2.DecisionHandler
DecisionHandler接口的作用就是根据你给传入的条件进行判断,然后返回一条让你往下继续执行的线,就跟做决定一样。
- public class DaysCheckHandler implements DecisionHandler {
- @Override
- public String decide(OpenExecution execution) {
- //加入判断天数的逻辑
- String days =execution.getProcessInstance().getVariable("days").toString();
- float day = Float.parseFloat(days);
- if(day>3){
- return "MoreThan3Days";
- }else{
- return "LessThan3Days";
- }
- }
- }
获取前面流过来的"days" 然后返回那条线的名字就OK,XML配置见上文,so easy
这两个接口还是比较常用的,我用的方式是比较简单的,但是jbpm比我们想象的灵活多了,尤其是AssignmentHandler,可以加上权限等等,一个实现服务多个用户我觉得应该也是能实现的,唉~~设计模式没学好,晚上继续看!!!
相关推荐
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM...总的来说,jBPM4.4是企业级业务流程自动化的重要工具,通过深入学习这两份资料,开发者和业务人员都能够充分利用其功能,提升流程管理的效率和灵活性。
三、jbpm4.4学习路径 1. 基础概念:首先需要了解BPM的基本概念,如流程实例、任务、事件、信号等。 2. 工具使用:学习使用jbpm提供的图形化建模工具,创建和编辑流程模型。 3. API及编程接口:深入理解jbpm的API,如...
JBPM4.4学习文档.ppt
3. **用户界面**:为了便于非技术背景的用户使用,jBPM 4.4提供了图形化的设计工具,允许用户通过拖放操作来构建复杂的业务流程,而无需编写任何代码。 4. **事件驱动架构**:jBPM 4.4采用了事件驱动的架构,这意味...
通过这个入门实例,开发者可以学习到如何使用jBPM4.4进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。
以下是关于JBPM4.4中涉及到的一些核心表及其字段的详细说明: 1. **JBPM4_DEPLOYMENT** 表: - **DBID**: 流程模版的唯一标识,非空。 - **NAME**: 流程模版的名称,可以为空。 - **TIMESTAMP**: 记录创建或更新...
**jbpm4.4中文开发指南**作为官方翻译版,为中文用户提供了详细的学习资料,涵盖了jbpm4.4的所有核心概念和技术,是新手入门和进阶的理想参考。通过阅读《jbpm4.4开发指南.doc》,读者可以系统了解jbpm的工作原理、...
#### 三、jBPM4.4环境配置示例 **1. jBPM4.4所需环境** - JDK (Java Development Kit) 5 或更高版本 - Apache Ant 1.7.0 或更高版本 **2. 下载相关资源** - jBPM:[jBPM 官方下载]...
《jBPM 4.4 用户手册》中文版提供了全面的指南,涵盖了从安装、配置、建模、执行到监控的各个环节,是学习和使用jBPM 4.4的重要参考资料。通过阅读这份手册,开发者和业务分析师可以深入了解jBPM的功能和用法,快速...
jbpm4.4学习教程是一套专为初学者设计的教育资源,旨在帮助用户掌握jbpm这一业务流程管理(Business Process Management)框架的第4.4版本。jbpm是一款开源的Java平台工具,它允许开发者设计、执行和管理业务流程,...
jBPM4.4课程文档
2. **持久化**:JBPM4.4使用JPA(Java Persistence API)进行数据持久化,使得流程实例、任务和其他相关信息能够存储在数据库中,方便查询和管理。 3. **任务服务**:JBPM提供了任务服务,允许用户分配、接收和完成...
- 随附的学习资料可能包括JBPM4.4的官方文档、教程、示例代码解析等,对于初学者来说,这些资源可以帮助理解JBPM的工作原理和使用方法。 7. **项目结构与运行** - JBPM4.4Demo项目可能包含了Maven或Gradle构建...
jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd
#### 三、搭建jBPM4.4环境 为了顺利运行jBPM4.4,首先需满足如下环境要求: - JDK标准Java版本5或更高。 - Apache Ant版本1.7.0或以上,用于执行antscripts。 接着,需下载并安装jBPM及相关的Eclipse插件。具体...
通过深入学习这两份指南,无论是开发者还是最终用户,都能获得全面的jBPM 4.4知识,从而有效地实施和管理业务流程。对于想要利用jBPM进行企业流程优化或自动化的人来说,这些都是不可或缺的参考资料。
jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...
【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...
"jBPM4.4.docx" 文件可能是关于 jbPM 4.4 示例的详细文档,它可能包含如何安装、配置、创建和运行流程实例的步骤,以及可能遇到的问题和解决办法,对于学习和使用 jbPM 4.4 是非常有价值的参考资料。 总结,jbPM ...