`
royzhou1985
  • 浏览: 249658 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Jbpm 任务

    博客分类:
  • JBPM
阅读更多
流程中的任务是流程与操作者的一种交互手段,任务是Jbpm的核心。一般使用Task Node 节点定义。当在task node节点中定义了任务时,流程流转到此就会产生任务实例,等待任务实例的参与者处理完任务之后流程才继续执行。

任务实例在jbpm中主要体现在jbpm_taskinstance这个表中。任务的分配,一般一个任务产生一个实例,可以分配给一个参与者或者多个参与者,如果分配给了多个参与者,则只能由多个参与者的其中一个完成,当参与者处理完成之后,其他人将不会在自己的代办任务栏中看到这个任务实例。任务的分配一般有两种方式:
一种是Handler,即定义一个实现AssignmentHandler接口的类 重写assign方法。
	
<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="tasknode">
	<start-state name="start-state1">
		<transition to="task-node1"></transition>
	</start-state>
	<task-node name="task-node1">
		<task name="mytask">
			<assignment class="com.royzhou.AssignAction"></assignment>
		</task>
		<transition to="end-state1"></transition>
	</task-node>
	<end-state name="end-state1"></end-state>
</process-definition>


自定义实现类
package com.royzhou.action;

import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.taskmgmt.def.AssignmentHandler;
import org.jbpm.taskmgmt.exe.Assignable;

public class AssignAction implements AssignmentHandler {

	public void assign(Assignable assignable, ExecutionContext executionContext)
			throws Exception {
		assignable.setActorId("royzhou");//单一参与者
		//assignable.setPooledActors(new String[]{"royzhou","jane"});
	}
}

另外一种是swimlane方式,先定义好泳道swimlane,然后在任务中调用。(类似全局变量)具体使用如下(仍然使用前面的action类):
	<?xml version="1.0" encoding="UTF-8"?>

<process-definition  xmlns="urn:jbpm.org:jpdl-3.2"  name="tasknode">
	<swimlane name="taskassign">
		<assignment class="com.royzhou.AssignAction"></assignment>
	</swimlane>
	<start-state name="start-state1">
		<transition to="task-node1"></transition>
	</start-state>
	<task-node name="task-node1">
		<task name="mytask" swimlane="taskassign">
		</task>
		<transition to="end-state1"></transition>
	</task-node>
	<end-state name="end-state1"></end-state>
</process-definition>

此外还有其他几种方式:expression(需要结合jpdl身份认证组件)、pooled actors、actor方式。注意:泳道只初始化一次,这是他的局限性。可以结合handler方式。
如果使用pooled actors、actor方式必须注意,不可以使用pooled actors代替actor,因为pooled actors指的是潜在参与者而actor为指定参与者。

一般任务实例的生命周期分为:task¬-create、task-assign、task-start、task-end。不过task-assign只有在任务分配的时候才会执行。一般来说执行的顺序是这样的:
task¬-createtask-assigntask-starttask-end

任务控制器taskController的作用主要是用来处理输入输出,与流程变量打交道。
<task name="mytask">
			<controller>
				<variable name="a" access="read,write" mapped-name="a"></variable>
				<variable name="b" access="read,write,required" mapped-name="mappedb"></variable>
				<variable name="c" access="read" mapped-name="mappedc"></variable>
				<variable name="d" access="write"></variable>
			</controller>
		</task>


在上面代码中,可以看到access有三个可选值:
Read:表示任务实例初始化时会从流程实例上下文中读取key为name的变量的值进行赋值

Write:表示任务完成之后写回流程上下文,如果设置了mapped-name的话,则用mapped-name作为key写回(通过setVariable(String key,Object object)完成。)
如果没有设置mapped-name则使用name为key写回
Required:在设置了write的情况下,如果设置了required则必须将值写回流程上下文,否则会抛出异常IllegalArgumentException

任务实例变量的获取可以通过taskinstance.getVariableInstances()获取(access中有read的变量),返回的是一个Map。同样当我们为taskInstance写回变量的时候可以通过taskInstance.addVariables(Map map)来设置。(只设置access中有write的变量)

一般任务创建之后需要对任务的执行人做相应的提醒。Jbpm中有两种方式
第一种是:设置任务的notify属性,在任务分配的时候对执行人提醒,配置如下:
	<task-node name="task-node1">
		<task name="mytask" notify="true">
		</task>
		<transition to="end-state1"></transition>
	</task-node>

使用这种方式时必须在jbpm.mail.template.xml文件中添加一个模版:task-assign

第二种是:设置任务的reminder属性,这种方式是任务分配完之后在duedate之后定时repeat时间对执行人提醒,需要jbpm的任务调度服务支持(必须开启jbpm任务调度服务)。
Jbpm的任务调度主要是使用一个定时器,定时扫描jbpm_job这张表,看看有没有job需要执行。
要实现jbpm的任务调度必须开启jbpm任务调度服务,代码如下:
	JbpmConfiguration configuration = JbpmConfiguration.getInstance();
	configuration.getJobExecutor().start();

使用reminder的配置如下:
	<task name="mytask">
			<reminder duedate="30 seconds" repeat="20 seconds"/>
		</task>

使用这种方式时必须在jbpm.mail.template.xml文件中添加一个模版:task-reminder

上面两种设置方法都涉及到邮件发送,邮件发送的配置类似之前的mail-node节点。不多做解释。
分享到:
评论

相关推荐

    jbpm任务分配管理.doc

    jbpm任务分配管理.doc,介绍任务是如何分配的

    JBPM3.2与Spring结合时任务调度的实现.doc

    JBPM3.2与Spring结合时任务调度的实现.doc

    jbpm开发指南--jbpm全面介绍

    通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...

    JBPM采购申请系统——09_任务实例与任务分配.7z

    JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——09_任务实例与任务分配.7z JBPM采购申请系统——...

    JBPM数据库表说明.doc

    1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表 7 1.10 JBPM_MODULEDEFINITION:流程模块定义表 8 1.11JBPM_EXCEPTIONHANDLER:流程异常处理器表 8 1.12 JBPM_DECISIONCONDITION:...

    JBPM采购申请系统——10_任务事件与任务控制器.7z

    JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请系统——10_任务事件与任务控制器.7z JBPM采购申请...

    jbpm7示例(jbpm-7.3.0.Final-examples)

    2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务流程管理(BPM)和案例管理解决方案。它支持流程和案例的完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来...

    jbpm完整示例 任务列表 权限管理

    一个非常完整的示例 绝对值得一看 我发起的任务 待办任务 经办任务 已办结任务 原创

    JBPM5 用户指南

    12.2.2 将任务组件链接到jBPM引擎 79 12.2.3 启动任务管理组件 81 12.2.4 和任务管理组件的交互 83 12.3 人工任务管理接口 84 12.3.1 Eclipse integration 84 12.3.2 基于Web的任务视图 84 第十三章 特定领域的流程 ...

    JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子

    JBPM5工作流引擎 S2SH+JBPM4.4...4. 注销,登录boss/manager处理任务 关于taskList.jsp页面js里报错的问题,知道怎么弄的麻烦告诉我一下,不知道直接忽略即可,运行时没错的;applicationContext的drools报错也是如此

    JBPM4.4视频教程(22集附源码)

    【】(01)jbpm4.4简介【】(02)JBPM4.4开发环境搭建【】(03)jbpm4.4环境搭建续【】(04)jbpm4.4配置文件和开发前准备【】(05)jbpm4.4部署流程发起流程实例【】(06)jbpm4.4完成任务查看任务当前节点【】(07)jbpm4.4 资源...

    JBPM采购申请系统——11_讲任务调度.7z

    JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请系统——11_讲任务调度.7z JBPM采购申请...

    JBPM5权威指南

    12.2.2 将任务组件链接到jBPM引擎 79 12.2.3 启动任务管理组件 81 12.2.4 和任务管理组件的交互 83 12.3 人工任务管理接口 84 12.3.1 Eclipse integration 84 12.3.2 基于Web的任务视图 84 第十三章 特定领域的流程 ...

    jbpm教程

    JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制. &lt;br&gt;JBoss jBPM 只有最小的倚赖...

    JBoss jBPM

    JBoss jBPM 是一个复杂的可扩展的... JBoss jBPM 有直观的流程语言来表示商业流程图的术语比如,任务,异步通讯的等待状态,定时器,自动操作等等.把这些操作绑在一起,, JBoss jBPM 就有了最强大和易扩展性的控制流机制.

    jbpm4.4 动态设置参与人数

    jbpm4.4流程确定的情况下,有时候完成了一个步骤人数不确定,在任务发布的时候有领导确定参与完成的人员,动态设置参与人数

    JBPM工作流实战_使用泳道为多个任务指定相同的参与者视频 07

    JBPM工作流实战_使用泳道为多个任务指定相同的参与者视频

    jbpm4.4 流程运转+驳回+分配组任务+ssh2

    jbpm4.4 流程运转+驳回+分配组任务+ssh2

    JBPM修改数据库教程以及实例

    如何将原有的H2数据库修改为指向mysql或者postgresql数据库。附实例

    JBPM工作流开发指南

    3.3.6 task-node (任务节点) 15 3.3.7 fork(分支) 16 3.3.8 join(联合) 17 3.3.9 decision(决策) 18 3.3.10 transition(转换) 19 3.3.11 event(事件) 20 3.3.12 action(动作) 20 3.3.13 script(脚本) 22 3.3.14 ...

Global site tag (gtag.js) - Google Analytics