超实用的activiti学习入门
1.认识activiti activiti是一种工作流的实现框架;Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。activiti中的核心API ①ProcessEngine(核心--服务大管家) ②RepositoryS...
1.认识activiti
activiti是一种工作流的实现框架;Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
activiti中的核心API
①ProcessEngine(核心--服务大管家)
②RepositoryService(重要--规则相关)
③RuntimeService(重要--运行时)
④TaskService(重要--针对人工任务)
⑤ProcessDefinition(流程定义【规则】对象)
⑥ProcessInstance(流程实例)
2.前期准备安装Activiti+核心对象。
2.1.安装Activiti
把Activiti插件引入到eclipse中。
步骤1:解压你下载的activiti-eclipse-plugin5.16.rar
步骤2:把压缩包中的内容放入eclipse根目录的dropins文件夹下
步骤3:重启eclipse,点击新建工程new->Other…打开面板,如果看到下图内容
说明安装成功
2.2.导包
导入你下载的Activiti的压缩包,找到wars,把后缀改为.zip,然后解压,在wars中有WEB-INF下面的lib,里面的jar包全部复制导入在eclipse项目中。
3.3.测试
获取一下核心对象,打印一下
@Test
public void testConnect3() throws Exception {
// 核心对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
3.使用Activiti
3.1绘制流程--定义(规则)流程
通过eclipese插件绘制流程,会产生两个文件:bpmn(流程定义文件),png(流程图);
3.2.流程定义(规则)管理--核心(ProcessDefinition)
3.2.1、部署流程
@Test
public void testDeloy() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 获取流程发布对象
DeploymentBuilder createDeployment = repositoryService.createDeployment();
// 上传资源
createDeployment.addClasspathResource("MyProcess.bpmn");
createDeployment.addClasspathResource("MyProcess.png");
createDeployment.name("xxx");
// 部署发布
Deployment deploy = createDeployment.deploy();
System.out.println(deploy);
}
3.2. 2、流程定义列表查询
// 查询流程定义信息列表
@Test
public void testQueryProcessDef() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 获取查询对象
ProcessDefinitionQuery createProcessDefinitionQuery = repositoryService.createProcessDefinitionQuery();
// 设置查询条件
//createProcessDefinitionQuery.listPage(firstResult, maxResults)
List<ProcessDefinition> list = createProcessDefinitionQuery.list();
for (ProcessDefinition pd : list) {
System.out.println(pd);
}
}
3.2. 3、删除流程(删除部署,流程的挂起和激活)
// 删除部署(物理删数-真删)
@Test
public void testdeleteDeloy() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
repositoryService.deleteDeployment("2501");
System.out.println();
}
// 假删除部署 (挂起和激活)
@Test
public void testUpdateDeleteDeloy() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 挂起
//repositoryService.suspendProcessDefinitionByKey("myProcess");
// 激活
repositoryService.activateProcessDefinitionByKey("myProcess");
}
3.2. 4、查看规则流程图
// 显示流程图片
@Test
public void testShowPng() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// web项目输出到浏览器的输入流
// 模拟输出本地硬盘
// 获取png图片
String deploymentId="5001";
String resourceName="MyProcess.png";
// 获取输入的流对象 读的字节
InputStream resourceAsStream = repositoryService.getResourceAsStream(deploymentId, resourceName);
//模拟输出本地硬盘
IOUtils.copy(resourceAsStream, new FileOutputStream("d:/a.png"));
}
3.3流程运行时管理--核心(ProcessInstance)
3.3.1、启动流程
// 启动流程实例
@Test
public void testStartInstance() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// runtimeService 运行
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
// 根据流程的定义key启动
ProcessInstance startProcessInstanceByKey = runtimeService.startProcessInstanceByKey("myProcess");
System.out.println(startProcessInstanceByKey);
}
3.3. 2、查看任务
// 获取任务列表
@Test
public void testQueryTask() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
List<Task> list = createTaskQuery.list();
for (Task task : list) {
System.out.println(task);
}
}
① 私有任务
// 获取某个人的任务列表
@Test
public void testQueryTaskByName() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 获取查询对象
TaskQuery createTaskQuery = taskService.createTaskQuery();
// 设置查询条件
createTaskQuery.taskAssignee("ls");
List<Task> list = createTaskQuery.list();
for (Task task : list) {
System.out.println(task);
}
}
②公共任务
// 添加发布部署
@Test
public void testDeloy() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 获取流程发布对象
DeploymentBuilder createDeployment = repositoryService.createDeployment();
// 上传资源
createDeployment.addClasspathResource("codeProcess.bpmn");
createDeployment.addClasspathResource("codeProcess.png");
createDeployment.name("开发任务");
// 部署发布
Deployment deploy = createDeployment.deploy();
System.out.println(deploy);
}
3.3.3、认领任务
// 认领公有任务
@Test
public void testCaimTask() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "2504";
String userId="zs";
// 要
taskService.claim(taskId, userId);
}
3.3.4、完成任务
// l办理完成任务 私有任务
@Test
public void testlsCompleTaskByName() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "12502";
taskService.complete(taskId);
}
3.3.5、查看流程状态
// 查询流程是否结束
@Test
public void testIsEnd() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RuntimeService 运行
RuntimeService runtimeService = defaultProcessEngine.getRuntimeService();
// 查询对象
ProcessInstanceQuery createProcessInstanceQuery = runtimeService.createProcessInstanceQuery();
// 根据id
ProcessInstance singleResult = createProcessInstanceQuery.processInstanceId("2501").singleResult();
// 如果singleResult找到说明流程还没有结束
if (singleResult != null) {
System.out.println("流程未结束或不存在");
} else {
System.out.println("流程结束");
}
}
4.history查看历史
// 有多少次执行这个实例流程(也就是有多少人离职)
@Test
public void queryHisprocessdef() {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// 获取历史服务
HistoryService historyService = defaultProcessEngine.getHistoryService();
// 获取查询对象
HistoricProcessInstanceQuery createHistoricProcessInstanceQuery = historyService
.createHistoricProcessInstanceQuery();
// 设置查询条件
createHistoricProcessInstanceQuery.processDefinitionKey("myProcess");
// 获取列表
List<HistoricProcessInstance> list = createHistoricProcessInstanceQuery.list();
System.out.println("离职人数:" + list.size());
}
以上就是Activiti的五个最重要的功能,按照以上步骤,可以基本完成一个基本的工作流程了;
最后给大家安利一个非常好用的反编译插件,为了我们能更好的研究源码,我把其他反编译工具封装成eclipse的插件了
在下方评论找我要插件哦!
更多推荐
所有评论(0)