文章目录

  • 一、基础知识
    • 1.1activiti核心工作机制
    • 1.2BPM
    • 1.3BPMN
  • 二、入门案例
    • 2.1流程设计器插件安装
    • 2.2 创建数据库,名字随意
    • 2.3创建maven工程
    • 2.4导入pom依赖
    • 2.5配置文件activiti.cfg.xml
    • 2.6放log4j.properties文件到项目中
    • 2.7运行java程序,创建数据库表
    • 2.8数据库表说明
  • 三、activiti架构类与接口说明
    • 3.1activiti服务架构图
    • 3.2ProcessEngine
    • 3.3Service
  • 四、流程定义
    • 4.1创建bpmn文件
    • 4.2画BPMN图
    • 4.3分配任务
    • 4.4文件备份与重命名
    • 4.5导出流程图
  • 五、部署流程定义
  • 六、启动流程实例
  • 七、任务查询
  • 八、当前用户任务处理
  • 九、压缩包部署方式
  • 十、流程定义查询
  • 十一、删除已部署流程的定义
  • 十二、流程资源资源查看
  • 十三、历史数据查询
  • 十四、关联业务系统
  • 十五、全部流程实例的挂起与激活
  • 十六、单个流程实例的挂起与激活

一、基础知识

1.1activiti核心工作机制

流程变更的时候不需要改变源代码,因为节点的数据是记录在表中的,而对于多一个流程或者少一个流程来说,只是在表中多一条记录或者少一条记录而已,并不需要去改变源代码.

1、画好流程图
2、将流程图的每个节点的数据读取并放入数据库
3、从表中读取第一条记录,处理并删除

1.2BPM

BPM(Business Process Management),即业务流程管理,是一种以规范化的构造端到端的卓越
业务流程为中心,以持续的提高组织业务绩效为目的系统化方法,常见商业管理教育如EMBA、MBA
等均将 BPM 包含在内。

1.3BPMN

BPMN(Business Process Model And Notation)- 业务流程模型和符号 是由 BPMI(Business
Process Management Initiative)开发的一套标准的业务流程建模符号,使用 BPMN 提供的符号可以
创建业务流程。

二、入门案例

2.1流程设计器插件安装

idea安装actiBPM插件

2.2 创建数据库,名字随意

CREATE DATABASE activiti DEFAULT CHARACTER SET utf8;

2.3创建maven工程

2.4导入pom依赖

  1. activiti-engine-7.0.0.beta1.jar
  2. activiti依赖的 jar 包:mybatis、alf4j、log4j 等
  3. activiti依赖的 spring包
  4. 数据库驱动
  5. 第三方数据连接池 dbcp
  6. 单元测试 Junit-4.12.jar
    <properties><slf4j.version>1.6.6</slf4j.version><log4j.version>1.2.12</log4j.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!-- log start --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><!-- log end --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency></dependencies><repositories><repository><id>alfresco</id><name>Activiti Releases</name><url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url><releases><enabled>true</enabled></releases></repository></repositories>

2.5配置文件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"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/itcast0711activiti" /><property name="username" value="root" /><property name="password" value="root" /><property name="maxActive" value="3" /><property name="maxIdle" value="1" /></bean><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="dataSource" ref="dataSource"></property><property name="databaseSchemaUpdate" value="true"/></bean><!--<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="jdbcDriver" value="com.mysql.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast0711activiti"/><property name="jdbcUsername" value="root"/><property name="jdbcPassword" value="root"/><property name="databaseSchemaUpdate" value="true"/></bean>-->
</beans>

2.6放log4j.properties文件到项目中

2.7运行java程序,创建数据库表

    public static void main(String[] args) {//创建ProcessEngineConfigurationProcessEngineConfiguration configuration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
//通过ProcessEngineConfiguration创建ProcessEngine,此时会创建数据库ProcessEngine processEngine =configuration.buildProcessEngine();System.out.println(processEngine);}

执行完成之后会在数据库创建25张表

2.8数据库表说明

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

三、activiti架构类与接口说明

3.1activiti服务架构图

3.2ProcessEngine

工作流引擎,相当于一个门面接口,通过 ProcessEngineConfiguration 创建 processEngine,通过
ProcessEngine 创建各个 service 接口。
一般创建方式:

//通过ProcessEngineConfiguration创建ProcessEngine
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();

简单创建方式:
将 activiti.cfg.xml文件名及路径固定,且 activiti.cfg.xml文件中有 processEngineConfiguration 的配置,
可以使用如下代码创建 processEngine:

//使用classpath下的activiti.cfg.xml中的配置创建processEngine
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);

