activiti6工作流开发(二)--流程控制

本文详细介绍了Activiti6工作流的控制与管理,包括流程查询、资源获取、历史记录、流程实例的启动与绑定Businesskey、挂起与激活、局部变量设置、任务管理等功能,为读者提供了全面的工作流操作示例。
摘要由CSDN通过智能技术生成

activiti6工作流开发(二)–流程控制

流程查询

通过流程定义Key(流程图ID)

public ProcessDefinition queryDefinitionByKey(String key){
    RepositoryService repositoryService = processEngine.getRepositoryService();
    ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
        .processDefinitionKey(key)
        .singleResult();
    return processDefinition;
}

获取流程BPMN资源

public InputStream queryBpmnFile(ProcessDefinition processDefinition){
    RepositoryService repositoryService = processEngine.getRepositoryService();
    //BPMN文件
    InputStream resourceAsStream = repositoryService
        .getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName());
    return resourceAsStream;
}

获取流程PNG图

public InputStream queryBpmnPNGFile(ProcessDefinition processDefinition){
    RepositoryService repositoryService = processEngine.getRepositoryService();
    //PNG图
    InputStream processDiagram = repositoryService
        .getProcessDiagram(processDefinition.getDeploymentId());
    return processDiagram;
}

历史查找

public List queryHistoryInfo(String definitionId){
    HistoryService historyService = processEngine.getHistoryService();

    List<HistoricActivityInstance> list = historyService
        .createHistoricActivityInstanceQuery()
        .processDefinitionId(definitionId)
        .orderByHistoricActivityInstanceEndTime()
        .asc()
        .list();

    return list;
}

流程删除

根据流程部署Id来删除流程(act_re_deployment里面的ID)

    public void deleteDeployment(String deleteDeployId){
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.deleteDeployment(deleteDeployId);
    }

流程绑定Businesskey

一个流程定义部署可以启动多个流程实例,每个流程的执行互部影响,每个执行是单独的流程实例。在流程启动实例时,可以指定Businesskey。

Businesskey:业务标识,通常为业务表的主键,业务标识和流程实例一一对应。业务标识来源于业务系统。存储业务标识就是根据业务标识来关联查询业务系统的数据。

Businesskey一般都会保存相关联的业务操作表的主键,再通过主键ID去查询业务信息,比如通过出差单的ID,去查询更多的请假信息(出差人,出差时间,出差天数,出差目的地等)

启动流程实例时绑定Businesskey

public ProcessInstance startProcessByKey(String processDefinitionKey,String businessKey){
    RuntimeService runtimeService = processEngine.getRuntimeService();

    ProcessInstance processInstance = runtimeService
        .startProcessInstanceByKey(processDefinitionKey, businessKey);

    return processInstance;
}

获取流程的Businesskey

public String getBusinessKey(ProcessInstance processInstance){
    return processInstance.getBusinessKey();
}

流程实例挂起

流程实例有两种该区方式:

  • 通过流程声明关闭某一流程声明下的所有流程实例(并停用该流程声明来启动实例)
  • 通过流程实例ID锁定某一流程实例进行关闭

挂起流程声明部署

public void suspendProcessDefinition(ProcessDefinition processDefinition){
    RepositoryService repositoryService = processEngine.getRepositoryService();
    //参数:声明ID,是否挂起实例,挂起时间
    repositoryService
        .suspendProcessDefinitionById(processDefinition.getId(),true,null);
}

挂起流程实例

public void suspendProcessInstance(ProcessInstance processInstance){
    RuntimeService runtimeService = processEngine.getRuntimeService();
    runtimeService.suspendProcessInstanceById(processInstance.getId());
}

激活流程声明部署

public void activateProcessDefinition(ProcessDefinition processDefinition){
    RepositoryService repositoryService = processEngine.getRepositoryService();
    //参数:声明ID,是否激活实例,激活时间
    repositoryService
        .activateProcessDefinitionById(processDefinition.getId(),true,null);
}

激活流程实例

public void activateProcessInstance(ProcessInstance processInstance){
    RuntimeService runtimeService = processEngine.getRuntimeService();
    runtimeService.activateProcessInstanceById(processInstance.getId());
}

设置局部流程变量

局部流程变量

任务和执行实例仅仅是针对一个任务和一个执行实例范围,范围没有流程实例大, 称为 local 变量。

Local 变量由于在不同的任务或不同的执行实例中,作用域互不影响,变量名可以相同没有影响。Local 变量名也可以和 global 变量名相同,没有影响。

设置

public void setLocalVariable(Task task, Map variables){
    TaskService taskService = processEngine.getTaskService();
    taskService.setVariablesLocal(task.getId(),variables);
}

组任务

组任务跟普通的任务并没有什么太大的区别,区别在于组任务有多个任务候选人,候选人通过拾取操作,拾取任务执行权。

设置多个任务候选人

当一个任务拥有多个任务候选人的时候,这个任务就称为组任务。在流程图中任务节点的配置中设置 candidate-users(候选人),多个候选人之间用逗号分开。

任务拾取

public void claimTask(String taskId,String userId){
    TaskService taskService = processEngine.getTaskService();

    //查找,起验证作用
    Task task = taskService.createTaskQuery()
        .taskId(taskId)
        .taskCandidateUser(userId)
        .singleResult();
    if(task != null){
        taskService.claim(taskId,userId);
    }

}

任务归还

当一个组任务没有负责人是,将重置为候选状态,需要候选人拾取,再次进入代办状态。

public void giveToGroupTask(String taskId,String assignee){
    TaskService taskService = processEngine.getTaskService();
    //查找,验证
    Task task = taskService.createTaskQuery()
        .taskId(taskId)
        .taskAssignee(assignee)
        .singleResult();

    if (task != null){
        //重置候选,代理人置空
        taskService.setAssignee(taskId,null);
    }
}

任务交接

public void giveToOtherCandidateUser(String taskId,String assignee,String otherAssignee){
    TaskService taskService = processEngine.getTaskService();

    Task task = taskService.createTaskQuery()
        .taskId(taskId)
        .taskAssignee(assignee)
        .singleResult();

    if (task != null){
        taskService.setAssignee(taskId,otherAssignee);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值