Activiti api 设计的非常友好,使用的过程中也是学习到了api设计的一些技巧,有时间也会整理下,activit api主要是分两大块
Service负责执行动作,Query负责执行查询,也就是涉及到数据的 增、删、改
由Service负责,涉及到数据的 查
由Query负责,在spring boot中,Service可以通过注入获取,Query可以通过相应的Service获取,所有的Service都可以通过 ProcessEngine
获取。
activiti有8个service管理着activiti所有的资源
service名称 | 说明 |
---|---|
TaskService | 对用户任务进行操作和查询 |
RepositoryService | 对activiti资源进行操作,比如部署文件,附件 |
RuntimeService | 运行时服务,可以对运行时流程进行修改,如增加变量,移除变量等 |
IdentityService | 身份认证服务,对用户,用户组,用户角色进行操作 |
HistoryService | 历史记录服务,对审批历史进行操作 |
FormService | 表单服务,操作表单数据 |
DynamicBpmnService | 通过该服务,可以动态修改流程 |
ManagementService | 管理服务,查看当前activiti系统信息,不会在应用里用到,一般用于管理系统里 |
之前章节提到,activiti总共会创建28张表,对于一个流程系统来说,28张表并不算多,你完全可以阅读源码或者发起几个流程看出各表之间的关系,然后自定义一些查询,但完全没这个必要,因为api的Query查询基本涵盖了所有的查询需求,而且因为其友好的api设计大部分的函数通过名称就能知道其功能,也可以通过功能反推其api名称。
这里稍微介绍下Query的设计,大家也可以学习下
public interface Query<T extends Query<?, ?>, U extends Object> { /** 升序操作 */ T asc(); /** 降序操作 */ T desc(); /** 计算总数 */ long count(); /** 查询单个结果 */ U singleResult(); /** 查询列表 */ List<U> list(); /** 分页查询 */ List<U> listPage(int firstResult, int maxResults); }
定义了5个基本操作,2个T和U的泛型,T为Query本身,在非数据返回的操作返回T自身可以让api以builder进行调用,U为操作的数据类型。
以下是一个实现类 TaskQueryInfo
的定义
public interface TaskInfoQuery<T extends TaskInfoQuery<?, ?>, V extends TaskInfo> extends Query<T, V>{ }
然后将表中重要业务字段作为查询字段,并提供多种方式查询,以 taskName
为例
提供多个字段排序操作
ProcessEngine
包含所有的service
public interface ProcessEngine { String getName(); void close(); RepositoryService getRepositoryService(); RuntimeService getRuntimeService(); FormService getFormService(); TaskService getTaskService(); HistoryService getHistoryService(); IdentityService getIdentityService(); ManagementService getManagementService(); DynamicBpmnService getDynamicBpmnService(); ProcessEngineConfiguration getProcessEngineConfiguration(); FormRepositoryService getFormEngineRepositoryService(); org.activiti.form.api.FormService getFormEngineFormService(); }