你的位置:首页 > 信息动态 > 新闻中心
信息动态
联系我们

Flowable入门系列文章55 - 任务侦听器

2021-11-14 8:11:24

一个任务监听器被用来执行自定义的Java逻辑或一个任务相关事件发生的表达式。

任务监听器只能作为用户任务的子元素添加到流程定义中。请注意,由于任务侦听器是Flowable特定的构造,因此这也必须作为BPMN 2.0扩展元素的子元素和可流动的名称空间发生。

<userTask id="myTask" name="My Task" >
<extensionElements>
<flowable:taskListener event="create" class="org.flowable.MyTaskCreateListener" />
</extensionElements>
</userTask>

一个任务监听器支持以下属性:

  • event(必需):将调用任务侦听器的任务事件的类型。可能的事件是
    • create:创建任务并设置所有任务属性时发生。
    • 分配:当任务分配给某人时发生。注:当流程执行到达一个userTask,第一个任务事件将被解雇,之前的创建事件。这看起来似
      乎是一种不自然的秩序,但其原因是务实的:在收到创建事件时,我们通常要检查包括受让人在内的任务的所有属性。
    • 完成:发生在任务完成时,以及从运行时数据中删除任务之前。
    • 删除:在任务即将被删除之前发生。请注意,任务通过completeTask完成后也会执行。
  • class:必须调用的委托类。这个类必须实现这个org.flowable.engine.delegate.TaskListener接口。
public class MyTaskCreateListener implements TaskListener {
	public void notify(DelegateTask delegateTask) {
		// Custom logic goes here
	}
}

也可以使用字段注入将流程变量或执行传递给委托类。请注意,委托类的实例是在流程部署上创建的(就像Flowable中的任何类委托一样),这意味着实例在所有流程实例执行之间共享。

  • 表达式 :(不能和class属性一起使用):指定事件发生时将被执行的表达式。可以将DelegateTask对象和事件名称(使用task.eventName)作为参数传递给被调用对象。
<flowable:taskListener event="create" expression="${myObject.callMethod(task, task.eventName)}" />
  • delegateExpression允许您指定一个解析为实现该TaskListener接口的对象的表达式,类似于服务任务。
<flowable:taskListener event="create" delegateExpression="${myTaskListenerBean}" />
  • 后来,我们还引入了一种新型的任务监听器,org.flowable.engine.impl.bpmn.listener.ScriptTaskListener。此脚本任务侦听器允许您为任务侦听器事件执行一段脚本逻辑。
<flowable:taskListener event="complete" class="org.flowable.engine.impl.bpmn.listener.ScriptTaskListener" >
<flowable:field name="script">
<flowable:string>
def bar = "BAR"; // local variable
foo = "FOO"; // pushes variable to execution context
task.setOwner("kermit"); // test access to task instance
bar // implicit return value
</flowable:string>
</flowable:field>
<flowable:field name="language" stringValue="groovy" />
<flowable:field name="resultVariable" stringValue="myVar" />
</flowable:taskListener>

上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
在这里插入图片描述