`

【转】JBPM TASK

 
阅读更多

JBPM TASK

1) 任务分配给单个用户
org.jbpm.examples.task.assignee的例子修改一下其中的jpdl文件,代码如下:

 

<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskAssignee" xmlns ="http://jbpm.org/4.3/jpdl" > <!-- 开始节点 --> < start g ="20,20,48,48" > < transition to ="review" /> <!-- 节点启动后转入name为review的节点 --> </ start > <!-- 任务节点 --> < task name ="review" assignee ="#{owner}" g ="96,16,127,52" > <!-- #{}中的参数表示变量名,此处的变量名为owner --> < transition to ="wait" /> <!-- 节点执行后转入name为wait的节点 --> </ task > <!-- 等待节点 --> < state name ="wait" g ="255,16,88,52" /> </ process >

 

 

 

部署完流程后,启动流程实例并分配给owner=HanDou的用户:

Map < String, Object > variables = new HashMap < String, Object > (); variables.put( " owner " , " HanDou " ); ProcessInstance processInstance = executionService.startProcessInstanceByKey( " TaskAssignee " , variables);

 

 

 

通过流程实例ID,查找用户为HanDou的任务:

 

String pid = processInstance.getId(); List < Task > taskList = taskService.findPersonalTasks( " HanDou " );

 

用户执行当前任务:
taskService.completeTask(taskList.get(0).getId());

2) 任务处理器

org.jbpm.examples.task.assignmenthandler的例子,jpdl文件源码如下: <? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskAssignmentHandler" xmlns ="http://jbpm.org/4.3/jpdl" > < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" g ="96,16,127,52" > <!-- 配置处理器类为org.jbpm.examples.task.assignmenthandler.AssignTask --> < assignment-handler class ="org.jbpm.examples.task.assignmenthandler.AssignTask" > <!-- 配置AssignTask类中的属性assignee --> < field name ="assignee" > <!-- 配置AssignTask类中的属性assignee 的值为HanDou --> < string value ="HanDou" /> </ field > </ assignment-handler > < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >

 

 

 

流程发布启动流程实例后,节点流转到review,调用 org.jbpm.examples.task.assignmenthandler.AssignTask类的assign()方法,将传入的 assignee的值HanDou作为任务的候选人分配,类AssignTask必须实现AssignmentHandler接口,重写 assign(Assignable assignable, OpenExecution execution)方法。
其源码如下:

public class AssignTask implements AssignmentHandler { private static final long serialVersionUID = 1L ; String assignee; public void assign(Assignable assignable, OpenExecution execution) { assignable.setAssignee(assignee); } }

 

 

 

3) 任务分配给群组用户
org.jbpm.examples.task.candidates包中的例子:

<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskCandidates" xmlns ="http://jbpm.org/4.3/jpdl" > < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" candidate-groups ="sales-dept" g ="96,16,127,52" > <!-- 通过candidate-groups 将任务分配为sales-dept(销售部门) --> < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >

 

 

 


在流程实例发布时通过org.jbpm.api. IdentityService对象创建群组与用户之间的关系,如测试用例中:

// 创建一个sales-dept组 String dept = identityService.createGroup( " sales-dept " ); // 创建一个用户,参数为(userId,givenName,familyName) identityService.createUser( " johndoe " , " John " , " Doe " ); // 创建一个用户与群组间关系,参数为(userId,groupId,role) identityService.createMembership( " johndoe " , dept, " developer " ); 测试类的测试方法注释: public void testGroupCandidateAssignment() { // 启动流程TaskCandidates ProcessInstance processInstance = executionService.startProcessInstanceByKey( " TaskCandidates " ); // 查询群组任务 ,调用方法findGroupTasks( String userId) List < Task > taskList = taskService.findGroupTasks( " johndoe " ); Task task = taskList.get( 0 ); // 将任务委派给johndoe,成为johndoe的assigned任务 taskService.takeTask(task.getId(), " johndoe " ); // 处理完毕后群组任务为空 taskList = taskService.findGroupTasks( " johndoe " ); assertEquals( 0 , taskList.size()); // 查询 johndoe的assigned任务 taskList = taskService.findPersonalTasks( " johndoe " ); task = taskList.get( 0 ); // johndoe 处理任务 taskService.completeTask(task.getId()); }

 

 

注意点:当群组任务在没有调用taskService# takeTask方法之前,调用taskService#findGroupTasks(userId)是查询不到代办任务的,只有将任务委派给某个用户之后这个用户才可处理任务。

4) 任务分配之泳道
以3)的jpdl文件为例,添加泳道的定义(加粗斜体部分),详细如下:

<? xml version="1.0" encoding="UTF-8" ?> < process name ="TaskCandidates" xmlns ="http://jbpm.org/4.3/jpdl" > <!-- 定义泳道,将任务委派给群组sales-dept --> < swimlane name ="sales representative" candidate-groups ="sales-dept" /> < start g ="20,20,48,48" > < transition to ="review" /> </ start > < task name ="review" swimlane ="sales representative" <!-- 通过swimlane将任务指向name为sales representative的泳道定义-- > g="96,16,127,52"> <!-- 通过candidate-groups 将任务分配为sales-dept(销售部门) --> < transition to ="wait" /> </ task > < state name ="wait" g ="255,16,88,52" /> </ process >

 


当流程定义在jpdl文件定义完毕后,其处理过程同3)的Java类的调用和处理。

 

5) 任务分配并传递参数
在任务分配的同时,实际需求中往往需要添加其他的参数,比如和任务相关的业务数据,可以通过流程实例ID与业务数据的某标识ID关联,业务数据存入业务数据表,jbpm数据存入jbpm数据表中;与流程相关的参数,还可以通过jBPM的API设置参数。
在org.jbpm.examples.task.variables.包中的测试用例TaskVariablesTest类中有:

Map < String, Object > variables = new HashMap < String, Object > (); variables.put( " category " , " big " ); variables.put( " dollars " , 100000 ); Execution execution = executionService.startProcessInstanceByKey( " TaskVariables " , variables);

 


这段是在启动一个流程时,同时传入参数variables(Map可以保存多个变量的键值对),同时,在jbpm的API中,taskService#getVariableNames(taskId)方法用于获取任务ID为taskId的任务变量集合(SET)。
variables = taskService.getVariables(taskId, variableNames);//这个方法获取的是变量的HashMap对象。

分享到:
评论

相关推荐

    jbpm一些资料

    jbpm 是一个开源的工作流管理系统,它主要用于设计、执行和管理业务流程。在这个系统中,jPDL(jbpm Process Definition Language)是用于定义流程的元数据语言,类似于 BPMN(Business Process Modeling Notation)...

    jbpm3.2表说明

    JBPM_TASK JBPM_TASK FK_TASK_PROCDEF PROCESSDEFINITION_ 一个流程可能有多个task JBPM_MODULEDEFINITION JBPM_MODULEDEFINITION FK_MODDEF_PROCDEF PROCESSDEFINITION_ 一个流程可能处在很多的模块(模块概念不...

    jbpm 数据库jbpm 数据库

    jbpm中的任务(Task)代表了流程中的一个工作单元。`ACT_RU_TASK`表存储任务的基本信息,如任务ID、任务名称、分配的用户或组、所属的流程实例等。任务可以被创建、领取、完成或转让。 4. **变量与执行上下文** ...

    jbpm4里的processDefinition、processInstance和Task的使用方法

    在jbpm4中,processDefinition、processInstance和Task是三个非常关键的概念,它们构成了流程管理的基础。 1. **ProcessDefinition**: ProcessDefinition是流程的蓝图,它定义了一个流程的结构和行为。它包含了...

    JBPM4中ProcessDefinition、ProcessInstance、Execution、Task关系和区别

    JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    用户可以通过工作列表(Task List)进行任务的接收和处理。 5. **流程监控**:jbPM提供了一个Web管理控制台,可以实时查看流程实例的状态、历史记录,以及执行过程中的各种统计信息。 ### 三、jbPM 3.2 主要特性 ...

    JBPM工作原理及表结构详解

    - **JBPM4_TASK**:任务表,记录任务的状态、参与者等信息。 - **JBPM4_VARIABLE**:流程变量表,存储流程实例中的变量值。 6. **操作示例** - **发布流程**:使用`DEPLOY`命令将流程定义发布到系统。 - **上传...

    jbpm5完整的例子

    【jbpm5完整的例子】是针对企业业务流程管理(Business Process Management, BPM)的一个实践教程,其中涵盖了jbpm5框架的多个核心功能和用法。jbPM是一个开源的工作流管理系统,它提供了强大的流程定义、执行和监控...

    jbpm jar java

    - **工作流服务**:jbpm可以通过服务组件接口(Service Task)与其他系统交互,如数据库、Web服务等。 - **事件驱动**:支持事件处理,如错误处理、信号触发等,增强了流程的灵活性。 - **规则与流程结合**:通过...

    JBPM服务部署与xfire发布webservice服务

    描述用eclipse部署JBPM服务,以及用xfire将JBPM服务发布成webservice。一、下载JBPM包并解压。。。。

    jBPM-jPDL学习笔记

    jPDL的XML元素包括但不限于:`&lt;process&gt;`(定义整个流程)、`&lt;start&gt;`(流程的起点)、`&lt;end&gt;`(流程的终点)、`&lt;task&gt;`(用户任务)、`&lt;action&gt;`(执行特定动作)、`&lt;sequenceFlow&gt;`(流程流转)和`&lt;decision&gt;`...

    jbpm的jar包(不含jbpm.jar)

    2. **任务服务**:jbpm-human-task.jar处理与人类参与者交互的任务,如分配任务、完成任务、查询任务等。它与工作流引擎协同工作,确保流程中的任务能被正确处理。 3. **规则服务**:jbpm-bpmn2-drools.jar和jbpm-...

    jbpm-5.4.0.Final

    6. **jbpm-human-task-mina-5.4.0.Final.jar** 和 **jbpm-human-task-hornetq-5.4.0.Final.jar**:这两个组件分别与Apache MINA(一个网络应用程序框架)和HornetQ(一个高性能的消息中间件)集成,提供了任务通知和...

    jbpm开发入门指南

    - **任务(Task)**:工作流程中的一个活动或操作,可以分配给特定用户或角色执行。 - **节点(Node)**:流程图中的各个步骤,包括开始节点、结束节点、任务节点、决策节点等。 - **泳道(Swimlane)**:用以...

    jbpm 4.3 pvm的使用

    newTask.setDescription("This is a new task created in JBPM."); dbSession.insert(newTask); // 更新任务的状态 TaskImpl updatedTask = dbSession.findTaskById(newTask.getId()); updatedTask.setStatus...

    JBPM文档(详解)

    - **JBPM4_TASK**:保存需要人工参与的Activity信息。 总之,jBPM为开发者提供了一套全面的工具集,用于设计、实施和监控业务流程。它通过图形化流程定义、灵活的数据管理和强大的API,帮助企业实现流程自动化,...

    jbpm相关的jar

    除此之外,jbpm还提供了工作流服务(Task Service),用于管理任务的生命周期,包括分配、领取、完成等操作。同时,jbpm提供了事件服务(Event Service)来处理流程中的事件,比如监听特定的流程事件并触发相应的...

    jbpm5源代码

    3. **jbpm-human-task**:这部分源代码专注于处理与人类参与者交互的任务。jbpm5支持定义任务分配规则,如分配给特定用户或用户组,以及任务的创建、接收、完成和委托。 4. **jbpm-gwt**:这部分源代码涉及到jbpm5...

    jbpm数据库表结构

    - **JBPM_TASK**:任务表,记录所有任务的信息。 - **JBPM_TASKACTORPOOL**:任务参与者关系表,记录任务与用户的关联关系。 - **JBPM_TASKINSTANCE**:任务实例表,记录每个任务的具体执行情况。 4. **其他支持...

    jbpm-human-task-5.1.0.Final.jar

    jbpm-human-task-5.1.0.Final.jar jbpm5

Global site tag (gtag.js) - Google Analytics