RepositoryService
-
管理流程定义文件xml及静态资源的服务
-
对特定流程的暂停和激活
-
流程定义启动权限管理
-
类内部重要的成员有
-
deploymentBuilder 部署文件构造器
-
deploymentQuery 部署文件查询器
-
ProcessDefinitionQuery 流程定义文件查询对象
-
Deployment 流程部署文件对象
-
ProcessDefinition 流程定义文件对象
-
BpmnModel 流程定义的java格式
/** 获取DeploymentBuilder,用于部署流程,一次可以部署多个流程,常与deploy()方法连用 */
DeploymentBuilder createDeployment();
repositoryService.createDeployment()
.name("xxx") //部署文件名称
.source("xxx")
.addString("processes/script_task.bpmn", text) //添加流程文件
.deploy(); //deploy后就会将当前部署对象和相关资源文件的内容保存到数据库中
/** 根据id删除部署对象*/
void deleteDeployment(String deploymentId);
/**
* 删除部署对象
* cascade为true时,级联删除流程实例,历史流程实例
*/
void deleteDeployment(String deploymentId, boolean cascade);
/**
* 删除部署对象
* cascade为true时,级联删除流程实例,历史流程实例
* skipCustomListeners 为true时,不被自定义监听器监听
*/
void deleteDeployment(String deploymentId, boolean cascade,
boolean skipCustomListeners);
/** 删除属于给定进程定义id的进程定义 */
void deleteProcessDefinition(String processDefinitionId);
/** 删除属于给定进程定义id的进程定义,cascade为true,级联删除流程实例 */
void deleteProcessDefinition(String processDefinitionId, boolean cascade);
/** 检索给定部署对象的部署资源名称列表,按首字母排序*/
List<String> getDeploymentResourceNames(String deploymentId);
/** 检索给定部署对象的部署资源列表,按名字的字母顺序排列。*/
List<Resource> getDeploymentResources(String deploymentId);
/** 获取指定部署对象的指定(name)部署资源的字节流文件 */
InputStream getResourceAsStream(String deploymentId, String resourceName);
/** 获取指定部署对象的指定(id)部署资源的字节流文件 */
InputStream getResourceAsStreamById(String deploymentId, String resourceId);
/** 获取DeploymentQuery对象,支持根据各种条件的查询(部署对象)*/
DeploymentQuery createDeploymentQuery();
/** 获取流程定义查询对象,支持根据各种条件的查询(流程定义)*/
ProcessDefinitionQuery createProcessDefinitionQuery();
/** 通过id挂起流程定义,如果流程定义被挂起了,则无法通过该流程定义启动新的流程实例 */
void suspendProcessDefinitionById(String processDefinitionId);
/** 通过processDefinitionId挂起流程定义,
* suspendProcessInstances为true时,同时挂起基于该流程定义的流程实例
* suspensionDate 指定挂起的时间,为null时表示立即挂起
*/
void suspendProcessDefinitionById(String processDefinitionId,
boolean suspendProcessInstances,
Date suspensionDate);
/** 同suspendProcessDefinitionById */
void suspendProcessDefinitionByKey(String processDefinitionKey);
/** 同suspendProcessDefinitionById */
void suspendProcessDefinitionByKey(String processDefinitionKey,
boolean suspendProcessInstances,
Date suspensionDate);
/** 通过processDefinitionId激活流程定义 */
void activateProcessDefinitionById(String processDefinitionId);
/** 通过processDefinitionId激活流程定义,
* activateProcessInstances,同时激活基于该流程定义的流程实例
* activationDate 指定挂起的时间,为null时表示立即激活
*/
void activateProcessDefinitionById(String processDefinitionId,
boolean activateProcessInstances,
Date activationDate);
/** 同activateProcessDefinitionById */
void activateProcessDefinitionByKey(String processDefinitionKey);
/** 同activateProcessDefinitionById */
void activateProcessDefinitionByKey(String processDefinitionKey,
boolean activateProcessInstances,
Date activationDate);
/** 通过UpdateProcessDefinitionSuspensionStateSelectBuilder的方法激活或者挂起流程定义
* UpdateProcessDefinitionSuspensionStateSelectBuilder.by..();
*/
UpdateProcessDefinitionSuspensionStateSelectBuilder updateProcessDefinitionSuspensionState();
/** 更新流程定义的生存时间
* 该字段用于历史记录清理进程中
*/
void updateProcessDefinitionHistoryTimeToLive(String processDefinitionId,
Integer historyTimeToLive);
/** 通过processDefinitionId得到已部署的流程模型的字节流,如BPMN 2.0 xml文件 */
InputStream getProcessModel(String processDefinitionId);
/** 通过processDefinitionId得到已部署的流程图的字节流,如PNG图像 */
InputStream getProcessDiagram(String processDefinitionId);
/** 根据id获取流程定义信息 */
ProcessDefinition getProcessDefinition(String processDefinitionId);
DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
DeploymentQuery常用api
interface DeploymentQuery extends Query<DeploymentQuery, Deployment> {
/**根据部署对象ID得到部署对象 */
DeploymentQuery deploymentId(String deploymentId);
/** 根据部署对象name得到部署对象 */
DeploymentQuery deploymentName(String name);
/** 模糊查询. */
DeploymentQuery deploymentNameLike(String nameLike);
/** 在某个时间前 */
DeploymentQuery deploymentBefore(Date before);
/** 在某个时间后 */
DeploymentQuery deploymentAfter(Date after);
/** 按照部署对象id排序 可在方法后指定正序还是倒序*/
DeploymentQuery orderByDeploymentId();
/** extend Query */
asc();
desc();
long count(); // 对查询结果计数
singleResult(); // 查询单条结果
List<U> list(); // 查询列表
List<U> listPage(int firstResult, int maxResults); // 查询分页列表
}
RuntimeService
- 启动流程及对流程数据的控制
- 流程实例(ProcessInstance)与执行流(Execution)的查询
- 触发流程操作,接收消息和信号
// 根据ProcessInstanceBuilder启动流程实例
ProcessInstanceBuilder bulider = runtimeService.createProcessInstanceBuilder();
bulider.businessKey("second_approve")
.processDefinitionKey("")
.variables(variables)
.start();
/** 启动流程实例的常用方法: id、key、message */
ProcessInstanceQuery processInstanceId(String processInstanceId);
/** 通过key启动的流程实例每次都是根据最新版本的流程定义启动的,比使用流程定义id启动更加方便。 */
startProcessInstanceByKey(String processDefinitionKey);
startProcessInstanceByMessage(String messageName);
/** 启动实例时可以带上参数 */
startProcessInstanceById(String processDefinitionId, Map<String, Object> variables);
/** 可以在流程启动后获取变量 */
getVariables(processInstance.getId());
/** 给现有的流程实例设置变量*/
setVariable(processInstance.getId(),"key","value");
/** 查询流程实例对象 */
ProcessInstanceQuery createProcessInstanceQuery();
/** 查询状态为挂起的所有流程定义 */
ProcessInstanceQuery suspended();
/** 查询状态为激活的所有流程定义 */
ProcessInstanceQuery active();
/** 查询至少有一个事件的流程定义 */
ProcessInstanceQuery withIncident();
/** 只查询顶级流程实例 */
ProcessInstanceQuery rootProcessInstances();
/** 只选择没有子流程的流程实例 */
ProcessInstanceQuery leafProcessInstances();
TaskService
-
对用户任务UserTask的管理和流程的控制
-
设置用户任务的权限信息(设置候选人等)
-
针对用户任务添加任务附件,任务评论和事件记录
Assignee: 受让人,受理人 执行任务的人
Owner:委托人,受理人将任务委托给其他人时,受理人就成了Owner,其他人就成了Assignee
/** 保存任务到数据库,如果任务已存在则更新任务 */
void saveTask(Task task);
/** 删除任务,但不删除和该任务相关的历史信息 */
void deleteTask(String taskId);
/** 批量删除任务,但不删除和该任务相关的历史信息 */
void deleteTasks(Collection<String> taskIds);
/** 删除任务,并根据cascade的值来决定是否级联删除与该任务相关的任务 */
void deleteTask(String taskId, boolean cascade);
/** 如果任务是启用的,将删除原因记录在历史信息中 */
void deleteTask(String taskId, String deleteReason);
/** 签收任务
* 将userId对应的用户 作为任务的受让人(Assignee)
* 与setAssignee()不同的是,当前任务已经有受让人,会进行检查
* 任务不存在或者任务已被其他人员声明时,抛出ProcessEngineException
*/
void claim(String taskId, String userId);
/** 将任务的受让人修改为 userId对应的用户 */
void setAssignee(String taskId, String userId);
/** 将任务的所有权移交给 userId对应的用户 */
void setOwner(String taskId, String userId);
/**
* 委派任务给 userId 对应的用户
* 当前任务已经有受让人
* 而且任务状态为DelegationState.PENDING(任务正在协办)
* 如果任务没有所有者,则将所有者设为任务的受让人
* 受让人使用resolveTask(String taskId) 向任务所有者汇报
* 只有任务所有者(owner)能调用complete
*/
void delegateTask(String taskId, String userId);
/**
* 将任务标记为已完成
* 如果是通过delegateTask()委托的任务,可以通知任务的所有人
* 任务状态为DelegationState.PENDING(任务正在协办)才能调用
* 方法返回后任务状态变成DelegationState.RESOLVED
* 此时任务可以调用complete()
*/
void resolveTask(String taskId);
/** 完成任务 */
void complete(String taskId);
/**
* 完成任务,paramsMap 任务携带变量
*/
void complete(String taskId, Map<String, Object> paramsMap);
/** 获取任务的IdentityLink -> 任务、受让人、组、租户的关联信息 */
List<IdentityLink> getIdentityLinksForTask(String taskId);
/** 修改任务的优先级,只有任务所有者或者管理员能够修改 */
void setPriority(String taskId, int priority);
/** 设置全局变量 全局可用,同一key值被后面相同的key值覆盖*/
void setVariable(String taskId, String variableName, Object value);
/** 设置局部变量,作用域只限于当前任务节点内 */
void setVariableLocal(String taskId, String variableName, Object value);
/** 向任务或流程实例添加注释,并返回注释 */
Comment createComment(String taskId, String processInstanceId, String message);
/** 添加任务附件 */
Attachment createAttachment(String attachmentType, String taskId,
String processInstanceId, String attachmentName,
String attachmentDescription, String url);
/** 更新附件信息 */
void saveAttachment(Attachment attachment);
/** 列出该父任务的子任务列表 */
List<Task> getSubTasks(String parentTaskId);
/** 创建任务报告 */
TaskReport createTaskReport();
IdentityService
- 管理用户
- 管理用户组
- 用户与用户组的关系(MemberShip)
/** 创建一个临时用户,且该用户必须被使用 */
User newUser(String userId);
/** 创建一个临时组,且该组必须被使用 */
Group newGroup(String groupId);
/** 保存用户信息,如果用户已存在,则更新用户信息 */
void saveUser(User user);
/** 保存组信息,如果组已存在,则更新组信息 */
void saveGroup(Group group);
/** 删除用户信息,如果userId不存在,则忽略操作 */
void deleteUser(String userId);
/** 删除组信息,如果groupId不存在,则忽略操作 */
void deleteGroup(String groupId);
void unlockUser(String userId);
/** 建立用户和组的关系 */
void createMembership(String userId, String groupId);
/** 删除用户和组的关系 */
void deleteMembership(String userId, String groupId);
/** 建立用户和租户的关系 */
void createTenantUserMembership(String tenantId, String userId);
/** 建立租户和组的关系 */
void createTenantGroupMembership(String tenantId, String groupId);
/**
* 设置当前线程中义已授权的用户id, 线程中的所有服务方法都需要验证这个 userId
* 交互完成后需要调用clearAuthentication()
*/
void setAuthenticatedUserId(String authenticatedUserId);
/** 同上*/
void setAuthentication(String userId, List<String> groups);
/** 同上*/
void setAuthentication(String userId, List<String> groups, List<String> tenantIds);
/**
* 获取当前流程引擎的身份认证
*/
Authentication getCurrentAuthentication();
/** 给用户设置图片 */
void setUserPicture(String userId, Picture picture);
Picture getUserPicture(String userId);
void deleteUserPicture(String userId);
/** 给用户添加一些扩展性的键值对 */
void setUserInfo(String userId, String key, String value);
String getUserInfo(String userId, String key);
List<String> getUserInfoKeys(String userId);
void deleteUserInfo(String userId, String key);
HistoryService
-
管理流程实例结束后的历史数据
-
构建历史数据的查询对象
-
根据流程实例id删除流程历史数据
历史数据实体:
HistoricProcessInstance:历史流程实例实体类HistoricActivityInstance: 单个活动节点执行的信息HistoricVariableInstance: 流程或任务变量值的信息HistoricTaskInstance:用户任务实例的信息HistoricDetail: 历史流程活动任务详细信息/** * 获取HistoricProcessInstanceQuery对象,用于查询历史流程信息 HistoricProcessInstance */ HistoricProcessInstanceQuery createHistoricProcessInstanceQuery(); /** * 获取HistoricActivityInstanceQuery,用于查询单个流程定义执行的信息 HistoricActivityInstance */ HistoricActivityInstanceQuery createHistoricActivityInstanceQuery(); /** * 获取HistoricActivityStatisticsQuery,单个流程定义的历史实例数的统计 */ HistoricActivityStatisticsQuery createHistoricActivityStatisticsQuery(String processDefinitionId); /** * 获取HistoricTaskInstanceQuery,用于查询用户任务实例的信息 HistoricTaskInstance */ HistoricTaskInstanceQuery createHistoricTaskInstanceQuery(); /** 获取HistoricDetailQuery,用于查询 历史流程活动任务详细信息HistoricDetail */ HistoricDetailQuery createHistoricDetailQuery(); /** * 获取HistoricVariableInstanceQuery, * 用于查询 流程或任务变量值的信息 HistoricVariableInstance */ HistoricVariableInstanceQuery createHistoricVariableInstanceQuery(); /** * HistoricIncidentQuery, * 用于查询事件信息 HistoricIncident */ HistoricIncidentQuery createHistoricIncidentQuery(); /** * 根据taskId删除历史任务实例 * 如果任务历史任务实例不存在,正常返回 */ void deleteHistoricTaskInstance(String taskId); /** * 删除历史进程实例。所有历史活动、历史任务和历史详细信息(变量更新、表单属性)也将被删除。 */ void deleteHistoricProcessInstance(String processInstanceId); /** * 删除历史进程实例。所有历史活动、历史任务和历史详细信息(变量更新、表单属性)也将被删除。 * 如果未找到流程实例,则不会失败。 */ void deleteHistoricProcessInstanceIfExists(String processInstanceId); /** * job将删除已完成流程、决策和案例实例以及批量操作的历史数据 */ Job cleanUpHistoryAsync(); /** 需要立即清除 */ Job cleanUpHistoryAsync(boolean immediatelyDue);
FormService
-
解析流程定义中表单项的配置
-
提交表单的方式驱动用户节点流转
-
获取自定义外部表单key
/** * 得到开启一个流程实例的表单需要的所有数据 */ StartFormData getStartFormData(String processDefinitionId); /** * 通过默认的内置表单引擎生成新流程实例的表单 */ Object getRenderedStartForm(String processDefinitionId); /** * 通过指定名称(formEngineName)的表单引擎生成新流程实例的表单 */ Object getRenderedStartForm(String processDefinitionId, String formEngineName); /** * 开启以一个新的流程实例,并带者一些用户在表单中填入的数据 */ ProcessInstance submitStartForm(String processDefinitionId, Map<String, Object> properties);