Activiti-流程操作

简介: Activiti-流程操作

1. Activiti流程操作


1.1 流程的部署



将上面在设计器中定义的流程部署到activiti数据库中,就是我们讲的流程部署。


通过调用Activiti的api将流程定义的bpmn和png两个文件一个一个添加部署到activiti中,还可以将两个文件打车zip包部署。


1.1.1 单个文件部署


分别将bpmn文件和png图片分别部署


/**
     * 实现文件的单个部署
     */
    @Test
    public void test03(){
        // 1.获取ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RepositoryService进行部署操作
        RepositoryService service = engine.getRepositoryService();
        // 3.使用RepositoryService进行部署操作
        Deployment deploy = service.createDeployment()
                .addClasspathResource("bpmn/evection.bpmn") // 添加bpmn资源
                .addClasspathResource("bpmn/evection.png") // 添加png资源
                .name("出差申请流程")
                .deploy();// 部署流程
        // 4.输出流程部署的信息
        System.out.println("流程部署的id:" + deploy.getId());
        System.out.println("流程部署的名称:" + deploy.getName());
    }
复制代码


日志中查看到相关的输出信息


image.png

1.1.2 部署zip文件


将bpmn文件和png文件两个打包为一个zip文件,统一上传

image.png


/**
     * 通过一个zip文件来部署操作
     */
    @Test
    public void test04(){
        // 定义zip文件的输入流
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("bpmn/evection.zip");
        // 对 inputStream 做装饰
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = engine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .name("出差申请流程")
                .deploy();
        // 4.输出流程部署的信息
        System.out.println("流程部署的id:" + deploy.getId());
        System.out.println("流程部署的名称:" + deploy.getName());
    }
复制代码


上传后的数据库中的数据和单个文件上传其实是一样的。


1.1.3 操作数据表


流程定义部署后操作activiti中的三张表

act_re_deployment: 流程定义部署表,每部署一次就增加一条记录

image.png


act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录

image.png

act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png图片会保存在该表中


image.png



1.2 启动流程实例


流程定义部署在Activiti后就可以通过工作流管理业务流程,也就是说上边部署的出差申请流程可以使用了。


针对该流程,启动一个流程表示发起一个新的出差申请单,这就相当于Java类和Java对象的关系,类定义好了后需要new创建一个对象使用,当然可以new出多个对象来,对于出差申请流程,张三可以发起一个出差申请单需要启动一个流程实例。


/**
     * 启动一个流程实例
     */
    @Test
    public void test05(){
        // 1.创建ProcessEngine对象
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 2.获取RuntimeService对象
        RuntimeService runtimeService = engine.getRuntimeService();
        // 3.根据流程定义的id启动流程
        String id= "evection";
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(id);
        // 4.输出相关的流程实例信息
        System.out.println("流程定义的ID:" + processInstance.getProcessDefinitionId());
        System.out.println("流程实例的ID:" + processInstance.getId());
        System.out.println("当前活动的ID:" + processInstance.getActivityId());
    }
复制代码


输出内容:


image.png

启动流程实例涉及到的表结构


act_hi_actinst 流程实例执行历史


act_hi_identitylink 流程的参与用户的历史信息


act_hi_procinst 流程实例历史信息


act_hi_taskinst 流程任务历史信息


act_ru_execution 流程执行信息


act_ru_identitylink 流程的参与用户信息


act_ru_task 任务信息




1.3 任务查找


流程启动后,任务的负责人就可以查询自己当前能够处理的任务了,查询出来的任务都是当前用户的待办任务


/**
     * 任务查询
     */
    @Test
    public void test06(){
        String assignee ="zhansan";
        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
        // 任务查询 需要获取一个 TaskService 对象
        TaskService taskService = engine.getTaskService();
        // 根据流程的key和任务负责人 查询任务
        List<Task> list = taskService.createTaskQuery()
                .processDefinitionKey("evection")
                .taskAssignee(assignee)
                .list();
        // 输出当前用户具有的任务
        for (Task task : list) {
            System.out.println("流程实例id:" + task.getProcessInstanceId());
            System.out.println("任务id:" + task.getId());
            System.out.println("任务负责人:" + task.getAssignee());
            System.out.println("任务名称:" + task.getName());
        }
    }
复制代码


输出结果

image.png


相关文章
|
数据库
20activiti - 流程管理定义(查询个人任务)
20activiti - 流程管理定义(查询个人任务)
80 0
20activiti - 流程管理定义(查询个人任务)
22activiti - 流程管理定义(查询流程状态)
22activiti - 流程管理定义(查询流程状态)
138 0
|
6月前
Activiti 流程发布
Activiti 流程发布
53 0
29activiti - 流程变量(总结)
29activiti - 流程变量(总结)
67 0
|
数据库
23activiti - 流程变量(流程图)
23activiti - 流程变量(流程图)
48 0
|
存储 Java API
流程引擎Activiti流程实例讲解
流程引擎Activiti流程实例讲解
267 0
|
Java 数据库连接 API
Activiti-流程操作2
Activiti-流程操作2
Activiti-流程操作2
|
XML 存储 SQL
Activiti-介绍和使用步骤
Activiti-介绍和使用步骤
Activiti-介绍和使用步骤
|
XML 数据可视化 Java
Activiti-ProcessEngine创建方式和Servcie介绍
Activiti-ProcessEngine创建方式和Servcie介绍
Activiti-ProcessEngine创建方式和Servcie介绍
|
存储 XML 缓存
Activiti原理分析(一)从一个简单流程开始
本系列文章将基于 Activiti 6 源代码对 Activiti 的原理进行深入剖析,让读者快速知其然,同时知其所以然。 第一篇文章将分析一个简单流程在 Activiti 中的执行流程,借此把 Activiti 底层的一些概念快速梳理一遍,让读者对 Activiti 的底层实现有个大概了解,知晓每张表的作用。内容都是笔者从源码里分析出来或者核对过的,比一般的文档更加翔实靠谱。
3622 2
Activiti原理分析(一)从一个简单流程开始