1.介绍

Activiti是一个工作流引擎, activiti可以将业务系统中复杂的业务流程抽取出来,使用专门的建模语言
BPMN2.0进行定义,业务流程按照预先定义的流程进行执行,实现了系统的流程由activiti进行管理,减
少业务系统由于流程变更进行系统升级改造的工作量,从而提高系统的健壮性,同时也减少了系统开发
维护成本。

官方网站:https://www.activiti.org/

2.BPM和BPMN

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

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

BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准。Activiti 就是使用 BPMN 2.0 进行流程建模、流程
执行管理,它包括很多的建模符号,比如:
Event
用一个圆圈表示,它是流程中运行过程中发生的事情。

活动用圆角矩形表示,一个流程由一个活动或多个活动组成


Bpmn图形其实是通过xml表示业务流程,上边的.bpmn文件使用文本编辑器打开:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="myleaveprocess" name="员工请假审批流程" isExecutable="true"><startEvent id="sid-30C5C04C-6B86-48CB-A849-F61F8410FF0F"></startEvent><userTask id="sid-0B17D13A-0775-48F9-AB7F-B4F1B42419E5" name="提交请假申请" activiti:assignee="employee"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-39191196-966E-4254-9826-CB20D34C913B" sourceRef="sid-30C5C04C-6B86-48CB-A849-F61F8410FF0F" targetRef="sid-0B17D13A-0775-48F9-AB7F-B4F1B42419E5"></sequenceFlow><userTask id="sid-348B9833-9B49-4512-937D-8C0A6A7755BA" name="部门主任审批" activiti:assignee="sub-leader"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-B30122A6-C14B-4A40-8C9C-0CB0769D66A7" sourceRef="sid-0B17D13A-0775-48F9-AB7F-B4F1B42419E5" targetRef="sid-348B9833-9B49-4512-937D-8C0A6A7755BA"></sequenceFlow><endEvent id="sid-1AB096A5-310D-43A0-94D4-28B5C66C115C"></endEvent><sequenceFlow id="sid-AA6AD2DE-719D-49A1-B076-DAC245D613B5" sourceRef="sid-348B9833-9B49-4512-937D-8C0A6A7755BA" targetRef="sid-1AB096A5-310D-43A0-94D4-28B5C66C115C"></sequenceFlow><userTask id="sid-50F0FA1F-E8A5-4E0D-99DD-20F3598F5C69" name="单位领导审批" activiti:assignee="leader"><extensionElements><modeler:initiator-can-complete xmlns:modeler="http://activiti.com/modeler"><![CDATA[false]]></modeler:initiator-can-complete></extensionElements></userTask><sequenceFlow id="sid-4A201AC4-B343-466A-9058-9833D59FB9C6" sourceRef="sid-348B9833-9B49-4512-937D-8C0A6A7755BA" targetRef="sid-50F0FA1F-E8A5-4E0D-99DD-20F3598F5C69"></sequenceFlow><endEvent id="sid-D9E1C646-2864-4D2E-9350-42B51B5EB7B7"></endEvent><sequenceFlow id="sid-89698514-937E-4DB5-836C-C475BF7649BF" sourceRef="sid-50F0FA1F-E8A5-4E0D-99DD-20F3598F5C69" targetRef="sid-D9E1C646-2864-4D2E-9350-42B51B5EB7B7"></sequenceFlow></process><bpmndi:BPMNDiagram id="BPMNDiagram_myleaveprocess"><bpmndi:BPMNPlane bpmnElement="myleaveprocess" id="BPMNPlane_myleaveprocess"><bpmndi:BPMNShape bpmnElement="sid-30C5C04C-6B86-48CB-A849-F61F8410FF0F" id="BPMNShape_sid-30C5C04C-6B86-48CB-A849-F61F8410FF0F"><omgdc:Bounds height="30.0" width="30.0" x="200.5" y="60.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-0B17D13A-0775-48F9-AB7F-B4F1B42419E5" id="BPMNShape_sid-0B17D13A-0775-48F9-AB7F-B4F1B42419E5"><omgdc:Bounds height="80.0" width="100.0" x="275.5" y="35.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-348B9833-9B49-4512-937D-8C0A6A7755BA" id="BPMNShape_sid-348B9833-9B49-4512-937D-8C0A6A7755BA"><omgdc:Bounds height="80.0" width="100.0" x="420.5" y="35.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-1AB096A5-310D-43A0-94D4-28B5C66C115C" id="BPMNShape_sid-1AB096A5-310D-43A0-94D4-28B5C66C115C"><omgdc:Bounds height="28.0" width="28.0" x="565.5" y="61.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-50F0FA1F-E8A5-4E0D-99DD-20F3598F5C69" id="BPMNShape_sid-50F0FA1F-E8A5-4E0D-99DD-20F3598F5C69"><omgdc:Bounds height="80.0" width="100.0" x="565.5" y="35.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNShape bpmnElement="sid-D9E1C646-2864-4D2E-9350-42B51B5EB7B7" id="BPMNShape_sid-D9E1C646-2864-4D2E-9350-42B51B5EB7B7"><omgdc:Bounds height="28.0" width="28.0" x="710.5" y="61.0"></omgdc:Bounds></bpmndi:BPMNShape><bpmndi:BPMNEdge bpmnElement="sid-39191196-966E-4254-9826-CB20D34C913B" id="BPMNEdge_sid-39191196-966E-4254-9826-CB20D34C913B"><omgdi:waypoint x="230.5" y="75.0"></omgdi:waypoint><omgdi:waypoint x="275.5" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-AA6AD2DE-719D-49A1-B076-DAC245D613B5" id="BPMNEdge_sid-AA6AD2DE-719D-49A1-B076-DAC245D613B5"><omgdi:waypoint x="520.5" y="75.0"></omgdi:waypoint><omgdi:waypoint x="565.5" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-4A201AC4-B343-466A-9058-9833D59FB9C6" id="BPMNEdge_sid-4A201AC4-B343-466A-9058-9833D59FB9C6"><omgdi:waypoint x="520.5" y="75.0"></omgdi:waypoint><omgdi:waypoint x="565.5" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-89698514-937E-4DB5-836C-C475BF7649BF" id="BPMNEdge_sid-89698514-937E-4DB5-836C-C475BF7649BF"><omgdi:waypoint x="665.5" y="75.0"></omgdi:waypoint><omgdi:waypoint x="710.5" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge><bpmndi:BPMNEdge bpmnElement="sid-B30122A6-C14B-4A40-8C9C-0CB0769D66A7" id="BPMNEdge_sid-B30122A6-C14B-4A40-8C9C-0CB0769D66A7"><omgdi:waypoint x="375.5" y="75.0"></omgdi:waypoint><omgdi:waypoint x="420.5" y="75.0"></omgdi:waypoint></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

