“用户任务”节点可以设置监听器。
监听器分类
监听器分为执行监听器(execution listener)和任务监听器(task listener)。
执行监听器(execution listener)可以在流程执行中发生特定的事件时,执行外部Java代码或计算表达式。Smartbi流程允许在用户任务节点上配置执行监听器。
执行监听器包含下列属性:
事件类型(必填):触发执行监听器的事件类型。可用的事件有:
开始:当流程流转到当前节点后触发执行监听器
结束:当流程离开当前节点后触发执行监听器。
- 监听器类型(必填):执行监听器实现类型,支持的类型有:
- Java类 在扩展包中实现一个Java类,实现smartbilibs.org.camunda.bpm.engine.delegate.ExecutionListener接口,重写notify方法,实现自定义代码逻辑。
- 表达式 可执行特定的EL表达式,比如${ myBean.doSomethings() }
- 代理表达式 由表达式返回特定的代理类,同Java类,具体逻辑在返回的代理类中实现,比如${ myBean.createDelegateClass() }
- 脚本 支持使用Groovy脚本实现外部代码逻辑。比如:
def bar = "BAR"; // 局部变量
foo = "FOO";// 将变量放入执行上下文
execution.setVariable("var1", "test"); // 设置执行实例变量
流程引擎提供了一些内部上下文变量,可用于表达式和脚本中。
变量 | Java类型 | 语境 |
---|---|---|
execution | DelegateExecution | 在BPMN执行上下文中可用,例如服务任务,执行侦听器或序列流。 |
task | DelegateTask | 在任务上下文(如任务侦听器)中可用。 |
流程引擎提供了一些内部上下文功能,可用于表达式和脚本中。
功能 | 返回类型 | 描述 |
---|---|---|
currentUser() | String | 返回当前已认证用户的用户标识,或者当前null 没有用户通过认证。 |
now() | Date | 以Java Date对象的形式返回当前日期。 |
dateTime() | DateTime | 返回当前日期的Joda-Time DateTime对象。 有关所有可用功能,请参阅 Joda-Time文档。 |
任务监听器(task listener)用于在特定的任务相关事件发生时,执行自定义的Java逻辑或表达式。任务监听器只能在流程定义中作为用户任务的子元素。在Smartbi流程中,任务可以理解为待办。
任务监听器包含下列属性:
事件类型(必填):触发任务监听器的任务事件类型。可用的事件有:
创建:当任务已经创建,并且所有任务参数都已经设置时触发。
分配:当任务已经指派给某人时触发。请注意:当流程执行到达用户任务时,在触发create事件之前,会首先触发assignment事件。这顺序看起来不太自然,但是有实际原因的:当收到create事件时,我们通常希望能看到任务的所有参数,包括办理人。
完成:当任务已经完成,从运行时数据中删除前触发。
删除:在任务即将被删除前触发。请注意任务由completeTask正常完成时也会触发。
- 监听器类型(必填):同执行监听器。
参考资料:
- https://docs.camunda.org/manual/7.14/user-guide/process-engine/delegation-code/
- https://tkjohn.github.io/flowable-userguide/#executionListeners
- https://tkjohn.github.io/flowable-userguide/#taskListeners
- https://docs.camunda.org/javadoc/camunda-bpm-platform/7.14/
监听器应用-Java类
执行监听器
- 扩展包中编写执行监听器类,实现ExecutionListener接口。
- 在流程定义中配置执行监听器类,其中【Java类】中需要填写执行监听器的类全限定名。
任务监听器
- 扩展包中编写执行监听器类,实现TaskListener接口。
- 在流程定义中配置任务监听器类,其中【Java类】中需要填写任务监听器的类全限定名。
扩展包示例:
- 注意事项:extension.xml中的扩展包优先级数值必须大于100。