Activity6.0工作流学习笔记(一)(持续更新中...)

最近一直研究学习Activity6.0工作流,以此贴立志!将学习成果在此进行总结

一:准备工作

  1. 下载Activity6.0相关jar包和文件
    由于国内网络问题,官方下载可能较慢,因此我在这里提供百度云地址,有需要的大佬可自行下载:
    https://pan.baidu.com/s/1lbm4RcTaC0hty4KZBJF48g 提取码:y8ro
    下载完成后解压即可。

  2. 工具安装activity插件
    eclipse和idea均有activity的插件,各位大佬可根据自己的喜好进行选择。(这里就不再阐述安装插件的方法了),如果懒得安装的大佬可以下载这个已经安装好插件的eclipse工具,解压即可使用:
    链接:https://pan.baidu.com/s/1t2ddaxR8romXur1wHfFgFw 提取码:03wj

  3. 编写第一个activity程序
    准备工作做好之后,就可以编写人生中第一个activity程序啦~
    第一步:使用activity插件新建一个流程,activity插件会给我们生成一个后缀为bpmn的文件(至于它是什么,我只知道bpmn是一个规范…),我们可以将他的后缀改为xml打开查看里面的内容(由于本人才疏学浅,就不说这个xml文件中的内容啦哈)。
    打开xml可以看到里面有各种各样的配置节点,但是唯一能认识的就是节点中的那个id,
    记录那个id因为一会会用到的!
    使用activity插件创建第一个简单的流程,员工提交申请,经理审批流程
    这是一个最简单的员工提交流程,经理审批流程。
    第二步:创建一个普通的Java 工程,然后将所下载的activity包的依赖添加进去(注意:这里需要注意的是,activity包中是不包含mysql链接驱动包的,因此我们还需要添加mysql链接驱动包),然后创建一个recourse包,存放我们的配置相关的文件。
    第三步:添加actiity配置文件activiti.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 流程引擎配置的bean -->
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ACT" />
		<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
		<property name="jdbcUsername" value="root" />
		<property name="jdbcPassword" value="123456" />
		<property name="databaseSchemaUpdate" value="true" />
	</bean>
</beans>

该配置文件主要就是需要配置数据库,我使用的mysql数据库,因此各位大佬就按需配置自己的数据库和用户名密码哟~~~
配置文件的最后一个配置,设置为true可以在初始化工作流的时候,进行创建相关的activity的表,他会自动检查,如果缺少表或者字段的话,会自动添加的(还是很贴心的啊哈哈)!
第四步:开始写人生中第一个activity代码:

初始化activity:
package com.cp;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;

/**
 * 人生中第一个工作流代码
 * Created by 程程有小棉被啊 on 2019/7/17.
 */
public class FirstAct {
    public static void main(String[] args) {
        //创建流程引擎    它会在classpath下搜索activiti.cfg.xml, 并基于这个文件中的配置构建引擎
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        //关闭流程引擎
        defaultProcessEngine.close();
        System.exit(0);
    }
}

执行完成后,会在对应的数据库中生成28张表~~
Activity的表都是以ACT_开头的,第二部分表示表的用途的两个字母表识,用途也和服务的API对应。

ACT_RE_*:RE表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则等)
ACT_RU_*:RU表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。Activity只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录,这样运行时表可以一直很小速度很快。
ACT_ID_*:ID表示identity。这些表包含身份信息,比如用户,组等
ACT_HI_*:HI表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等
ACT_GE_*:通用数据,用于不容场景下。

使用ProcessEngine获取服务:
package com.cp;

import org.activiti.engine.*;

/**
 * 人生中第一个工作流代码
 * Created by 程程有小棉被啊 on 2019/7/17.
 */