3.3Service

Service 创建方式
通过 ProcessEngine 创建 Service,Service 是工作流引擎提供用于进行工作流部署、执行、管理的服
务接口。
方式如下

RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
……

Service 总览

RepositoryService
是 activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工
具设计的业务流程图需要使用此 service 将流程定义文件的内容部署到计算机。
除了部署流程定义以外还可以:
查询引擎中的发布包和流程定义。
暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活
是对应的反向操作。
获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
获得流程定义的 pojo 版本, 可以用来通过 java 解析流程,而不必通过 xml。
RuntimeService
它是 activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息
TaskService
是 activiti的任务管理类。可以从这个类中获取任务的信息。
HistoryService
是 activiti 的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比
如流程实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个
服务主要通过查询功能来获得这些数据。

四、流程定义

4.1创建bpmn文件

4.2画BPMN图


如果有中文乱码问题,参考文章:https://blog.csdn.net/vimonkey/article/details/72910153

4.3分配任务

4.4文件备份与重命名

先备份一份文件,再改名:
holidy.bpmn -> holidy.xml

4.5导出流程图


导出:

将图片放到这个目录,并且将xm改成bpmn

五、部署流程定义

public class ActivitiDeployment {public static void main(String[] args) {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();// 获取repositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();//部署对象Deployment deployment = repositoryService.createDeployment().addClasspathResource("diagram/holidy.bpmn")// bpmn文件.addClasspathResource("diagram/holidy.png")// 图 片 文 件.name("请假申请流程").deploy();System.out.println("流程部署id:" + deployment.getId());System.out.println("流程部署名称:" + deployment.getName());}
}

影响的表:

六、启动流程实例

 act_re_deployment  部署信息act_re_procdef     流程定义的一些信息act_ge_bytearray   流程定义的bpmn文件及png文件

流程定义、流程部署与流程实例的关系:

    public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RunService对象RuntimeService runtimeService = processEngine.getRuntimeService();//3.创建流程实例  流程定义的key需要知道 holidayProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess_1");//4.输出实例的相关信息System.out.println("流程部署ID"+processInstance.getDeploymentId());//nullSystem.out.println("流程定义ID"+processInstance.getProcessDefinitionId());//holiday:1:4System.out.println("流程实例ID"+processInstance.getId());//2501System.out.println("活动ID"+processInstance.getActivityId());//null}

key在这里可以找到:

也可以在bpmn文件中找到。
影响的表:

         act_hi_actinst     已完成的活动信息act_hi_identitylink   参与者信息act_hi_procinst   流程实例act_hi_taskinst   任务实例act_ru_execution   执行表act_ru_identitylink   参与者信息act_ru_task  任务

七、任务查询

public class ActivitiTaskQuery {public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到TaskService对象TaskService taskService = processEngine.getTaskService();//3.根据流程定义的key,负责人assignee来实现当前用户的任务列表查询Task task = taskService.createTaskQuery().processDefinitionKey("myProcess_1").taskAssignee("zhangsan").singleResult();//4.任务列表的展示System.out.println("流程实例ID:"+task.getProcessInstanceId());System.out.println("任务ID:"+task.getId());  //5002System.out.println("任务负责人:"+task.getAssignee());System.out.println("任务名称:"+task.getName());}
}

八、当前用户任务处理

public class ActivitiCompleteTask {//查询当前用户wangwu的任务并处理掉public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到TaskService对象TaskService taskService = processEngine.getTaskService();//3.查询当前用户的任务Task task = taskService.createTaskQuery().processDefinitionKey("myProcess_1").taskAssignee("zhangsan").singleResult();//4.处理任务,结合当前用户任务列表的查询操作的话,任务ID:task.getId()taskService.complete(task.getId());//5.输出任务的idSystem.out.println(task.getId());}//lishi完成自己的任务/*public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到TaskService对象TaskService taskService = processEngine.getTaskService();//3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:5002taskService.complete("5002");}*///zhangsan完成自己的任务/*public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到TaskService对象TaskService taskService = processEngine.getTaskService();//3.处理任务,结合当前用户任务列表的查询操作的话,任务ID:2505taskService.complete("2505");}*/

影响的表:

