Activity工作流(三):Service服务

本文详细介绍了Activiti流程引擎中的关键服务,如RepositoryService用于部署流程文件和管理流程定义,RuntimeService处理流程实例的启动和删除,TaskService涉及任务的查询和操作,IdentityService管理用户和用户组,以及HistoryService记录历史信息。此外,还提到了ManagementService的管理和维护功能。
摘要由CSDN通过智能技术生成

3. Service服务

在这里插入图片描述

所有的Service都通过流程引擎获得。

3.1 RepositoryService

仓库服务是存储相关的服务,一般用来部署流程文件,获取流程文件(bpmn和图片),查询流程定义信息等操作,是引擎中的一个重要的服务。部署流程定义操作的数据库表有:部署表(act_re_deployment)、流程定义表(act_re_procdef)和二进制表(act_ge_bytearray)

//获取仓库服务
RepositoryService repositoryService= processEngine.getRepositoryService();
//部署流程
Deployment deployment =repositoryService.createDeployment()
        .name("请假流程")
        .addClasspathResource("leave.bpmn")
        .deploy(); // 完成部署
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
// 根据流程定义的key来过滤
query.processDefinitionKey("leave2");
// 添加排序条件
query.orderByProcessDefinitionVersion().desc();
//分页查询,从哪开始,查询几条
query.listPage(0, 2);
// 查询的是所有的流程定义
List<ProcessDefinition> list = query.list();
for (ProcessDefinition pd : list) {
    System.out.println(pd.getId() + "-" + pd.getName() + "-" + pd.getVersion());
}
//根据id删除流程
repositoryService.deleteDeployment("1005");

部署文件实际是一个bpmn文件和一个png图片
在这里插入图片描述
部署bpmn的时候,系统自动生成了一个png图片,可以下载查看:

RepositoryService repositoryService = processEngine.getRepositoryService();
String deploymentId = "72501";//部署id
List<String> names = repositoryService.getDeploymentResourceNames(deploymentId);
for (String name : names) {
    System.out.println(name);
    // 获得两个流程定义文件对应的输入流
    InputStream in = repositoryService.getResourceAsStream(deploymentId, name);
    // 读取输入流写到指定的本地磁盘上
    FileCopyUtils.copy(in, new FileOutputStream("F:/" + name));
    in.close();
}

去F盘下可以看到两个文件:
在这里插入图片描述

自动生成的png图片中文会乱码,解决这个问题需要在processEngineConfiguration的bean中配置字体,如图:

<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>

在这里插入图片描述

如果不想生成png图片,可以配置如下属性:

<property name="createDiagramOnDeploy" value="false" />

还可以将png和bpnm添加到zip压缩包中,部署zip压缩包。

// 从类路径下读取leave.zip压缩文件,并把它包装成一个输入流
ZipInputStream zipInputStream = new ZipInputStream(this.getClass()
        .getClassLoader().getResourceAsStream("leave.zip"));
Deployment deployment = repositoryService.createDeployment()
        .addZipInputStream(zipInputStream)
        .deploy(); // 完成部署

Activiti会把压缩包内的bpmn和png添加到数据库,即数据库里存的是解压后的两个文件而不是zip。

使用idea生成bpmn对应的png,需要把bpmn的文件后缀名改成xml

在这里插入图片描述

根据流程定义id获取文件流:

String processDefinitionId = "leave2:5:62504"; // 流程定义id
// 直接获得png图片的名称
// 根据流程定义id查询流程定义对象
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
query.processDefinitionId(processDefinitionId);
ProcessDefinition processDefinition = query.singleResult();
// 根据流程定义对象获得png图片的名称,getResourceName()是获得bpmn
String pngName = processDefinition.getDiagramResourceName();
// 直接获得png图片对应的输入流
InputStream pngStream = repositoryService.getProcessDiagram(processDefinitionId);
// 读取输入流写到指定的本地磁盘上
FileCopyUtils.copy(pngStream, new FileOutputStream("F:/" + pngName));
pngStream.close();

3.2 RuntimeService

流程运行时的流程实例,流程定义,流程版本,流程节点等信息,使用运行时服务操作,是引擎中的一个重要的服务,启动流程实例操作的数据表有流程实例表(act_ru_execution)、任务表(act_ru_task)。

RuntimeService runtimeService = processEngine.getRuntimeService();
//key是act_re_procdef中的KEY_,即bpmn文件的id
runtimeService.startProcessInstanceByKey("leave2");
//或者根据流程定义id启动,id是act_re_procdef中的ID_,推荐使用
runtimeService.startProcessInstanceById("leave2:5:62504");
//一个KEY_对应多个ID_,即一个流程定义可以产生多个流程实例。
//查询流程,操作的是流程实例表(act_ru_execution)
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
List<ProcessInstance> list = query.list();

删除一个流程实例

String processInstanceId = "1001"; // 流程实例id
String deleteReason = "不请假了"; // 删除原因,任君写
runtimeService.deleteProcessInstance(processInstanceId, deleteReason);

3.3 TaskService

对任务进行查询、接收、办理、完成等操作。查询任务操作的数据表是任务表(act_ru_task)。

TaskService taskService = processEngine.getTaskService();
//创建查询对象,指定查询人,进行查询
List<Task> taskList =taskService.createTaskQuery().taskAssignee("ZhangSan").list();

//提交任务到下一个代理人
taskService.complete(task.getId());
listPage(offset,pageSize)用于分页查询

3.4 IdentityService

流程运行过程中的一些用户信息,组信息等操作使用认证服务,但是认证服务一般只作为辅助,每一个系统都有一个比较完整的人员系统,创建用户和用户组等操作。一般不使用自带的认证。

//添加用户组
IdentityService identityService = processEngine.getIdentityService();
Group groupEntity = identityService.newGroup("1001");
groupEntity.setName("超级管理员");
groupEntity.setType("administrator");
identityService.saveGroup(groupEntity);//保存用户组
//删除用户组
identityService.deleteGroup("1");

//添加用户
User user = identityService.newUser("10001");
user.setEmail("admin@sina.com");
user.setFirstName("zhang");
user.setLastName("san");
user.setPassword("admin");
identityService.saveUser(user);//保存用户
identityService.deleteUser("10001");//删除用户

3.5 HistoryService

流程运行时和运行完成之后的一些历史信息,包括历史任务,历史节点等

HistoryService historyService = processEngine.getHistoryService();
//查询历史运行信息
HistoricProcessInstance historicProcessInstance =
        historyService
                .createHistoricProcessInstanceQuery()
                .processInstanceId("40001").singleResult();
System.out.println("开始时间:" + historicProcessInstance.getStartTime());
System.out.println("结束时间:" + historicProcessInstance.getEndTime());

3.6 FormService

可选服务,任务表单管理 后续讲解

3.7 ManagementService

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

ManagementService managementService = processEngine.getManagementService();
String taskTable = managementService.getTableName(Task.class);
System.out.println(taskTable);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专治八阿哥的孟老师

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值