传智播客activiti课堂笔记2(2)

2019-08-29 19:10

2.3 businessKey(业务标识 )

2.3.1 分析

需求:

查询系统中当前正在运行的流程有哪些?比如:要查询采购流程,包括信息:流程实例id、当前 运行的结点id、采购单号、采购单名称 、采购金额。 分析:

流程实例id、当前 运行的结点id 通过activiti的api 从activiti数据库查询。

采购单号、采购单名称 、采购金额这个字段在activiti数据库中是不存在的,应该从业务系统中查询。

思路 :

在启动每个流程实例时(比如采购流程),指定一个采购单id,将此采购单id记录到activiti的数据库中。 流程定义(.bpmn和png文件) 静态的 比如:定义采购流程 一个流程实例 一个流程实例 XXX创建一个采购单 张三创建一个采购单李四创建一个采购单(采购单号:XXX),这 (采购单号:001),这(采购单号:002),这时启动一个流程实例 时启动一个流程实例 时启动一个流程实例 动态的:流程的执行 动态的:流程的执行 动态的:流程的执行 启动时指定采购 单 id(XXX) 启动时指定采购 单启动时指定采购 单 id(001) id(002)

采购单id和每个流程实例一一对应,activiti中为了满足需求:在查询activiti的信息时关联查询业务信息。专门设置businessKey(业务标识 )

2.3.2 businessKey业务标识概念

业务标识:查询activiti的信息时关联查询业务信息要用到的一个标识,标识通常是业务表的一个主键。比如:如果启动一个采购流程,业务标识等于采购单id,如果启动一个请假流程,业务标识等于请假信息的id。

2.3.3 设置businessKey方法:

在启动一个流程实例时设置该流程实例对应的businessKey。

数据库表:

SELECT * FROM act_ru_execution #流程实例执行表

SELECT * FROM act_hi_procinst #流程实例历史 表

小结:

企业开发中,通常使用此方法启动一个流程实例,启动时指定流程实例对应业务标识 。

2.4 查询流程实例

2.4.1 需求:

查询系统中当前正在运行的流程有哪些?比如:要查询采购流程,包括信息:流程实例id、当前 运行的结点id、

采购单号、采购单名称 、采购金额。

2.4.2 实现方法

使用RuntimeService查询系统中当前正在运行的流程。

2.4.3 如果关联查询业务信息

思路:

在查询流程实例时,从processInstance中获取businesskey 根据businessKey查询业务系统数据库

2.4.4 关联查询业务信息的方法

流程实例id、当前 运行的结点id、采购单号、采购单名称 、采购金额(标记红的为业务信息)。 分析:

Activiti的processInstance对象不包括业务信息,需要单独创建一个pojo(包括业务信息和processInstance的信息)

这样作的意义:

通过service将activiti和业务系统控制层进行隔离。

代码思路:

2.5 挂起、激活流程实例(了解)

2.5.1 需求:

如果要删除流程实例:

方法1:通过级联删除流程定义将该流程定义下所有相关信息(包括流程实例)全部删除 注意:谨慎使用,通常是给超级管理使用。

方法2:不删除,暂停流程实例,好处:暂停后可以再恢复。

通常使用方法2。

2.5.2 根据流程定义挂起、激活

暂停或激活时指定流程定义id,该流程定义下所有流程实例全部暂停或激活。

如果流程定义暂停或激活,不能再启动该流程定义的流程实例了!!!

代码:

@Test

public void suspendOrActivateProcessDefinition() {

// 流程定义id

String processDefinitionId = \;

RepositoryService repositoryService = processEngine .getRepositoryService();

// 获得流程定义

ProcessDefinition processDefinition = repositoryService .createProcessDefinitionQuery()

.processDefinitionId(processDefinitionId).singleResult(); //是否暂停

boolean suspend = processDefinition.isSuspended(); if(suspend){

//如果暂停则激活,这里将流程定义下的所有流程实例全部激活

repositoryService.activateProcessDefinitionById(processDefinitionId, true,

null);

System.out.println(\流程定义:\+processDefinitionId+\激活\); }else{

//如果激活则挂起,这里将流程定义下的所有流程实例全部挂起

repositoryService.suspendProcessDefinitionById(processDefinitionId, true,

null);

}

System.out.println(\流程定义:\+processDefinitionId+\挂起\); }

2.5.3 根据流程实例挂起、激活

暂停或激活时指定流程实例id,对该流程实例进行暂停或激活。

如果该流程实例id暂停了,流程实例下的任务无法办理。


传智播客activiti课堂笔记2(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CS的顶级会议和期刊

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: