介绍

Activiti api设计的非常友好,使用的过程中也是学习到了api设计的一些技巧,有时间也会整理下,activit api主要是分两大块
  • Service
  • Query

Service负责执行动作,Query负责执行查询,也就是涉及到数据的增、删、改由Service负责,涉及到数据的由Query负责,在spring boot中,Service可以通过注入获取,Query可以通过相应的Service获取,所有的Service都可以通过ProcessEngine获取。

Service

activiti有8个service管理着activiti所有的资源

  • TaskService-对用户任务进行操作和查询
  • RepositoryService-对activiti资源进行操作,比如部署文件,附件
  • RuntimeService-运行时服务,可以对运行时流程进行修改,如增加变量,移除变量等
  • IdentityService-身份认证服务,对用户,用户组,用户角色进行操作
  • HistoryService-历史记录服务,对审批历史进行操作
  • FormService-表单服务,操作表单数据
  • DynamicBpmnService-通过该服务,可以动态修改流程
  • ManagementService-管理服务,查看当前activiti系统信息,不会在应用里用到,一般用于管理系统里

Query

之前章节提到,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为例

  • T taskName(String name); 相等查询
  • T taskNameIn(List nameList); in查询
  • T taskNameInIgnoreCase(List nameList); 不分大小写in查询
  • T taskNameLike(String nameLike); 模糊查询
  • T taskNameLikeIgnoreCase(String nameLike); 不分大小写模糊查询

提供多个字段排序操作

ProcessEngine

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();
}
, ,
Trackback

no comment untill now

Add your comment now