[Camunda]流程引擎从入门到入行 - 节点

Camunda流程引擎系列

五、节点



前言

流程引擎的关键,特别是基于BPMN的流程引擎,我们应该去了解它包含哪些元素。

BPMN基本元素包括了这些元素,如下:

  • 泳道:池和道;
  • 三种连接对象:序列流、消息流和关联;
  • 一种活动:任务(Task),其中包括了子流程任务(Sub-ProcessTask);
  • 两种事件:普通开始事件(NoneStart Event)和普通结束事件(None End Event);
  • 两种网关:排他网关(Exclusive)和并发网关(Parallel);
  • 一种人工制造物:附注。

我们在这次分享中的节点,会是一个比较综合的东西,因为我们看基本元素里面并没有元素叫这个名字。我们会在这里介绍到一些常用的节点,包括启动、结束以及一些task,虽然我们在前面的分享已经涉及到了一些。

一、开始节点

  • 开始节点代表一个流程的开始;
  • 一个流程文件中,开始节点只能有一个,不能有多个;
  • 子流程与引用流程其开始节点也只能是一个;
  • 启动流程实例的时候,从开始节点开始运转流程;

开始节点有几种类型,如图:
在这里插入图片描述

结束节点

  • 结束节点代表一个流程的结束;
  • 在一个流程文件中,结束节点可以有多个;
  • 如果实例运转到结束节点,则表示当前执行实例结束了;
    结束节点有几种类型,如图:
    在这里插入图片描述

二、UserTask

用户任务属于等待节点,既表示系统走到这里会等待人来处理,不会自己往后走,那么对于用户任务,我们可以先想想这几个问题:

  • 任务从何而来?
  • 任务由谁处理?
  • 任务如何处理?
  • 办理过的任务如何查看?

TaskService

这是Camunda的任务服务类,我们在之前runtimeService的分享中,其实已经涉及到了,我们可以从TaskService中发现各种执行任务相关的API。

我们在这里再分享一下通过变量的方式来启动任务:

  1. 在配置流程时,配入变量,如assignee一栏,将其配置为 #{userId};
  2. 启动流程或任务时通过variables参数传入变量的键值对;
    /**
     * 可通过定义的变量传入来启动对应流程
     * 如在流程中定义了变量,如果不在启动时传入,系统会报错
     * 如流程定义中指定用户为 #{userId}, 那么在启动时我们需要通过vars传入userId,放入map中
     *
     * @param key
     * @param vars
     * @return
     */
    public ProcessInstance startProcess(String key, Map<String, Object> vars) {
        return runtimeService.startProcessInstanceByKey(key, vars);
    }

监听器

监听器类似于切片,可以在执行实例或任务的特定节点触发特定事件。
任务监听器是任务节点所特有的,而执行监听器是所有节点都具有的。监听器有特定的事件,我们需要在配置中为该类型指定监听器对应的类。

  1. 在配置中配置监听器
    在这里插入图片描述
  2. 在代码中编写监听器
/**
 * @author zerozhao
 * @version 1.0
 * @title: PnxTaskListenerImpl
 * @projectName phoenix-camunda
 * @description: TODO 我们可以通过监听器,在这里获取下一个任务的指派人,并将其设置进去。
 * @date 2020/11/1623:08
 */
public class PnxTaskListenerImpl implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        String eventName = delegateTask.getEventName();
        int priority = delegateTask.getPriority();
        if ("create".equals(eventName)) {
            delegateTask.setAssignee("user");
        }
    }
}

组任务

设置组任务处理人

在一些任务中,可能我们暂时不确定由哪一个或一组用户来完成,我们只能定位到几位用户,这在系统中为使用候选人 - Candidate Users 或 Candidate Groups。
当我们使用候选人时,任务的指派人会为空,而在候选人列会存在数据,并且一位候选人一条数据。

角色组

总结

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值