3.使用步骤

4.表结构介绍

25张表:

4.1表的命名规则和作用

看到刚才创建的表,我们发现Activiti 的表都以 ACT_ 开头。
第二部分是表示表的用途的两个字母标识。 用途也和服务的 API 对应。
ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti 只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE : GE 表示 general。 通用数据, 用于不同场景下

4.2Activiti数据表介绍

表分类表名解释
一般数据
[ACT_GE_BYTEARRAY] 通用的流程定义和流程资源
[ACT_GE_PROPERTY] 系统相关属性
流程历史记录
[ACT_HI_ACTINST] 历史的流程实例
[ACT_HI_ATTACHMENT] 历史的流程附件
[ACT_HI_COMMENT] 历史的说明性信息
[ACT_HI_DETAIL] 历史的流程运行中的细节信息
[ACT_HI_IDENTITYLINK] 历史的流程运行过程中用户关系
[ACT_HI_PROCINST] 历史的流程实例
[ACT_HI_TASKINST] 历史的任务实例
[ACT_HI_VARINST] 历史的流程运行中的变量信息
流程定义表
[ACT_RE_DEPLOYMENT] 部署单元信息
[ACT_RE_MODEL] 模型信息
[ACT_RE_PROCDEF] 已部署的流程定义
运行实例表
[ACT_RU_EVENT_SUBSCR] 运行时事件
[ACT_RU_EXECUTION] 运行时流程执行实例
[ACT_RU_IDENTITYLINK]
运行时用户关系信息,存储任务节点与参与者的相关信息
[ACT_RU_JOB] 运行时作业
[ACT_RU_TASK] 运行时任务
[ACT_RU_VARIABLE] 运行时变量表

5.Servcie服务接口

