activiti7工作流如何启动一个流程?

当我们把流程给部署好了,而且流程处于激活状态,我们需要使用流程的时候就涉及到流程的启动。

我们以下面的代码为例子,详细给大家讲解一下如何启动一个流程。

    public int insertWorkflowLeave(WorkflowLeave workflowLeave) {

        String id = UUID.randomUUID().toString();
        workflowLeave.setId(id);
        String join = StringUtils.join(sysUserService.selectUserNameByPostCodeAndDeptId("se", SecurityUtils.getLoginUser().getUser().getDeptId()), ",");
        ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
                .start()
                .withProcessDefinitionKey("leave")
                .withName(workflowLeave.getTitle())
                .withBusinessKey(id)
                .withVariable("deptLeader",join)
                .build());
        workflowLeave.setInstanceId(processInstance.getId());
        workflowLeave.setState("0");
        workflowLeave.setCreateName(SecurityUtils.getNickName());
        workflowLeave.setCreateBy(SecurityUtils.getUsername());
        workflowLeave.setCreateTime(DateUtils.getNowDate());
        return workflowLeaveMapper.insertWorkflowLeave(workflowLeave);
    }

启动流程之前我们肯定有自己的业务表单数据,我们可能是一个请假表单,或者一个出查表单,或者一个申请补贴表单等等。这个业务表单是完全独立于工作流的。

我们需要把业务表单和工作流中的表单关联起来,所以需要一个id,我们把它叫做业务id,就是BusinessKey。

把这个id放在自己的业务表单,同时放到工作流中,这样就将两者关联起来。

同时我们启动流程后需要指定下一个节点的任务领取人,就是在代码中的.withVariable("deptLeader",join)。需要注意的是deptLeader是流程变量的名称,对应的是bpmn图中的这个节点的候选用户。如下图所示:

 启动流程的时候需要一个流程key,对应的是bpmn图中的编号。

 下面就详细解释一下流程启动代码的含义。

ProcessInstance processInstance = processRuntime.start(ProcessPayloadBuilder
.start()
.withProcessDefinitionKey("leave")
.withName(workflowLeave.getTitle())
.withBusinessKey(id)
.withVariable("deptLeader",join)
.build());

 

这段代码是使用Activiti流程引擎启动一个名为"leave"的流程实例。具体解析如下:

  1. processRuntime.start 是启动一个新的流程实例的方法,其中 processRuntime 是 Activiti 的运行时服务。

  2. ProcessPayloadBuilder 是用于构建流程实例参数的工具类。

  3. start() 方法是开始构建流程实例,使用ProcessPayloadBuilder.start()方法构建流程实例的初始payload(包含流程定义和初始状态等信息)。

  4. withProcessDefinitionKey("leave") 设置流程定义的key为 "leave",这意味着我们要启动的流程定义的key是 "leave"。

  5. withName(workflowLeave.getTitle()) 设置流程实例的名称为 workflowLeave 对象的 title 属性。

  6. withBusinessKey(id) 设置流程实例的业务键为变量 id

  7. withVariable("deptLeader",join) 设置流程变量 "deptLeader" 的值为 join

  8. build() 是完成流程参数构建的方法,返回一个 ProcessInstance 对象。

所以,整体来说,这段代码的作用是启动一个名为 "leave" 的流程实例,并设置了该流程实例的一些参数,如流程定义的key、名称、业务键和一个名为 "deptLeader" 的流程变量。

payload是什么意思?

在BPMN 2.0中,payload是指一个包含了流程定义和初始状态等信息的对象。在一个BPMN 2.0流程图中,每个节点(包括起点和终点)都有一个或多个payload,用于描述该节点的输入和输出信息。

在启动一个BPMN 2.0流程实例时,需要构建一个payload对象,并将其传入ProcessRuntime.start()方法中。在流程实例的生命周期中,payload对象中的信息会被用于描述流程实例的状态和参数。例如,在一个节点上执行一个用户任务时,需要根据该节点的payload中的参数来确定用户需要输入或输出的信息。

在代码中,可以使用ProcessPayloadBuilder类来构建payload对象。ProcessPayloadBuilder提供了一系列方法,用于设置流程实例的初始状态、变量、流程定义等信息。通过使用这些方法,可以构建出不同的payload对象,从而启动不同的流程实例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值