public class FirstAct {
    public static void main(String[] args) {
        /*创建流程引擎
        它会在classpath下搜索activiti.cfg.xml, 并基于这个文件中的配置构建引擎,
        会在第一次调用时 初始化并创建一个流程引擎,以后再调用就会返回相同的流程引擎*/
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();

        /*获取存储服务 它提供了管理和控制发布包和流程定义的操作
        *   该服务可以
            1、查询引擎中的发布包和流程定义。
            2、暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的反向操作。
            3、获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
            4、获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。
        * */
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();

        /*获取运行时服务
        * 正如RepositoryService负责静态信息(比如,不会改变的数据,至少是不怎么改变的),
        * RuntimeService正好是完全相反的。它负责启动一个流程定义的新实例。
        * RuntimeService可以用来获取和保存流程变量,也能查询流程实例和执行。
        * */
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();

        /*获取任务服务
        * 任务是由系统中真实人员执行的,它是Activiti这类BPMN引擎的核心功能之一。 所有与任务有关的功能都包含在TaskService中:
        *   查询分配给用户或组的任务
            创建独立运行任务。这些任务与流程实例无关。
            手工设置任务的执行者,或者这些用户通过何种方式与任务关联。
            认领并完成一个任务。认领意味着一个人期望成为任务的执行者, 即这个用户会完成这个任务。完成意味着“做这个任务要求的事情”。 通常来说会有很多种处理形式。
        *
        * */
        TaskService taskService = defaultProcessEngine.getTaskService();

        /*获取身份服务
        *   它可以管理(创建,更新,删除,查询...)群组和用户。 请注意, Activiti执行时并没有对用户进行检查。
        *   例如,任务可以分配给任何人,但是引擎不会校验系统中是否存在这个用户。
        *   这是Activiti引擎也可以使用外部服务,比如ldap,活动目录,等等
        * */
        IdentityService identityService = defaultProcessEngine.getIdentityService();

        /*获取表单服务(可选服务)
        *   是一个可选服务。即使不使用它,Activiti也可以完美运行, 不会损失任何功能。这个服务提供了启动表单和任务表单两个概念。
        *   启动表单会在流程实例启动之前展示给用户, 任务表单会在用户完成任务时展示。Activiti支持在BPMN 2.0流程定义中设置这些表单。
        *   这个服务以一种简单的方式将数据暴露出来。再次重申,它时可选的, 表单也不一定要嵌入到流程定义中
        * */
        FormService formService = defaultProcessEngine.getFormService();

        /*获取历史服务
        *提供了Activiti引擎手机的所有历史数据。 在执行流程时,引擎会保存很多数据(根据配置),
        * 比如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过查询功能来获得这些数据。
        * */
        HistoryService historyService = defaultProcessEngine.getHistoryService();

        /*获取管理服务
        * 在使用Activiti的定制环境中基本上不会用到。 它可以查询数据库的表和表的元数据。另外,它提供了查询和管理异步操作的功能。
        * Activiti的异步操作用途很多,比如定时器,异步操作, 延迟暂停、激活,等等。后续,会讨论这些功能的更多细节。
        * */
        ManagementService managementService = defaultProcessEngine.getManagementService();

        //关闭流程引擎
        defaultProcessEngine.close();
        System.exit(0);
    }
}
使用activity服务:

发布流程:将我们事先创建的请假流程BPMN文件进行发布,让activity引擎知道改流程。

package com.cp;
import org.activiti.engine.*;
/**
 * 人生中第一个工作流代码
 * Created by 程程有小棉被啊 on 2019/7/17.
 */
public class FirstAct {
    public static void main(String[] args) {
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
       
        //发布流程
        repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
        
        defaultProcessEngine.close();
        System.exit(0);
    }
}

启动一个流程实例: 将发布好的流程启动

package com.cp;
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
/**
 * 人生中第一个工作流代码
 * Created by 程程有小棉被啊 on 2019/7/17.
 */
public class FirstAct {
    public static void main(String[] args) {
        /*创建流程引擎*/
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        //发布流程
repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
        //获取运行时服务
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        //启动流程(myProcess_1 为bpmn中的id)
        ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess_1");
        //关闭流程引擎
        defaultProcessEngine.close();
        System.exit(0);
    }
}

执行任务和完成任务

package com.cp;
import org.activiti.engine.*;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
/**
 * 人生中第一个工作流代码
 * Created by 程程有小棉被啊 on 2019/7/17.
 */
public class FirstAct {
    public static void main(String[] args) {
        /*创建流程引擎*/
        ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
        RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
        //发布流程
        repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy();
        //获取运行时服务
        RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
        //启动流程(myProcess_1 为bpmn中的id)
        ProcessInstance myProcess = runtimeService.startProcessInstanceByKey("myProcess_1");
        //获取任务服务
        TaskService taskService = defaultProcessEngine.getTaskService();

        //员工提交申请
        Task task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
        System.out.println("当前流程节点:" + task.getName()); //submit apply
        //提交流程
        taskService.complete(task.getId());
        
        //经理审批申请
        task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
        System.out.println("当前流程节点:" + task.getName()); //check apply
        //提交流程 此时该流程结束
        taskService.complete(task.getId());

        //流程结束
        task = taskService.createTaskQuery().processInstanceId(myProcess.getId()).singleResult();
        System.out.println("流程结束后:" + task);//null

        //关闭流程引擎
        defaultProcessEngine.close();
        System.exit(0);
    }
}

至此 第一个简单的activity代码完成(写的不好,大佬见谅,勿喷),后续的学习还会继续更新。加油!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值