Service是工作流引擎提供用于进行工作流部署、执行、管理的服务接口,我们使用这些接口可以就是操
作服务对应的数据表。

5.1 Service创建方式

通过ProcessEngine创建Service
方式如下:

RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
5.2 Service服务接口介绍


RepositoryService
是activiti的资源管理类,提供了管理和控制流程发布包和流程定义的操作。使用工作流建模工具设计的
业务流程图需要使用此service将流程定义文件的内容部署到计算机。除了部署流程定义以外还可以:查询引擎中的发布包和流程定义。
暂停或激活发布包,对应全部和特定流程定义。 暂停意味着它们不能再执行任何操作了,激活是对应的
反向操作。获得多种资源,像是包含在发布包里的文件, 或引擎自动生成的流程图。
获得流程定义的pojo版本, 可以用来通过java解析流程,而不必通过xml。

RuntimeService
Activiti的流程运行管理类。可以从这个服务类中获取很多关于流程执行相关的信息

TaskService
Activiti的任务管理类。可以从这个类中获取任务的信息。

HistoryService
Activiti的历史管理类,可以查询历史信息,执行流程时,引擎会保存很多数据(根据配置),比如流程
实例启动时间,任务的参与者, 完成任务的时间,每个流程实例的执行路径,等等。 这个服务主要通过
查询功能来获得这些数据。

ManagementService
Activiti的引擎管理类,提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用
程序中使用,主要用于 Activiti 系统的日常维护。

5.idea中的工作流插件

idea中的工作流插件下载地址–百度网盘

Activiti BPMN visualizer简单使用

1.安装

2,使用-绘制流程




3.流程符号

BPMN 2.0是业务流程建模符号2.0的缩写。
它由Business Process Management Initiative这个非营利协会创建并不断发展。作为一种标识,BPMN
2.0是使用一些符号来明确业务流程设计流程图的一整套符号规范,它能增进业务建模时的沟通效率。
目前BPMN2.0是最新的版本,它用于在BPM上下文中进行布局和可视化的沟通。
接下来我们先来了解在流程设计中常见的 符号。
BPMN2.0的基本符合主要包含:

事件 Event

活动 Activity
活动是工作或任务的一个通用术语。一个活动可以是一个任务,还可以是一个当前流程的子处理流程;
其次,你还可以为活动指定不同的类型。常见活动如下:

网关 GateWay
网关用来处理决策,有几种常用网关需要了解:

流向 Flow
流是连接两个流程节点的连线。常见的流向包含以下几种:

6.Activiti流程操作

6.1流程的部署

单个文件部署

/**
* 实现文件的单个部署
*/
@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());
}

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

/**
* 通过一个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();上传后的数据库中的数据和单个文件上传其实是一样的。4.1.3 操作数据表流程定义部署后操作activiti中的三张表act_re_deployment: 流程定义部署表,每部署一次就增加一条记录act_re_procdef :流程定义表,部署每个新的流程定义都会在这张表中增加一条记录RepositoryService repositoryService = engine.getRepositoryService();Deployment deploy = repositoryService.createDeployment().addZipInputStream(zipInputStream).name("出差申请流程").deploy();// 4.输出流程部署的信息System.out.println("流程部署的id:" + deploy.getId());System.out.println("流程部署的名称:" + deploy.getName());
}

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

act_re_deployment: 流程定义部署表,每部署一次就增加一条记录
**act_re_procdef :**流程定义表,部署每个新的流程定义都会在这张表中增加一条记录
act_ge_bytearray :流程资源表,流程部署的 bpmn文件和png图片会保存在该表中

6.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());
}

输出内容:
启动流程实例涉及到的表结构
act_hi_actinst 流程实例执行历史
act_hi_identitylink 流程的参与用户的历史信息
act_hi_procinst 流程实例历史信息
act_hi_taskinst 流程任务历史信息
act_ru_execution 流程执行信息
act_ru_identitylink 流程的参与用户信息
act_ru_task 任务信息

6.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());}
}

6.4流程任务处理

任务负责人查询出来了待办的人,选择任务进行处理,完成任务

/**
* 流程任务的处理
*/
@Test
public void test07(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();TaskService taskService = engine.getTaskService();Task task = taskService.createTaskQuery().processDefinitionKey("evection").taskAssignee("zhansan").singleResult();// 完成任务taskService.complete(task.getId());
}

