activiti学习笔记
activiti入门
- activiti官网
- pom.xml文件
xml <!-- activiti --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.18.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>5.18.0</version> </dependency> <!-- activiti结束 -->
- 安装activiti插件
CSDN教程 - 创建bpm图
1.开始点
2.结束点
3.任务
4.执行人
5.流程id,流程名 部署流程
```java
public class Test {
// getDefaultProcessEngine会读取activiti.cfg.xml
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();/**
* 部署流程
*/
@org.junit.Test
public void deploy() {
//读取资源文件部署
Deployment deploy = processEngine.getRepositoryService().createDeployment()
.addClasspathResource("bpmn/helloWorld.bpmn").addClasspathResource("bpmn/helloWorld.png").deploy();
// act_re_deployment部署对象表
// act_re_procdef 流程定义表
// act_ge_bytearray 资源文件表
System.out.println(deploy.getId());
System.out.println(deploy.getName());
}
}
```- 启动流程
```java
/**- 启动流程实例
*/
@org.junit.Test
public void run() {
// key值对应bpmn中流程的id 默认按最新版本启动
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("helloWorld");
// 流程实例id
System.out.println(pi.getId());
// 流程定义id
System.out.println(pi.getProcessDefinitionId());
}
``` - 启动流程实例
- 查询任务
```java
/**查询任务
*/
@org.junit.Test
public void task() {
// 通过执行人进行查询
List list = processEngine.getTaskService().createTaskQuery().taskAssignee("李四").list();
for (Task task : list) {
// 任务id
System.out.println(task.getId());
// 任务名
System.out.println(task.getName());
// 任务创建时间
System.out.println(task.getCreateTime());
// 流程实例id
System.out.println(task.getProcessInstanceId());
// 流程定义id
System.out.println(task.getProcessDefinitionId());}
}
``` - 完成任务
java /** * 完成任务 */ @org.junit.Test public void complete() { // 查询李四的所有任务 List<Task> list = processEngine.getTaskService().createTaskQuery().taskAssignee("李四").list(); for (Task task : list) { System.out.println(task.getId()); // 通过任务id进行完成 processEngine.getTaskService().complete(task.getId()); } }
- 查询所有部署
java /** * 查询所有部署 */ @org.junit.Test public void findDeploy() { List<Deployment> deploymentList = processEngine.getRepositoryService().createDeploymentQuery().list(); for (Deployment deployment : deploymentList) { System.out.println(deployment.getId()); System.out.println(deployment.getName()); } }
删除流程定义
/**
* 删除部署
*/
@org.junit.Test
public void deleteDeploy() {
String deployString = "20001";
// 部署表,流程定义表,资源表内容删除
// 普通删除:如果本流程定义正在运行会抛出异常
// 多级删除: 删除与本流程定义所关联的所有信息
processEngine.getRepositoryService().deleteDeployment(deployString);
System.out.println("删除部署成功");
}
获得部署资源文件
/**
* 获得部署的资源文件
*
* @throws IOException
*/
@org.junit.Test
public void getResources() throws IOException {
// 部署对象id
String id = "7501";
// 查询出当前部署的所有资源文件png+bpm
List<String> deploymentResourceNames =
processEngine.getRepositoryService().getDeploymentResourceNames(id);
String png = null;
for (String name : deploymentResourceNames) {
// 获得png文件名
if (name.indexOf(".png") >= 0) {
png = name;
}
}
System.out.println(png);
// 获得当前文件流
InputStream resourceAsStream =
processEngine.getRepositoryService().getResourceAsStream(id, png);
File file = new File("d:/" + png);
FileUtils.copyToFile(resourceAsStream, file);
}
获得最新版本的流程定义
/**
* 查询最新坂本流程定义
*/
@org.junit.Test
public void queryLatestVersion() {
// 查询流程定义按版本排序
List<ProcessDefinition> list = processEngine.getRepositoryService()
.createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
// 创建一个map用于存放最新版本的流程定义
Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
// 遍历流程定义集合
for (ProcessDefinition processDefinition : list) {
map.put(processDefinition.getKey(), processDefinition);
}
// 遍历最新版本流程定义获得信息
for (ProcessDefinition processDefinition : map.values()) {
System.out.println("id:" + processDefinition.getId());
System.out.println("name:" + processDefinition.getName());
System.out.println("key:" + processDefinition.getKey());
System.out.println("version:" + processDefinition.getVersion());
}
}
查询流程状态
/**
* 查询流程状态
*/
@org.junit.Test
public void processState() {
// 流程实例
String pid = "47501";
// 通过流程实例id进行查询返回唯一结果
ProcessInstance singleResult = processEngine.getRuntimeService().createProcessInstanceQuery()
.processInstanceId(pid).singleResult();
// 判断结果不为空
if (singleResult != null) {
System.out.println("未完成");
System.out.println(singleResult.getActivityId());
} else {
System.out.println("流程结束");
}
}
查询历史任务
/**
* 查询历史任务
*/
@org.junit.Test
public void getHistoryTasks() {
// 历史任务办理人
String assignee = "张三";
// 通过历史任务办理人进行查询
List<HistoricTaskInstance> list = processEngine.getHistoryService()
.createHistoricTaskInstanceQuery().taskAssignee(assignee).list();
// 遍历历史任务
for (HistoricTaskInstance historicTaskInstance : list) {
// 任务id
System.out.println(historicTaskInstance.getId());
// 任务办理人
System.out.println(historicTaskInstance.getAssignee());
// 任务名
System.out.println(historicTaskInstance.getName());
// 任务流程实例
System.out.println(historicTaskInstance.getProcessInstanceId());
}
}
查询历史流程定义
/**
* 查询历史流程实例
*/
@org.junit.Test
public void historyProcessInstance() {
// 通过流程定义key进行查询
List<HistoricProcessInstance> list = processEngine.getHistoryService()
.createHistoricProcessInstanceQuery().processDefinitionKey("helloWorld").list();
// 遍历结果集
for (HistoricProcessInstance historicProcessInstance : list) {
System.out.println(historicProcessInstance.getId());
// 启动时间
System.out.println(historicProcessInstance.getStartTime());
// 结束时间
System.out.println(historicProcessInstance.getEndTime());
// 持续时间
System.out.println(historicProcessInstance.getDurationInMillis());
System.out.println(historicProcessInstance.getName());
System.out.println(historicProcessInstance.getProcessDefinitionKey());
}
}
设置与获取流程变量
/**
* 设置获取流程变量
*/
@org.junit.Test
public void setGetVariables() {
String pi = "47501";
String person = "李四";
TaskService taskService = processEngine.getTaskService();
Task task =
taskService.createTaskQuery().processInstanceId(pi).taskAssignee(person).singleResult();
String taskId = task.getId();
// 设置流程变量
taskService.setVariable(taskId, "审核意见", "同意");
taskService.setVariable(taskId, "备注", "路上注意安全");
/**
* setVariable和setVariableLocal的区别
* setVariable:流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值
* setVariableLocal:一个流程中存在2个活动节点,流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值
* 使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量
*/
// 变量存在javaBean前提要让javaBean实现序列化
LeaveInfo leaveInfo = new LeaveInfo();
leaveInfo.setId("1");
leaveInfo.setLeaveMsg("test");
taskService.setVariable(taskId, "javaBean", leaveInfo);
// 获取流程变量
String shyj = (String) taskService.getVariable(taskId, "审核意见");
String bz = (String) taskService.getVariable(taskId, "备注");
System.out.println(shyj);
System.out.println(bz);
// 同时要求流程变量对象的属性不能发生发生变化,否则抛出异常
LeaveInfo javaBean = (LeaveInfo) taskService.getVariable(taskId, "javaBean");
System.out.println(javaBean.getId());
System.out.println(javaBean.getLeaveMsg());
}
- RuntimeService对象可以设置流程变量和获取流程变量
- TaskService对象可以设置流程变量和获取流程变量
- 流程实例启动的时候可以设置流程变量
- 任务办理完成的时候可以设置流程变量
- 流程变量可以通过名称/值的形式设置单个流程变量
- 流程变量可以通过名称/值的形式设置单个流程变量
- Map集合的key表示流程变量的名称
- Map集合的value表示流程变量的值
查询历史流程变量
/**
* 查询历史流程变量
*/
@org.junit.Test
public void historyVariable() {
HistoricVariableInstance variable =
processEngine.getHistoryService().createHistoricVariableInstanceQuery().variableName("审核意见")
.processInstanceId("47501").singleResult();
// 流程变量名
System.out.println(variable.getVariableName());
// 流程变量的值
System.out.println(variable.getValue());
}
17.根据流程变量走不同的流程
- 流程图
代码:
```java
package com.cjrj.bootactividemo;import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;/**
- 审核附加流程变量
- @author Jamin
*/
public class Test2 {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();@Test
public void test() {
// 部署
Deployment deploy = processEngine.getRepositoryService().createDeployment()
.addClasspathResource("bpm/test.bpmn").addClasspathResource("bpm/test.png").name("test")
.deploy();
// 启动
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess");
Task task = processEngine.getTaskService().createTaskQuery().taskAssignee("张三")
.processInstanceId(pi.getId()).singleResult();
// 审批附加流程变量
Map<String, Object> map = new HashMap<String, Object>();
map.put("message", "重要");
processEngine.getTaskService().complete(task.getId(), map);
// 查询李四的任务
Task task1 = processEngine.getTaskService().createTaskQuery().taskAssignee("李四")
.processInstanceId(pi.getId()).singleResult();
// 如果message是重要task1不为空,如果message是不重要的task为空
if (task1 != null) {
System.out.println(task1.getName());
} else {
System.out.println("结束");
}
}
}
```
排他网关
代码:
```java
package com.cjrj.bootactividemo;
import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;/**
- 排他网关
- @author Jamin
- */
public class Test3 {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@org.junit.Test
public void test() {
// 部署
Deployment deployment = processEngine.getRepositoryService().createDeployment()
.addClasspathResource("reimburse/MyProcess.bpmn")
.addClasspathResource("reimburse/MyProcess.png").deploy();
// 启动
ProcessInstance processInstance =
processEngine.getRuntimeService().startProcessInstanceByKey("reimburse");
// 查询任务
Task task = processEngine.getTaskService().createTaskQuery().taskAssignee("张三")
.processInstanceId(processInstance.getId()).singleResult();
System.out.println("------------------------------------------------");
System.out.println(task.getId());
System.out.println("-------------------------------------------------");
// 完成任务,附带流程定义
Map<String, Object> map = new HashMap<String, Object>();
map.put("money", 10000);
processEngine.getTaskService().complete(task.getId(), map);
// 李四的任务
Task lisi = processEngine.getTaskService().createTaskQuery().taskAssignee("李四")
.processInstanceId(processInstance.getId()).singleResult();
Task wangwu = processEngine.getTaskService().createTaskQuery().taskAssignee("王五")
.processInstanceId(processInstance.getId()).singleResult();
Task zhaoliu = processEngine.getTaskService().createTaskQuery().taskAssignee("赵六")
.processInstanceId(processInstance.getId()).singleResult();
if (lisi == null) {
System.out.println("李四没有任务");
}
if (wangwu == null) {
System.out.println("王五没有任务");
}
if (zhaoliu == null) {
System.out.println("赵六没有任务");
}
}
}
```
- 接收任务
代码:
```java
package com.cjrj.bootactividemo;import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;/**
- 接受任务(启动流程实例 执行查询执行对象 查询不到第一个)
- @author Jamin
- @date 2019年7月16日 下午8:08:15
- */
public class Task5 {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@org.junit.Test
public void test() {
// 部署
Deployment deploy = processEngine.getRepositoryService().createDeployment()
.addClasspathResource("message/message.bpmn").addClasspathResource("message/message.png")
.deploy();
// 启动
ProcessInstance processInstance =
processEngine.getRuntimeService().startProcessInstanceByKey("message");
System.out.println(processInstance.getId());
// 查询执行对象
Execution execution = processEngine.getRuntimeService().createExecutionQuery()
.processInstanceId(processInstance.getId()).activityId("receivetask1").singleResult();
System.out.println("当前执行对象");
System.out.println(execution.getActivityId());
System.out.println("end当前执行对象");
processEngine.getRuntimeService().signal(execution.getId());
ProcessInstance pi = processEngine.getRuntimeService().createProcessInstanceQuery()
.processInstanceId(processInstance.getId()).singleResult();
System.out.println("查询实例是否结束");
System.out.println(pi);
// 查询执行对象
Execution execution2 = processEngine.getRuntimeService().createExecutionQuery()
.processInstanceId(processInstance.getId()).activityId("receivetask2").singleResult();
System.out.println("当前执行对象");
System.out.println(execution2.getActivityId());
System.out.println("end当前执行对象");
processEngine.getRuntimeService().signal(execution2.getId());
ProcessInstance pi2 = processEngine.getRuntimeService().createProcessInstanceQuery()
.processInstanceId(processInstance.getId()).singleResult();
System.out.println("查询实例是否结束");
System.out.println(pi2);
}
}
```
20.个人任务
1.直接指定办理人
2.通过流程变量指定办理人bpmn图
代码
java /** * 通过流程变量指定办理人 * * @author Jamin * @date 2019年7月17日下午4:18:30 * @return void */ @org.junit.Test public void test() { // 部署 Deployment deploy = repositoryService.createDeployment() .addClasspathResource("personVariables/personVariables.bpmn") .addClasspathResource("personVariables/personVariables.png").deploy(); // 启动并设定流程变量,指定组办理人 HashMap<String, Object> map = new HashMap<String, Object>(); map.put("userId", "张三"); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("personVariables", map); System.out.println("流程实例:" + processInstance.getId()); // 查询个人任务 List<Task> list = taskService.createTaskQuery().taskAssignee("张三").list(); for (Task task : list) { System.out.println(task.getId()); System.out.println(task.getName()); System.out.println(task.getExecutionId()); System.out.println(task.getAssignee()); } }
- 通过类指定办理人
创建一个实现了TaskListener的类
```java
package com.cjrj.bootactividemo;import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
/**
* 实现TaskListener接口完成指定办理人
*
* @author Jamin
* @date 2019年7月17日 下午4:23:30
*
*/
public class TaskListenerImpl implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
// 指定办理人
String person = "张三";
// 设置办理人
delegateTask.setAssignee(person);
}
}
```
- bpmn图绑定监听
测试代码
```java
/**
* 通过类指定办理人
*
* @author Jamin
* @date 2019年7月17日下午4:20:31
* @return void
*/
@org.junit.Test
public void test2() {
TaskListenerImpl taskListenerImpl = new TaskListenerImpl();
// 部署
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("personVariables/personClass.bpmn")
.addClasspathResource("personVariables/personClass.png").deploy();
// 启动并设定流程变量,指定组办理人
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("userId", "张三");
ProcessInstance processInstance =
runtimeService.startProcessInstanceByKey("personVariables", map);
System.out.println("流程实例:" + processInstance.getId());
// 查询个人任务
Task task = taskService.createTaskQuery().taskAssignee("张三")
.processInstanceId(processInstance.getId()).singleResult();
System.out.println("张三任务:" + task.getName());
// 转交任务
taskService.setAssignee(task.getId(), "李四");
Task task1 = taskService.createTaskQuery().taskAssignee("李四")
.processInstanceId(processInstance.getId()).singleResult();
System.out.println("李四的任务:" + task1.getName());}
```
- 组任务
直接指定
使用流程变量
使用类
代码
```java
package com.cjrj.bootactividemo;import java.util.List;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricIdentityLink;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.IdentityLink;
import org.activiti.engine.task.Task;
/**
* 组任务
*
* @author Jamin
* @date 2019年7月17日 下午5:12:21
*
*/
public class Test7 {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
TaskService taskService = processEngine.getTaskService();
/**
* 直接指定
*
* @author Jamin
* @date 2019年7月17日下午5:13:02
* @return void
*/
@org.junit.Test
public void test() {
// 第一种
/*
* // 部署 repositoryService.createDeployment().addClasspathResource("group/first.bpmn")
* .addClasspathResource("group/first.png").deploy(); // 启动 ProcessInstance processInstance =
* runtimeService.startProcessInstanceByKey("first"); System.out.println("流程实例id:" +
* processInstance.getId());
*/
// 第二种
/*
* Deployment deploy =
* repositoryService.createDeployment().addClasspathResource("group/second.bpmn")
* .addClasspathResource("group/second.png").deploy(); HashMap<String, Object> map = new
* HashMap<String, Object>(); map.put("userId", "张三,李四,王五"); ProcessInstance processInstance =
* runtimeService.startProcessInstanceByKey("second", map);
*/
// 第三种
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("group/third.bpmn").addClasspathResource("group/third.png").deploy();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("third");
System.out.println("流程实例id" + processInstance.getId());
// 查询组任务
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskCandidateUser("张三").list();
System.out.println("组任务:" + list);
String taskId = null;
for (Task task : list) {
System.out.println(task.getName());
System.out.println(task.getAssignee());
System.out.println(task.getId());
taskId = task.getId();
}
// 查询组成员
List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskId);
for (IdentityLink identityLink : identityLinksForTask) {
System.out.println(identityLink.getGroupId());
System.out.println(identityLink.getUserId());
} // 查询历史组成员列表
List<HistoricIdentityLink> historicIdentityLinksForTask =
processEngine.getHistoryService().getHistoricIdentityLinksForTask(taskId);
for (HistoricIdentityLink historicIdentityLink : historicIdentityLinksForTask) {
System.out.println(historicIdentityLink.getUserId());
System.out.println(historicIdentityLink.getGroupId());
}
// 组任务转个人可以是任何人
taskService.claim(taskId, "张11");
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskAssignee("张11").singleResult();
System.out.println("组任务转个人任务名:" + task.getName());
// 个人任务转组(必须任务以前是组任务)
taskService.setAssignee(task.getId(), null);
// 检测是否转组任务成功,
List<Task> list1 = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskCandidateUser("张三").list();
String taskId1 = null;
for (Task task1 : list) {
System.out.println("转组任务:" + task1.getName());
System.out.println("转组任务:" + task1.getAssignee());
System.out.println("转组任务:" + task1.getId());
taskId1 = task.getId();
}
// 添加人员
taskService.addCandidateUser(taskId1, "qiqi");
// 查询参与人员
List<IdentityLink> identityLinksForTask2 = taskService.getIdentityLinksForTask(taskId1);
for (IdentityLink identityLink : identityLinksForTask2) {
System.out.println("添加人员后" + identityLink.getUserId());
}
// 删除人员张三
taskService.deleteCandidateUser(taskId1, "张三");
List<IdentityLink> identityLinksForTask3 = taskService.getIdentityLinksForTask(taskId1);
for (IdentityLink identityLink : identityLinksForTask3) {
System.out.println("删除人员后:" + identityLink.getUserId());
}
// 完成任务
taskService.complete(taskId);
}
}
```
- 分配任务给一个角色
- bpmn图
代码:
```java
/**
* 分配任务负责的组
* 可以分配给多个角色
* 三种方式都可
*
* @author Jamin
* @date 2019年7月18日上午8:28:12
* @return void
/
@org.junit.Test
public void four() {
// 部署
Deployment deploy = repositoryService.createDeployment().addClasspathResource("group/four.bpmn")
.addClasspathResource("group/four.png").deploy();
IdentityService identityService = processEngine.getIdentityService();
// 创建组与用户并关联
/
* identityService.saveGroup(new GroupEntity("部门经理")); identityService.saveGroup(new
* GroupEntity("总经理")); identityService.saveUser(new UserEntity("张三"));
* identityService.saveUser(new UserEntity("李四")); identityService.createMembership("张三",
* "部门经理"); identityService.createMembership("李四", "总经理");
/
// 使用流程变量设置角色
/
* HashMap<String, Object> map = new HashMap<String, Object>(); map.put("group", "部门经理,总经理");
*/// 启动
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("four");
// 查询个人任务
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskCandidateUser("李四").singleResult();
System.out.println(task.getName());
}
// 查询执行任务的组
List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
for (IdentityLink identityLink : identityLinksForTask) {
System.out.println(identityLink.getGroupId());
```
- bpmn图
- 总结:
- 流程步骤
- bpmn
- 使用bpmn图或zip部署
- 启动流程
- 查询个人任务或组任务
- 实现办理人的三种方式:
- 直接指定
- 使用流程变量,启动时指定
- 使用监听器
- 21点与22点: 21点是指定多人,可以是任意一个人,以人为单位,22点必须创建角色,执行人是角色中的任意一个,以角色为单位,都可以进行任务转让,添加删除
- 流程步骤
activiti学习笔记的更多相关文章
- Activiti 学习笔记记录(2016-8-31)
上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件
- Activiti 学习笔记记录(二)
上一篇:Activiti 学习笔记记录 导读:对于工作流引擎的使用,我们都知道,需要一个业务事件,比如请假,它会去走一个流程(提交申请->领导审批---(批,不批)---->结束),Act ...
- Activiti学习笔记目录
1.Activiti学习笔记1 — 下载与开发环境的配置: 2.Activiti学习笔记2 — HelloWorld: 3.Activiti学习笔记3 — 流程定义: 4.Activiti学习笔记4 ...
- activiti学习笔记一
activiti学习笔记 在讲activiti之前我们必须先了解一下什么是工作流,什么是工作流引擎. 在我们的日常工作中,我们会碰到很多流程化的东西,什么是流程化呢,其实通俗来讲就是有一系列固定的步骤 ...
- Activiti 学习笔记(2016-8-30)
前言 不管学习什么,都必须对知识体系中专有的名词或者特定的语言组织方式 有所了解. 本文仅记录学习过程中的笔记,参考意义因人而定,不保证所言全部正确. 学习方式,百度传课的视频<权威Activi ...
- Activiti 学习笔记记录
官方在线用户手册(英文版):http://activiti.org/userguide/index.html 中文用户手册:http://www.mossle.com/docs/activiti/in ...
- Activiti学习笔记1 — 下载与开发环境的配置
一.下载 JDK下载URL: Tomcat下载URL:http://tomcat.apache.org/ Eclipse下载URL:http://www.oracle.com/technetwork/ ...
- Activiti学习笔记11 — 判断节点的使用
一. 创建流程 <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns=" ...
- Activiti学习笔记10 — 动态任务分配
动态任务分配使用的两种方式 一.通过特殊表达式,来获取任务信息 ,在流程 UserTask节点上设置 ${流程变量的Key} 1.流程定义 <?xml version="1.0&quo ...
随机推荐
- Objective
1.NSSet 1.是一个无序的,管理多个对象的集合类,最大特点 是集合中不允许出现重复对象,和数学上的集合含义是一 样的 2.除了无序.不许重复之外,其它功能和NSArray是一样的 2.NSArr ...
- vista忘记用户名密码的修改方法(使用PE进入系统,用cmd.exe冒充虚拟键盘,然后就可以mmc组策略,或者命令行添加用户并提升权限)
1. 准备Windows Vista安装光盘,进入BIOS将光驱设为第一启动,在出现的安装界面依次单击"修复计算机","命令提示符". 2.输入以下命令: co ...
- Change Default Route
route delete 0.0.0.0route add 0.0.0.0 mask 0.0.0.0 10.226.4.14
- hadoop之文件管理基本操作
# 格式化hdfs hadoop namenode -format # 查看hadoop下的文件夹 hadoop fs -ls # 创建hdfs文件夹 hadoop fs -mkdir /user/i ...
- kolla-ansible-----快速部署openstack
基本环境 操作系统:CentOS Linux release 7.5.1804 (Core) 内核版本:3.10.0-862.el7.x86_64 docker版本:1.13.1 1.禁用宿主机的 L ...
- Hyperledger Fabric1.4环境搭建过程
简单记录一下fabric版本1.4的环境搭建,运行环境为Ubuntu18.04,其中一些内容是根据官方文档整理的,如有错误欢迎批评指正. 本文只介绍最简单的环境搭建方法,具体的环境搭建解析在这里深入解 ...
- sails连接monogodb数据库
1.全局安装:cnpm install -g sails 2.命令窗口进入项目位置 新建项目:sails new sails_cqwu --fast,选择2(快速建立sails项目) 3.cd进入sa ...
- U盘刻录kali linux启动盘提示找不到镜像解决方案
选择“继续”后会来到步骤菜单,选择从shell启动,命令 df -m 查看当前磁盘挂载情况,看到 /media 目录 输入命令 umount /media 进行挂载然后输入 exit 退出
- 推荐一个高效,易用功能强大的可视化API管理平台
项目管理 提供基本的项目分组,项目管理,接口管理功能 接口管理 友好的接口文档,基于websocket的多人协作接口编辑功能和类postman测试工具,让多人协作成倍提升开发效率 MockServer ...
- 【设计模式】行为型07备忘录模式(Memento Pattern)
参考地址:http://www.runoob.com/design-pattern/memento-pattern.html 对原文总结调整,以及修改代码以更清晰的展示: 备忘录模式(快照模式): ...