activity流程启动和任务的执行

741 阅读2分钟

「这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

流程启动

在流程部署之后使用runtimeService启动流程

runtimeService.startProcessInstanceById(流程定义id)
runtimeService.startProcessInstanceById(流程定义id,流程变量)
//流程变量:可以决定流程的走向
runtimeService.startProcessInstanceById(流程定义id,businessKey);
//businessKey,也就是业务id,这个业务id就是需要处理的业务的那张表的主键(实际操作项目中比如入库单,或者请假单其中对应的id),将业务id和流程实例id绑定起来
runtimeService.startProcessInstanceById(流程定义id,businessKey,流程变量);
//除了上面四种之外,还可以根据Key启动流程

流程启动一次就会在act_ru_execution表中存放数据 使用最多的启动方式一般是

runtimeService.startProcessInstanceByKey(流程定义id,businessKey,流程变量);
runtimeService.startProcessInstanceByKey(流程定义id,businessKey);

执行任务(TaskService)

查询任务

查询都是大同小异,都包括一下三点

  • 条件

    .taskAssignee(assignee);根据任务办理人查询,返回集合 .deploymentId(deloymentId) .deploymentIdIn(Ids);查询效率低 .executionId(executionId) .processDefinitionXXX(XXX),id,key,Name,KeyLike,NameLike .processInstanceBusinessKey(processInstanceBusinessKey);

  • 排序

    没什么好说的

  • 结果集

    都一样

办理任务

完成任务的三个方法

  1. taskService.complete(taskId);
    根据任务id完成任务
  2. taskService.complete(taskId,variables);
    并指定流程变量,也就是通过流程变量来判断流程的走向,是放弃还是继续执行,还是驳回

判断流程是否结束

目的是更新业务表中的状态栏中的状态

  1. 已知流程实例id,可以根据流程实例id进行判断,也就是使用流程实例id查询流程实例,如果流程实例不为空,就说明当前对应id流程没有结束
  2. 已知任务实例id,使用任务实例id,查询出任务,使用任务查询出流程实例id,再进行上面的步骤

查询历史流程实例(act_hi_)

historyService.createHistoricProcessInstanceQuery().list();

查询历史任务实例(act_hi_taskinst)

使用historyService 还是使用那一套,没什么说的了

总结

Execution

执行对象, 一次的流程执行,有多个分支就有多个执行对象
对应act_ru_executionact_hi_procinstact_hi_actinst

ProcessInstance

流程实例,一次流程执行只会有一个流程实例,也就是主分支

  1. 如果是单例流程(没有分支),执行对象ID就是流程实例ID
  2. 流程实例只会有一个,但是执行对象会有多个(多个分支)

Task任务

执行到某个任务环节时生成的任务信息

相关ID

部署ID --> act_re_deployment id 流程定义ID --> act_re_procdef id 流程实例ID --> act_ru_execution id 执行实例ID --> act_ru_task execution id 任务ID --> act_run_task id