Flowable入门系列文章181 - flowable-cdi流程bean管理流程事件

1、注入过程变量

过程变量可用于注射。流动的cdi支持

  • 类型安全注射@BusinessProcessScoped豆使用@Inject [additional qualifiers] Type fieldName
  • 使用@ProcessVariable(name?)限定符不安全地注入其他过程变量:
@Inject @ProcessVariable Object accountNumber;
@Inject @ProcessVariable("accountNumber") Object account

为了使用EL引用过程变量,我们有类似的选择:

  • @Named @BusinessProcessScoped bean可以直接引用,
  • 其他进程变量可以使用ProcessVariables-bean 引用:
#{processVariables [ '使用accountNumber']}

2、接收流程事件

可流动的可以连接到CDI事件总线。这使我们能够使用标准的CDI事件机制得到流程事件的通知。为了启用对Flowable的CDI事件支持,请在配置中启用相应的分析侦听器:

<property name="postBpmnParseHandlers">
<list>
<bean class="org.flowable.cdi.impl.event.CdiEventSupportBpmnParseHandler" />
</list>
</property>

现在,Flowable已配置为使用CDI事件总线发布事件。以下概述了如何在CDI bean中接收进程事件。在CDI中,我们可以使用@Observesannotation 声明性地指定事件观察者。事件通知是类型安全的。进程事件的类型是org.flowable.cdi.BusinessProcessEvent。以下是一个简单的事件观察者方法的例子:

public void onProcessEvent(@Observes BusinessProcessEvent businessProcessEvent) {
// handle event
}

这个观察者将被通知所有的事件。如果我们想限制观察者收到的一组事件,我们可以添加限定符注释:

  • @BusinessProcess:将一组事件限制在某个流程定义中。例:@Observes @BusinessProcess(“billingProcess”)
    BusinessProcessEvent evt
  • @StartActivity:通过某个活动来限制事件集合。例如: @Observes @StartActivity(“shipGoods”) BusinessProcessEvent evt只要输入ID为“shipGoods”的活动就会被调用。
  • @EndActivity:通过某个活动来限制事件集合。例如: @Observes @EndActivity(“shipGoods”) BusinessProcessEvent evt只要ID为“shipGoods”的活动被保留,就会被调用。
  • @TakeTransition:通过一定的转换来限制事件集合。
  • @CreateTask:通过创建特定任务来限制事件集。
  • @DeleteTask:通过删除某个任务来限制事件集。
  • @AssignTask:通过特定任务的分配来限制事件集合。
  • @CompleteTask:通过某个任务的完成来限制事件集合。

上面提到的限定符可以自由组合。例如,为了接收在“shipmentProcess”中离开“shipGoods”活动时生成的所有事件,我们可以编写以下观察者方法:

public void beforeShippingGoods(@Observes @BusinessProcess("shippingProcess") @EndActivity("shipGoods")
BusinessProcessEvent evt) {
// handle event
}

在默认配置中,事件侦听器是在同一事务的上下文中同步调用的。CDI事务观察者(只能与JavaEE / EJB结合使用)允许控制事件何时传递给观察者方法。使用事务性观察者,例如我们可以保证只有当事件被触发的事务成功时才会通知观察者:

public void onShipmentSuceeded(@Observes(during=TransactionPhase.AFTER_SUCCESS) @BusinessProcess("shippingProcess")
@EndActivity("shipGoods") BusinessProcessEvent evt) {
// send email to customer.
}

3、附加功能

  • ProcessEngine以及服务可用于注入:@Inject ProcessEngine, RepositoryService, TaskService,…
  • 当前的流程实例和任务可以注入:@Inject ProcessInstance, Task,
  • 目前的业务密钥可以被注入: @Inject @BusinessKey String businessKey,
  • 当前流程实例id被注入: @Inject @ProcessInstanceId String pid

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值