1.工作流概念
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在“多个参与者”之间按照某种“预定义的规则”传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。通俗的说,流程就是多个人在一起合作完成某件事情的步骤,把步骤变成计算机能理解的形式就是工作流。
2.流程设计器
2.1安装流程设计器(eclipse插件),在有网络的情况下安装
2.2安装流程设计器步骤如下:
2.3打开 Help -> Install New Software. 在如下面板中
2.4在如下Install界面板中,点击Add按钮:
2.5配置新装插件的地址和名称
2.6然后填入下列字段 Name: Activiti BPMN 2.0 designer Location: http://activiti.org/designer/update/
2.7回到Install界面,在面板正中列表中把所有展示出来的项目都勾上:
2.8点击复选框
2.9在Detail部分记得选中 "Contact all updates sites.." , 因为它会检查所有当前安装所需要的插件并可以被Eclipse下载.
安装完以后,点击新建工程new->Other…打开面板,如果看到下图内容:
说明安装成功了
3.导入Activiti5的jar包
在activiti-5.13->wars目录下是一些示例项目,解压activiti-rest项目,导入activiti-rest目录中WEB-INF\lib下所有包。添加到classpath中。
3.1核心API
ProcessEngine(核心--服务大管家)
epositoryService(重要--规则相关)
RuntimeService(重要--运行时)
TaskService(重要--针对人工任务)
ProcessDefinition(流程定义【规则】对象)
ProcessInstance(流程实例)
Execution
3.2四个核心的api
查询部署信息列表和流程定义列表
RepositoryService getRepositoryService();
查询运行的实例的表
RuntimeService getRuntimeService();
查询任务表
TaskService getTaskService();
查询历史的表
HistoryService getHistoryService();
4.测试
4.1默认加载配置文件 最佳实践 约定大于配置
@Test
public void testConnect3() throws Exception {
// 核心对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println(processEngine);
}
4.2 设计流程定义: 流程图
4.3 流程发布
// 添加发布部署
@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);
}
// 删除部署(物理删数-真删)
@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");
}
// 显示流程图片
@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"));
}
4.4流程的定义列表查询
// 查询部署列表
@Test
public void testQueryDeloy() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// RepositoryService 仓库
RepositoryService repositoryService = defaultProcessEngine.getRepositoryService();
// 查询对象
DeploymentQuery createDeploymentQuery = repositoryService.createDeploymentQuery();
// 设置查询条件
// createDeploymentQuery.deploymentName(name)
//createDeploymentQuery.deploymentId(deploymentId)
//createDeploymentQuery.deploymentNameLike(nameLike)
//createDeploymentQuery.listPage(firstResult, maxResults)
//createDeploymentQuery.singleResult();
List<Deployment> list = createDeploymentQuery.list();
for (Deployment deployment : list) {
System.out.println(deployment.getDeploymentTime());
}
}
// 查询流程定义信息列表
@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);
}
}
4.5查看规则流程图
// 添加发布部署
@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);
}
// 启动流程实例
@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);
}
// 获取任务列表
@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);
}
}
// zs 办理完成任务 私有任务
@Test
public void testCompleTaskByName() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "10004";
taskService.complete(taskId);
}
// 办理完成任务 私有任务
@Test
public void testwwCompleTaskByName2() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "5002";
taskService.complete(taskId);
}
// 认领公有任务
@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);
}
// 办理完成任务 私有任务
@Test
public void testlsCompleTaskByName() throws Exception {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// TaskService 任务
TaskService taskService = defaultProcessEngine.getTaskService();
// 完成任务
String taskId = "12502";
taskService.complete(taskId);
}
// 查询流程是否结束
@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.6History历史查询
// 有多少次执行这个实例流程(也就是有多少人离职)
@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());
}
// 获取活动节点日志--(查询那些人办理任务)
@Test
public void queryAci() {
// 获取核心对象 服务大管家
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
// 获取历史服务
HistoryService historyService = defaultProcessEngine.getHistoryService();
// 获取查询对象
HistoricActivityInstanceQuery createHistoricActivityInstanceQuery = historyService
.createHistoricActivityInstanceQuery();
// 设置查询条件
createHistoricActivityInstanceQuery.processInstanceId("2501");
// 获取列表
List<HistoricActivityInstance> list = createHistoricActivityInstanceQuery.list();
for (HistoricActivityInstance ac : list) {
System.out.println("=================");
System.out.println(ac.getActivityId());
System.out.println(ac.getActivityName());
System.out.println(ac.getStartTime());
System.out.println(ac.getEndTime());
}
}
5.2查看源码反编译代码直接把反编译源码包放到eclipse下的dropins文件下重启服务器就可以了。