OA工作流-Activiti(二)

时间:2021-01-16 10:09:44

OA工作流-Activiti(二)

                                       OA工作流-Activiti(二)


一、管理流定义

1.1设计文档

    1.1.1流程图

OA工作流-Activiti(二)

1.1.2 bpmn文件解析

其中:1,bpmn中的代码是为了给计算机观看的

           2,流程图中的jpg文件是为了开发者看的


1.2.部署流程定义--class路径加载

      

框架流程说明:

1,获取流程引擎对象,创建时会自动加载classpath下的activiti.cfg.xml

2,获取取一个RepositoryService对象(仓库对象),再产生一个配置对象

用来封装部署操作的相关配置。

3,在部署配置对象中设置显示名,上传流程定义规则文件,向数据库表中存放流程定义的规则信息。

4,在这一步进行操作时,操作了三张表

a) act_re_deployment(部署对象表)

存放流程定义的显示名和部署时间,每部署一次增加一条记录

b) act_re_procdef(流程定义表)

存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

注意:当流程定义的key相同的情况下,使用的是版本升级

c) act_ge_bytearray(资源文件表)

此表每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的

1.2.部署流程定义--zip格式文件

   说明:将bpmn和png信息压缩一下,放在自己的resource中

1.3查询流程定义

查询的时候,先创建流程定义查询,在框架每步封装了很多的方法供应我们使用。

在封装的这些方法里面,

A. 我们可以进行制定条件查询。(类似于where条件)

processDefinitionId(processDefinitionId)//使用流程定义ID查询

processDefinitionKey(processDefinitionKey)//使用流程定义的key查询

B. 我们可以进行升降序查询。

orderByProcessDefinitionVersion().asc()//按照版本的升序排列

orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列

C.在返回的结果集上(返回指定结果集)--List、对象、数量、分页

list();//返回一个集合列表,封装流程定义

测试结果如下图:

1.4查询流程定义

删除流程定义须知:

A. 首先获得默认的流程引擎,通过流程引擎获取了一个RepositoryService对象(仓库对象)

B.如果该流程定义下没有正在运行的流程,则可以用

普通删除(deleteDeployment(deploymentId))。

如果是有关联的信息,用级联删除(deleteDeployment(deploymentId, true))。

项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用

1.5查询流程定义图--将图片复制到指定文件夹再进行查询

查询流程定义须知:

A. repositoryService的getDeploymentResourceNames查询所有部署文件的名称=

B. repositoryService的getResourceAsStream 两个参数(部署ID、资源图片名称 

C. FileUtils工具的copyInputStreamToFile方法完成流程流程到文件的拷贝,将资源文件以流的形式输出到指定文件夹下

1.6查询最新版本流程定义:(相当于Update)

思路:

注意:因为Map集合可以在存放值的时候,后面的值将前面的值覆盖掉。

创建流程定义---》使用升序排列仅从排列---》将他遍历后放在Map集合中(map的key存放流程定义的key,map的value存放流程定义的对象)---》用list集合取出map的value--》遍历获取最新版本。


结果:

1.7删除所有Key值相同的流程定义

执行完毕:

数据库里面所有和HelloWorld相同Key的数据都被删除。(因为数据库里面本来就只有HelloWorld的Key值的数据)

二、流程实例、流程对象--执行任务

2.1流程图--形同

 

2.2部署流程定义--同上(zip)

2.3启动流程定义

2.3.1解释一下流程实例和流程对象:

流程对象:流程实例执行一次

一个流程实例可以有多个流程对象。如图所示:

一个流程中流程实例两个执行对象

2.4查询当前用户的个人任务

在查询部分,根据条件查询:

a.taskAssignee(assignee)//指定个人任务查询,指定办理人b.taskCandidateUser(candidateUser)//组任务的办理人查询

c.processDefinitionId(processDefinitionId)//使用流程定义ID查询

.......

排序部分:orderByTaskCreateTime().asc()//使用创建时间的升序排列

......

返回的结果集部分

singleResult()//返回惟一结果集

count()//返回结果集的数量

list();//返回列表


就2.3而言,启动程序后只有张三可以看到,仅仅执行“张三”便可以查到信息

查询其他人则无法看到当前信息。

2.5任务处理

分别执行,在五张表里面查看相应的变化。

2.6查询流程状态

判断依据:通过流程任务表,不为空则任务依旧在,为空则任务结束

2.7查询历史任务和流程实例

三、流程变量

3.1 流程图

3.2 流程变量定义:

流程变量:请假流程中有请假天数、请假原因等一些参数都为流程变量的范围。

流程变量的作用域范围是只对应一个流程实例。也就是说各个流程实例的流程变量是不相互影响的。流程实例结束完成以后流程变量还保存在数据库中(存放到流程变量的历史表中)

变量的实际问题:


3.3部署启动(启动不再演示)

    3.3.1InputStream进行部署


    3.3.2读取工程文件的三种方式:

3.4设置流程变量

   3.4.1设置流程变量

   3.4.2获取流程变量

注意:设置流程变量==设置流程变量(方法的使用)

a. runtimeService.setVariable(executionId, variableName, value)//表示使用执行对象ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)

b. runtimeService.setVariables(executionId, variables)//表示使用执行对象ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,map集合的value就是流程变量的值(一次设置多个值)

c. taskService.setVariable(taskId, variableName, value)//表示使用任务ID,和流程变量的名称,设置流程变量的值(一次只能设置一个值)

d. taskService.setVariables(taskId, variables)//表示使用任务ID,和Map集合设置流程变量,map集合的key就是流程变量的名称,map集合的value就是流程变量的值(一次设置多个值)

e. runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);//启动流程实例的同时,可以设置流程变量,用Map集合

f. taskService.complete(taskId, variables)//完成任务的同时,设置流程变量,用Map集合

结果:

   3.4.3设置流程变量(采用JavaBean方式)

--固定序列化ID值

当一个javabean(实现序列号)放置到流程变量中,要求javabean的属性不能再发生变化,如果发生变化,再获取的时候,抛出异常,固定ID值则不变

设置流程变量:

获取流程变量:

3.5查询历史流量表

1,创建查询历史的Service

2,根据name值查询

四、查询历史

4.1 act_hi_procinst流程实例表

4.2 查询历史活动

4.3查询历史任务 


OA工作流-Activiti(二)

4.4 查询历史流程变量

OA工作流-Activiti(二)


欢迎订阅关注公众号(JAVA和人工智能)

                                       

                                                           获取更多免费书籍、资源、视频资料


                                    OA工作流-Activiti(二)