     act_hi_actinstact_hi_identitylinkact_hi_taskinstact_ru_identitylinkact_ru_task

九、压缩包部署方式

将 holiday .bpmn 和 holiday .png 压缩成 zip 包。

public void deployProcessByZip() {// 定义zip输入流
InputStream inputStream = this
.getClass()
.getClassLoader()
.getResourceAsStream(
" diagram/holiday.zip");
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
// 获取repositoryService
RepositoryService repositoryService = processEngine
.getRepositoryService();
// 流程部署
Deployment deployment = repositoryService.createDeployment()//
.addZipInputStream(zipInputStream)
.deploy();
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
}

十、流程定义查询

public class QueryProcessDefinition {public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.创建RepositoryService对象RepositoryService repositoryService = processEngine.getRepositoryService();//3.得到ProcessDefinitionQuery对象,可以认为它就是一个查询器ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();//4.设置条件,并查询出当前的所有流程定义   查询条件:流程定义的key=holiday//orderByProcessDefinitionVersion() 设置排序方式,根据流程定义的版本号进行排序List<ProcessDefinition> list = processDefinitionQuery.processDefinitionKey("holiday").orderByProcessDefinitionVersion().desc().list();//5.输出流程定义信息for(ProcessDefinition processDefinition :list){System.out.println("流程定义ID:"+processDefinition.getId());System.out.println("流程定义名称:"+processDefinition.getName());System.out.println("流程定义的Key:"+processDefinition.getKey());System.out.println("流程定义的版本号:"+processDefinition.getVersion());System.out.println("流程部署的ID:"+processDefinition.getDeploymentId());}}
}

十一、删除已部署流程的定义

public class DeleteProcessDefinition {/*** 注意事项:*     1.当我们正在执行的这一套流程没有完全审批结束的时候,此时如果要删除流程定义信息就会失败*     2.如果公司层面要强制删除,可以使用repositoryService.deleteDeployment("1",true);*     //参数true代表级联删除,此时就会先删除没有完成的流程结点,最后就可以删除流程定义信息  false的值代表不级联** @param args*/public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.创建RepositoryService对象RepositoryService repositoryService = processEngine.getRepositoryService();//3.执行删除流程定义  参数代表流程部署的idrepositoryService.deleteDeployment("1");}
}

影响的表:

   act_ge_bytearrayact_re_deploymentact_re_procdef

注意事项:

     * 注意事项:*     1.当我们正在执行的这一套流程没有完全审批结束的时候,此时如果要删除流程定义信息就会失败*     2.如果公司层面要强制删除,可以使用repositoryService.deleteDeployment("1",true);*     //参数true代表级联删除,此时就会先删除没有完成的流程结点,最后就可以删除流程定义信息  false的值代表不级联

十二、流程资源资源查看