zhangsan处理了这个操作后,流程就流转到了 lisi处

然后就是不同的用户登录,然后查询任务处理任务,直到任务流程走完。

6.5流程定义的查询

查询流程相关的信息,包括流程的定义,流程的部署,流程定义的版本
/**

  • 查询流程的定义
    */
    @Test
    public void test08(){
    ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = engine.getRepositoryService();
    // 获取一个 ProcessDefinitionQuery对象 用来查询操作
    ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
    List list = processDefinitionQuery.processDefinitionKey(“evection”)
    .orderByProcessDefinitionVersion() // 安装版本排序
    .desc() // 倒序
    .list();
    // 输出流程定义的信息
    for (ProcessDefinition processDefinition : list) {
    System.out.println(“流程定义的ID:” + processDefinition.getId());
    System.out.println(“流程定义的name:” + processDefinition.getName());
    System.out.println(“流程定义的key:” + processDefinition.getKey());
    System.out.println(“流程定义的version:” +
    processDefinition.getVersion());
    System.out.println(“流程部署的id:” +
    processDefinition.getDeploymentId());
    }
    }

6.6流程的删除

/**
* 删除流程
*/
@Test
public void test09(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = engine.getRepositoryService();// 删除流程定义,如果该流程定义已经有了流程实例启动则删除时报错repositoryService.deleteDeployment("12501");// 设置为TRUE 级联删除流程定义,及时流程有实例启动,也可以删除,设置为false 非级联删除操作。//repositoryService.deleteDeployment("12501",true);
}

注意:项目开发中级联删除操作的权限一般只开发给超级管理员使用。

6.7从了数据库中下载流程资源

现在我们的流程资源文件已经上传到了数据库中,如果其他用户想要查看这些资源,可以从数据库中把
这些资源下载到本地。
解决方案:

  1. jdbc对blob类型处理clob类型数据读取出来就可以了。
  2. 使用activiti的api来实现操作。
    使用activiti的api来操作我们需要添加commons-io的依赖
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
</dependency>
/**
* 读取数据库中的资源文件
*/
@Test
public void test10() throws Exception{// 1.得到ProcessEngine对象ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 2.获取RepositoryService对象RepositoryService repositoryService = engine.getRepositoryService();// 3.得到查询器ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().processDefinitionKey("evection").singleResult();// 4.获取流程部署的idString deploymentId = definition.getDeploymentId();// 5.通过repositoryService对象的相关方法 来获取图片信息和bpmn信息// png图片InputStream pngInput = repositoryService.getResourceAsStream(deploymentId,definition.getDiagramResourceName());// bpmn 文件的流InputStream bpmnInput = repositoryService.getResourceAsStream(deploymentId,definition.getResourceName());// 6.文件的保存File filePng = new File("d:/evection.png");File fileBpmn = new File("d:/evection.bpmn");OutputStream pngOut = new FileOutputStream(filePng);OutputStream bpmnOut = new FileOutputStream(fileBpmn);IOUtils.copy(pngInput,pngOut);IOUtils.copy(bpmnInput,bpmnOut);pngInput.close();pngOut.close();bpmnInput.close();bpmnOut.close();
}

6.8流程历史信息查看

即使流程定义已经被删除了,流程执行的实例信息通过前面的分析,依然保存在Activiti的act_hi_* 的相
关表结构中,所以我们还是可以查询流程的执行的历史信息,可以通过HistoryService来查看

/**
* 流程历史信息查看
*/
@Test
public void test11(){ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();// 查看历史信息我们需要通过 HistoryService来实现HistoryService historyService = engine.getHistoryService();// 获取 actinst 表的查询对象HistoricActivityInstanceQuery instanceQuery =historyService.createHistoricActivityInstanceQuery();instanceQuery.processDefinitionId("evection:1:12504");instanceQuery.orderByHistoricActivityInstanceStartTime().desc();List<HistoricActivityInstance> list = instanceQuery.list();// 输出查询的结果for (HistoricActivityInstance hi : list) {System.out.println(hi.getActivityId());System.out.println(hi.getActivityName());System.out.println(hi.getActivityType());System.out.println(hi.getAssignee());System.out.println(hi.getProcessDefinitionId());System.out.println(hi.getProcessInstanceId());System.out.println("-----------------------");}
}

