jBPM二(表达业务流程)

业务流程包括三部分:

  1. 活动 Activity / 节点 Node (有很多种,不同的类型有不同的功能,必须要有一个Start Activity)
  2. 连线 Transition / 转移 (从一个Activity指向另一个Activity)
  3. 事件 Event 

Transition

开始活动中有且只能有一个连线,并且一个流程实例启动后,会在开始活动之后的一个活动处停下,所以只能有一个开始活动和连线.结束活动不能有连线.其它的活动可以一个或多个连线.当有一个或多个连线的时候,必须使用指定的连线名称离开当前活动,不指定连线名称默认为null,最多只能有一个名称为null的连线名称.相应的语法为:

TaskService.completeTask(taskId, outcome);

指定的连线的名称一定要和流程图上的连线名称相同,包括空格.如果没有找到相应的连线,则会抛出异常.

jBPM4.4中有很多地方都要用到连线名称,其API中也有很多种叫法,比如outcome、signalName、transionName  都是表示Transition的名称.variables、parameters都是表示流程变量的集合Map.

Activity

活动分为两种:预定义活动和自定义活动. 预定义活动就是可以可以直接使用的活动.比如Start,End等.

下面就对几种常见的预定义活动进行说明:

开始活动/Start

表示流程的开始,一个流程图中有且只能有一个Start.而且Start必须要有且只能有一个Transition.不能有其他的Transition指向Start,流程实例启动后,会离开开始活动.

结束活动/End

代表流程的结束,一个流程图中可以有0个或多个End.比如:

imageimage

如果没有End,则执行完没有Transition的活动后,流程就结束了.

如果有多个End,则执行到其中任意一个End,流程就结束了.

任务活动/Task

代表在这里需要有一个人来做事情,事情做完后流程才能继续向后执行.

指定任务办理人时,可以使用assignee属性来指定.

生成任务时,默认只有这个指定的人才能看到任务和办理这个任务.

判断活动/Decision

使用Decision时要指定一个DecisionHandler的实现类来处理.比如有这么一个流程实例:

image

如果不大于2000,则部门经理直接办理,超过2000就要找总经理.要进行这个逻辑判断就要使用Decision,建立一个类实现DecisionHandler接口:

@SuppressWarnings("serial")
public class DecisionHandlerImpl implements DecisionHandler {
   
 
    // 进行计算,得出并返回应使用的连线的名称
    @Override
    public String decide(OpenExecution execution) {
   
        int money = (Integer) execution.getVariable("报销金额");
        System.out.println("DecisionHandlerImpl.decide() ---> 报销金额=" + money);
 
        if (money > 2000) {
   
            return "to 总经理审批";
        } else {
   
            return "to end1";
        }
    }
 
}

我们说了流程变量的生命周期与流程实例的生命周期相同,金额由流程变量带过去.处理器类在Decision的Handler Class属性中指定.

分支/聚合 Fork/Join

Fork与Join要成对地使用.从一个Fork中分出的多个分支一定要再回到同一个Join中去.当流程执行到Fork中时,ProcessInstance会分成多个并行执行的子Execution,因为ProcessInstance继承自Execution,并且是个标记接口,所以说ProcessInstance只是一个概念,它是想表示整个Execution的执行,也就是主线的执行.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值