前言
学习从来无捷径,循序渐进登高峰。 --高永祚
介绍
之前在上一篇 我们介绍部署的时候,我们已经使用了activiti提供的RepositoryService,接下来,我们开始使用activiti提供的第二个类,也就是RuntimeService,话不多说,上正文......
正文
在RuntimeService里面,提供了一下几种方式(可能没列全...请见谅...)
//1.
/**
* 方法参数可以有processDefinitionKey 【必须】
* businessKey 关联具体业务的key值 【非必须】
* Map<String, Object> variables 流程实例里面的变量【非必须】
* 上述参数可以组合...
*/
ProcessInstance startProcessInstanceByKey(String processDefinitionKey);
//2.
ProcessInstance startProcessInstanceByKeyAndTenantId(String processDefinitionKey, String tenantId);
//3.
ProcessInstance startProcessInstanceById(String processDefinitionId);
//4.
ProcessInstance startProcessInstanceByMessage(String messageName);
//5. 自定义启动的参数,可添加如上所有参数
ProcessInstanceBuilder createProcessInstanceBuilder();
流程实例启动
public void startProcessInstance() {
Deployment deployment = this.repositoryService.createDeploymentQuery().deploymentCategory("holiday").singleResult();
if (deployment != null) {
//查询流程定义的数据
ProcessDefinition processDefinition = this.repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
if (processDefinition != null) {
//启动流程实例(如果不想查询的话,我觉得可以直接设置启动)
//ProcessInstance processInstance = this.runtimeService.startProcessInstanceById(processDefinition.getId());
ProcessInstance processInstance = this.runtimeService.createProcessInstanceBuilder()
.processDefinitionId(processDefinition.getId())
.name("请假审批")
.businessKey("simple_holiday_1")
//.tenantId()
//.messageName()
//.variables()
.start();
logger.error("流程实例ID: {}", processInstance.getId());
logger.error("流程实例: {}", processInstance.getName());
logger.error("流程BusinessKey值: {}", processInstance.getBusinessKey());
logger.error("流程开始时间: {}", processInstance.getStartTime());
logger.error("流程是否是挂起: {}", processInstance.isSuspended());
logger.error("流程开始人: {}", processInstance.getStartUserId());
} else {
logger.error("not found processDefinition info By deploymentId {}", deployment.getId());
throw new RuntimeException("not found processDefinition info By deploymentId");
}
}
}
## 执行结果如下:
流程实例ID: 7501
流程实例: 请假审批
流程BusinessKey值: simple_holiday_1
流程开始时间: Sun Nov 29 16:45:19 CST 2020
流程是否是挂起: false
流程开始人: null
流程实例的查询
/**
* 流程实例的查询
*/
public void searchAllProcessInstance() {
List<ProcessInstance> processInstanceList = this.runtimeService.createProcessInstanceQuery().list();
if(processInstanceList != null && !processInstanceList.isEmpty()) {
for (ProcessInstance processInstanceItem : processInstanceList) {
logger.error("-----------------------------------");
logger.error("流程实例信息: {}", processInstanceItem);
logger.error("流程定义ID: {}", processInstanceItem.getProcessDefinitionId());
logger.error("流程定义key: {}", processInstanceItem.getProcessDefinitionKey());
logger.error("流程实例名称: {}", processInstanceItem.getName());
logger.error("业务关联的key值: {}", processInstanceItem.getBusinessKey());
logger.error("流程是否挂起: {}", processInstanceItem.isSuspended());
}
}
流程实例的更新
public void updateProcessInstanceInfo() {
List<ProcessInstance> processInstanceList = this.runtimeService.createProcessInstanceQuery().list();
if(processInstanceList != null && !processInstanceList.isEmpty()) {
for (ProcessInstance processInstanceItem : processInstanceList) {
//可以更新相同的businessKey
//this.runtimeService.updateBusinessKey(processInstanceItem.getId(), "the_same_business_key");
//让流程实例挂起
//this.runtimeService.suspendProcessInstanceById(processInstanceItem.getId());
//重新激活某个流程实例
//this.runtimeService.activateProcessInstanceById(processInstanceItem.getId());
//id of the user to use as candidate, cannot be null.
this.runtimeService.addParticipantUser(processInstanceItem.getId(), "1");
}
}
}
至此,流程实例的一些简单介绍就到这里....
至于删除,emmmm....这个直接去api去找那些delete开头的api方法就好...