Activiti应用相关推荐

  1. Activiti——流程执行历史记录(七)

    转自:http://blog.csdn.net/zjx86320/article/details/50363544 之前的几篇文章,为大家简单的介绍了部署流程定义.启动流程实例.查看和办理个人任务以及 ...

  2. Activiti——流程变量(六)

    Activiti--流程变量 转自:http://lib.csdn.net/article/java/66665?knId=268 流程变量在整个工作流中扮演很重要的作用.例如:请假流程中有请假天数. ...

  3. Activiti——工作流之流程实例、任务的执行(五)

    转自:http://profound-accumulation.iteye.com/blog/2244881 一.流程图   二.部署流程定义 /**部署请假流程(从zip)*/ @Test publ ...

  4. Activiti——数据表结构

    备注: 本文转自:http://blog.csdn.net/hj7jay/article/details/51302829 转载目的在于个人学习使用,如有涉及著作权相关问题,请联系本人,本人将第一时间 ...

  5. Activiti——管理流程定义(四)

    Activiti--管理流程定义 1.设计流程定义文档 1.1.流程图 1.2.bpmn文件 <?xml version="1.0" encoding="UTF-8 ...

  6. Activiti——工作流程-核心API(二)

    .1 ProcessEngine 说明: 1) 在Activiti中最核心的类,其他的类都是由他而来. 2) 产生方式: 在前面看到了两种创建ProcessEngine(流程引擎)的方式(http:/ ...

  7. Activiti——准备开发环境(一)

    准备材料下 activiti-5.17.0 1.添加Activiti5 的jar包或Maven依赖 Jar包方式 通过上述下载链接下载Activiti后,解压得到如下目录: 把libs的jar包添加到 ...

  8. 【应用篇】Activiti外置表单实例demo(四)

    在这里我想说的外置表单.是说我们将我们自己的jsp(.form,.html)等页面上传到工作流的数据库中,当任务运行到当前结点时.给我们像前台发送绑定好的表单. 此处是给表单绑定表单的过程 不允许为: ...

  9. Activiti 规则任务(businessRuleTask)

    Activiti 规则任务(businessRuleTask) 作者:邓家海 目前国内研究Activiti规则任务businessRuleTask)的文章在网上应该不超出3篇 小觑夜漫酒作伴,破晓黎明 ...

  10. activiti任务TASK

    一.概要 设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表): 任务主要有:人工任务(usertask),服务任务(servicetask)等 ...

最新文章

  1. 移动端大图缩放模糊_关于移动端小图标模糊问题的解决方法
  2. 神经网络中的权重初始化常用方法
  3. 【原】NSMutableArray的alloc、init方法与array的区别疑问
  4. /proc/irq和/proc/interrupts详解
  5. epon matlab仿真,一种新型的EPON保护结构
  6. ubuntu 14.04 修改PS1提示符
  7. Charles最新版破解注册方法
  8. mac 安装虚拟机win11
  9. oracle minus连接条件,oracle及sqlserve中MINUS 的使用方法
  10. RRD 数据库简介及操作
  11. 日常生活中使用计算机要注意事项有哪些,笔记本电脑日常使用注意事项以及保养技巧...
  12. 手机测试设计测试用例——(1)
  13. 日行一小步,坚持一大步
  14. Python KMeans聚类分析
  15. Win10修改远程桌面3389端口
  16. 『清华ERNIE』 与 『百度ERNIE』 的爱恨情仇
  17. 孩子做作业用计算机,小学五年级写作业让用计算机吗
  18. 前端开发,用 css3 做一个求婚小动画
  19. 用一用Vant组件库
  20. 【牛客讨论区】第六章:Elasticsearch

热门文章

  1. 文件上传下载遇到的异常
  2. 雨笋教育技术干货:漏洞分析,Docker CVE-2018-6552
  3. 【人工智能】大模型的发展历史
  4. C/C++程序计时函数
  5. 树莓派4B从USB-SSD启动ubuntu踩坑指北
  6. 微信小程序(第二十四章)- 数据交互前置
  7. P quant与Q quant
  8. AlignedReID 源码解析
  9. 抢先体验TPS轻松过万的SDAG区块链(一)
  10. node中的cd命令,cd命令