        <!--文件读写操作--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.0</version></dependency>
/*** 需求:* 1.从Activiti的act_ge_bytearray表中读取两个资源文件* 2.将两个资源文件保存到路径:   G:\Activiti7开发计划\Activiti7-day03\资料** 技术方案:*     1.第一种方式使用actviti的api来实现*     2.第二种方式:其实就是原理层面,可以使用jdbc的对blob类型,clob类型数据的读取,并保存*        IO流转换,最好commons-io.jar包可以轻松解决IO操作** 真实应用场景:用户想查看这个请假流程具体有哪些步骤要走?***/public static void main(String[] args) throws IOException {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RepositoryService对象RepositoryService repositoryService = processEngine.getRepositoryService();//3.得到查询器:ProcessDefinitionQuery对象ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();//4.设置查询条件processDefinitionQuery.processDefinitionKey("holiday");//参数是流程定义的key//5.执行查询操作,查询出想要的流程定义ProcessDefinition processDefinition = processDefinitionQuery.singleResult();//6.通过流程定义信息,得到部署IDString deploymentId = processDefinition.getDeploymentId();//7.通过repositoryService的方法,实现读取图片信息及bpmn文件信息(输入流)//getResourceAsStream()方法的参数说明:第一个参数部署id,第二个参数代表资源名称//processDefinition.getDiagramResourceName() 代表获取png图片资源的名称//processDefinition.getResourceName()代表获取bpmn文件的名称InputStream pngIs = repositoryService.getResourceAsStream(deploymentId,processDefinition.getDiagramResourceName());InputStream bpmnIs = repositoryService.getResourceAsStream(deploymentId,processDefinition.getResourceName());//8.构建出OutputStream流OutputStream pngOs =new FileOutputStream("G:\\Activiti7开发计划\\Activiti7-day03\\资料\\"+processDefinition.getDiagramResourceName());OutputStream bpmnOs =new FileOutputStream("G:\\Activiti7开发计划\\Activiti7-day03\\资料\\"+processDefinition.getResourceName());//9.输入流,输出流的转换  commons-io-xx.jar中的方法IOUtils.copy(pngIs,pngOs);IOUtils.copy(bpmnIs,bpmnOs);//10.关闭流pngOs.close();bpmnOs.close();pngIs.close();bpmnIs.close();}

十三、历史数据查询

public class HistoryQuery {public static void main(String[] args) throws IOException {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到HistoryServiceHistoryService historyService = processEngine.getHistoryService();//3.得到HistoricActivitiInstanceQuery对象HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery();historicActivityInstanceQuery.processInstanceId("2501");//设置流程实例的id//4.执行查询List<HistoricActivityInstance> list = historicActivityInstanceQuery.orderByHistoricActivityInstanceStartTime().asc().list();//排序StartTime//5.遍历查询结果for (HistoricActivityInstance instance :list){System.out.println(instance.getActivityId());System.out.println(instance.getActivityName());System.out.println(instance.getProcessDefinitionId());System.out.println(instance.getProcessInstanceId());System.out.println("=============================");}}
}

十四、关联业务系统

启动流程实例的时候,关联业务标识businessKey

/***  启动流程实例,添加进businessKey**  本质:act_ru_execution表中的businessKey的字段要存入业务标识*/
public class BusinessKeyAdd {public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RuntimeService对象RuntimeService runtimeService = processEngine.getRuntimeService();//3.启动流程实例,同时还要指定业务标识businessKey  它本身就是请假单的id//第一个参数:是指流程定义key//第二个参数:业务标识businessKeyProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday", "1001");//4.输出processInstance相关的属性,取出businessKey使用:processInstance.getBusinessKey()System.out.println(processInstance.getBusinessKey());}
}

十五、全部流程实例的挂起与激活

public class SuspendProcessInstance {public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();//3.查询流程定义的对象ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("holiday").singleResult();//4.得到当前流程定义的实例是否都为暂停状态boolean suspended = processDefinition.isSuspended();String processDefinitionId = processDefinition.getId();//5.判断if(suspended){//说明是暂停,就可以激活操作repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定义:"+processDefinitionId+"激活");}else{repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);System.out.println("流程定义:"+processDefinitionId+"挂起");}}
}

十六、单个流程实例的挂起与激活

public class SuspendProcessInstance2 {public static void main(String[] args) {//1.得到ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RuntimeServiceRuntimeService runtimeService = processEngine.getRuntimeService();//3.查询流程实例对象ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("2501").singleResult();//4.得到当前流程定义的实例是否都为暂停状态boolean suspended = processInstance.isSuspended();String processInstanceId = processInstance.getId();//5.判断if(suspended){//说明是暂停,就可以激活操作runtimeService.activateProcessInstanceById(processInstanceId);System.out.println("流程:"+processInstanceId+"激活");}else{runtimeService.suspendProcessInstanceById(processInstanceId);System.out.println("流程定义:"+processInstanceId+"挂起");}}
}

activiti7笔记相关推荐

  1. Activiti7笔记(二)Activiti7一共涉及到25张表,哪些操作会涉及哪些表,每张表的作用是什么

    目录 1 表结构介绍 1.1 表的命名规则和作用 1.2Activiti数据表介绍 2 什么场景下要操作哪些表? 2.1 流程部署涉及到的表 2.1.1流程定义表 :[ACT_RE_DEPLOYMEN ...

  2. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot

    本篇学习笔记是观看黑马程序员Activiti7视频而得 Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是" ...

  3. activiti7关联mysql_学习笔记:一个MySQL实例有多个Activiti数据库问题

    学习笔记:一个MySQL实例有多个Activiti数据库问题 使用SpringBoot + activiti6 搭建审批流项目,数据库使用的是MySQL.且我的数据库下存在多个activiti相关的数 ...

  4. Activiti7学习笔记、非常详细 | 基础篇

    Activiti7 一.工作流介绍 1.1 概念 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档. ...

  5. Activiti7学习笔记、非常详细 | 进阶篇

    Activiti进阶 一.流程实例 什么是流程实例 流程实例(ProcessInstance)代表流程定义的执行实例. 一个流程实例包括了所有的运行节点.我们可以利用这个对象来了解当前流程实例的进度等 ...

  6. Activiti7工作流-使用Idea开发体验Activti_请假流程---工作流工作笔记006

    然后上一个文章我们已经创建了一个请假流程,然后然后我们用这个请假流程来做一下,审批 来使用一下activiti完成一个简单的工作流 首先我们是来部署,可以看到,部署首先要拿到ProcessEngine ...

  7. Activiti7工作流介绍及使用

    文章目录 一.工作流介绍 1.1 概念 1.2 工作流系统 1.3 适用行业 1.4 具体应用 1.5 实现方式 二.Activiti7概述 2.1 介绍 2.1.1 BPM 2.1.2 BPM软件 ...

  8. Activiti7 工作流引擎入门

    Activiti7 工作流引擎入门 做课目的 一.适用人群: 普通人 不是每个人都能进入一线互联网大厂 BATJ 普通人,省城,软件公司,银行.政府做 二.适用项目:OA CRM ERP 系统 出差报 ...

  9. docker搭建学习笔记

    以下笔记来自B站狂胜教学: 感谢狂神的教学视频 1.docker的出现解决了什么问题? 首先,一个项目的上线,离不开开发和运维.Docker将两者连接起来,开发人员在docker上,将项目带上环境安装 ...

  10. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

最新文章

  1. python打包成exe闪退_脚本程序打包后,黑框一闪而过,程序不能运行
  2. emqx配置mysql认证_emqx使用mysql完成用户密码验证和ACL鉴权-Go语言中文社区
  3. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01
  4. 查看linux的用户
  5. hosts多个ip对应一个主机名_Ubuntu16.04修改主机名和查看主机名的方法
  6. 路由器的四根指针怎么放?
  7. thinkphp中I(parm)用法的注意事项
  8. VC++使用ADO开发ACCESS数据库
  9. 简用计算机,你真的会使用“计算器”吗?
  10. 学生HTML5今后的打算,今后我打算小学生日记
  11. Linux下使用源码包安装禅道
  12. 从零开始系类——模拟电子技术
  13. jQuery视频展示效果实例
  14. c语言绝对值函数作用,C语言实现abs和fabs绝对值
  15. 汽车VIN码识别功能实现资料,轻松实现VIN码识别
  16. android 仿微信加载框,Android自定义控件——仿微信半透明加载框
  17. 【干货】你常用的5种地图数据汇总对比,值得收藏~
  18. centos7重装python_centos7.6删除重新安装python和yum
  19. 身价10亿的打工皇帝—唐骏
  20. 编译原理LR(0)项目集规范族的构造和分析的构造

热门文章

  1. 百度云平台BAE空间申请
  2. 江城子 . 程序员之歌
  3. 泛微OA流程中如何引用自开发的JS
  4. 泛微OA流程action 之 ACTION 封装
  5. Gson的基本介绍和使用
  6. formatter格式说明
  7. Excel快速拆分单元格内容
  8. 把单元格一分为二_excel如何把一个单元格分成两个 excel单元格拆分为二行
  9. 搜狗首席科学家柳超博士谈“字根嵌入”让机器更懂中文
  10. 负载均衡添加ssl证书