`
sunbin
  • 浏览: 354503 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

jbpm4.4学习总结(三)常用接口使用说明

    博客分类:
  • jbpm
 
阅读更多

 

 

 

在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 >两个标签

 

  1.    <task assignee="${name}" g="235,146,92,52" name="LeaveApplication"> 
  2.       <assignment-handler class="com.mtf.jbpm.handler.NewApplicationAssignmentHandler"/> //创建请假单前绑定用户,员工    
  3.       <transition g="-113,-17" name="SubmitApply" to="ManagerApprove"/> 
  4.    </task> 
  5.    <task assignee="${name}" g="244,235,92,52" name="ManagerApprove"> 
  6.     <assignment-handler class="com.mtf.jbpm.handler.ManagerApproveAssignmentHandler"/>//当请假单流转到manager那时触发,领导     
  7.       <transition g="-46,-23" name="ManagerApproved" to="DaysCheck"/> 
  8.       <transition g="-15,-35" name="ManagerDisApproved" to="end"/> 
  9.    </task> 
  10.     <decision g="67,240,48,48" name="DaysCheck"> 
  11.    <handler class="com.mtf.jbpm.handler.DaysCheckHandler" />   //分支流程
  12.       <transition g="-20,-2" name="LessThan3Days" to="HrMakeSure"/> 
  13.       <transition g="-49,-11" name="MoreThan3Days" to="ExecutiveApprove"/> 
  14.    </decision> 
  15.  

 

  • 申请请假单的AssignmentHandler

 

  1. public class NewApplicationAssignmentHandler implements AssignmentHandler{  
  2.  
  3.     @Override 
  4.     public void assign(Assignable assignable, OpenExecution execution)  
  5.             throws Exception {  
  6.         System.out.println("pxj 创建一leave");  
  7.         String name =(String) execution.getVariable("name");  
  8.         System.out.println(name);  
  9.         assignable.setAssignee(name);    
  10.     }  

 

  • 领导的AssignmentHandler

 

  1. public class ManagerApproveAssignmentHandler implements AssignmentHandler{  
  2.  
  3.     @Override 
  4.     public void assign(Assignable assignable, OpenExecution execution)  
  5.             throws Exception {  
  6.         System.out.println("经理 开始审批");  
  7.         String id = (String) execution.getVariable("parentId");  
  8.         int managerId = Integer.parseInt(id);  
  9.         EmployeeDao employeeDao = new EmployeeDaoImpl();  
  10.         Employee  e= employeeDao.findEmployeeById(managerId);  
  11.         assignable.setAssignee(e.getE_name_cn());  
  12.     }  

 

其中parentId是请假单提交的时候设定的,解释一下:员工提交请假单当然是提交到自己领导那了,于是我在提交请假单的方法中查找了一下自己领导的id,存在这个parentId中,到这里面在寻找这个人的姓名(领导的名字)通过assignable.setAssignee(e.getE_name_cn());  将这个Task的执行者设置成领导……于是乎当领导查自己的任务列表时,就能查到自己下属提交的请假单了

 

  • 这个方法就是提交请假单的方法,应该写在前面才对,思路有些混乱……

 

  1. /**  
  2.  * submitApplication 2012-7-9  
  3.  */ 
  4. @Override 
  5. public void submitApplication(String actorId, float days,  
  6.         ProcessInstance pi, int id) {  
  7.     String taskId = processEngine.getTaskService().createTaskQuery()  
  8.             .processInstanceId(pi.getId()).uniqueResult().getId();  
  9.     // 绑定流程  
  10.     // 寻找上级  
  11.     LeaveDao dao = new LeaveDaoImpl();  
  12.     Leaves leaves = null;  
  13.     try {  
  14.         List<Leaves> all = dao.queryParentById(id, 1);  
  15.         for (int i = 0; i < all.size(); i++) {  
  16.             leaves = all.get(i);  
  17.         }  
  18.     } catch (Exception e) {  
  19.     }  
  20.     System.out.println("TaskId" + taskId);  
  21.     Task tasks = processEngine.getTaskService().getTask(taskId);  
  22.     String executionId = tasks.getExecutionId();  
  23.     processEngine.getExecutionService().setVariable(executionId,  
  24.             "parentId",new String(leaves.getL_emp_id()+""));  
  25.     processEngine.getExecutionService().setVariable(executionId, "days",  
  26.             days);  
  27.     processEngine.getTaskService().completeTask(taskId);  

 

主要接收:流程实例id,创建人姓名,请假人id,本次总结我只想把jbpm的接口总结一下,关于流程的部分请看下部分。

 

  • 实际上任务的分配方式有很多种

 

  1. 任务的分类与分配方式  
  2.         任务的分类:  
  3.             个人任务  
  4.                 方式一:指定assignee属性  
  5.                     可以指定为具体的某个String(具体某人);  
  6.                     也可以指定一个流程变量,会使用计算出的结果(结果要是String型)表示办理人。  
  7.                 方式二:  
  8.                     AssignmentHandler中  
  9.                     assignable.setAssignee(userId);  
  10.                 方式三:  
  11.                     processEngine.getTaskService().assignTask(taskId, userId);  
  12.             组任务  
  13.                 方式一:指定candidate-users属性  
  14.                     可以指定为具体的String(多个人之间用英文的逗号隔开);  
  15.                     也可以指定一个流程变量,会使用计算出的结果(结果要是String型,多个人之间用英文的逗号隔开)表示候选人。  
  16.                 方式二:  
  17.                     AssignmentHandler中  
  18.                     assignable.addCandidateUser(userId); // 添加一个组成员(候选人)  
  19.                 方式三:  
  20.                     processEngine.getTaskService().addTaskParticipatingUser(taskId, userId, Participation.CANDIDATE);  

 

到这里,有关AssignmentHandler的问题都差不多了

 

2.DecisionHandler

 

DecisionHandler接口的作用就是根据你给传入的条件进行判断,然后返回一条让你往下继续执行的线,就跟做决定一样。

 

  1. public class DaysCheckHandler implements DecisionHandler {  
  2.     
  3.     @Override 
  4.     public String decide(OpenExecution execution) {  
  5.         //加入判断天数的逻辑  
  6.         String days =execution.getProcessInstance().getVariable("days").toString();  
  7.         float day = Float.parseFloat(days);  
  8.         if(day>3){  
  9.             return "MoreThan3Days";  
  10.         }else{  
  11.             return "LessThan3Days";  
  12.         }  
  13.     }  

 

获取前面流过来的"days" 然后返回那条线的名字就OK,XML配置见上文,so easy

 

这两个接口还是比较常用的,我用的方式是比较简单的,但是jbpm比我们想象的灵活多了,尤其是AssignmentHandler,可以加上权限等等,一个实现服务多个用户我觉得应该也是能实现的,唉~~设计模式没学好,晚上继续看!!!

 

 

分享到:
评论

相关推荐

    jBPM4.4.rar_jbpm4.4_jbpm4.4 PDF

    《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM...总的来说,jBPM4.4是企业级业务流程自动化的重要工具,通过深入学习这两份资料,开发者和业务人员都能够充分利用其功能,提升流程管理的效率和灵活性。

    jbpm4.4文档+学习资料

    三、jbpm4.4学习路径 1. 基础概念:首先需要了解BPM的基本概念,如流程实例、任务、事件、信号等。 2. 工具使用:学习使用jbpm提供的图形化建模工具,创建和编辑流程模型。 3. API及编程接口:深入理解jbpm的API,如...

    JBPM4.4学习文档.ppt

    JBPM4.4学习文档.ppt

    jbpm4.4下载地址

    3. **用户界面**:为了便于非技术背景的用户使用,jBPM 4.4提供了图形化的设计工具,允许用户通过拖放操作来构建复杂的业务流程,而无需编写任何代码。 4. **事件驱动架构**:jBPM 4.4采用了事件驱动的架构,这意味...

    jBPM4.4开发实例

    通过这个入门实例,开发者可以学习到如何使用jBPM4.4进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。

    jbpm4.4表字段说明

    以下是关于JBPM4.4中涉及到的一些核心表及其字段的详细说明: 1. **JBPM4_DEPLOYMENT** 表: - **DBID**: 流程模版的唯一标识,非空。 - **NAME**: 流程模版的名称,可以为空。 - **TIMESTAMP**: 记录创建或更新...

    jbpm4.4中文开发指南

    **jbpm4.4中文开发指南**作为官方翻译版,为中文用户提供了详细的学习资料,涵盖了jbpm4.4的所有核心概念和技术,是新手入门和进阶的理想参考。通过阅读《jbpm4.4开发指南.doc》,读者可以系统了解jbpm的工作原理、...

    jBPM4.4开发指南

    #### 三、jBPM4.4环境配置示例 **1. jBPM4.4所需环境** - JDK (Java Development Kit) 5 或更高版本 - Apache Ant 1.7.0 或更高版本 **2. 下载相关资源** - jBPM:[jBPM 官方下载]...

    jBPM 4.4用户手册 中文PDF

    《jBPM 4.4 用户手册》中文版提供了全面的指南,涵盖了从安装、配置、建模、执行到监控的各个环节,是学习和使用jBPM 4.4的重要参考资料。通过阅读这份手册,开发者和业务分析师可以深入了解jBPM的功能和用法,快速...

    jbpm4.4学习教程

    jbpm4.4学习教程是一套专为初学者设计的教育资源,旨在帮助用户掌握jbpm这一业务流程管理(Business Process Management)框架的第4.4版本。jbpm是一款开源的Java平台工具,它允许开发者设计、执行和管理业务流程,...

    jBPM4.4课程文档

    jBPM4.4课程文档

    JBPM4.4资料的其他补充

    2. **持久化**:JBPM4.4使用JPA(Java Persistence API)进行数据持久化,使得流程实例、任务和其他相关信息能够存储在数据库中,方便查询和管理。 3. **任务服务**:JBPM提供了任务服务,允许用户分配、接收和完成...

    JBPM4.4流程管理Demo(附学习资料)

    - 随附的学习资料可能包括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 schema.xsd

    jBPM4.4 详解 API 中文

    #### 三、搭建jBPM4.4环境 为了顺利运行jBPM4.4,首先需满足如下环境要求: - JDK标准Java版本5或更高。 - Apache Ant版本1.7.0或以上,用于执行antscripts。 接着,需下载并安装jBPM及相关的Eclipse插件。具体...

    jbpm4.4开发用户指南

    通过深入学习这两份指南,无论是开发者还是最终用户,都能获得全面的jBPM 4.4知识,从而有效地实施和管理业务流程。对于想要利用jBPM进行企业流程优化或自动化的人来说,这些都是不可或缺的参考资料。

    jbpm4.4 shh2 项目示例

    jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...

    jbpm4.4+ssh

    【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...

    jBPM4.4.rar_jbpm4_jbpm4.4

    "jBPM4.4.docx" 文件可能是关于 jbPM 4.4 示例的详细文档,它可能包含如何安装、配置、创建和运行流程实例的步骤,以及可能遇到的问题和解决办法,对于学习和使用 jbPM 4.4 是非常有价值的参考资料。 总结,jbPM ...

Global site tag (gtag.js) - Google Analytics