activiti基础操作方法

startProcessInstanceByKey 启动流程

//variables为流程变量(map集合)
Map<String,Object> variables = new HashMap<String,Object>();
variables.put("请假人", "冯小刚");
//使用流程定义的key启动流程实例,默认会按照最新版本启动流程实例
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey , variables );

TaskQuery 查询任务

TaskQuery query = TaskService.createTaskQuery();
//还得为其设置一些查询条件
query.taskId(taskId)
query.taskAssignee(assignee);
query.orderByTaskCreateTime().desc();

ProcessDefinitionQuery 查询流程定义

ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
//设置查询条件
query.processDefinitionId(processDefinitionId);
query.processDefinitionName(processDefinitionName);
query.processDefinitionKey(key);
//升序排列结果
query.orderByProcessDefinitionVersion().asc();
//所有的结果
List<ProcessDefinition> list = query.list();
//返回结果集的数量
query.count()
//分页查询
query.listPage(firstResult,maxResults);
//唯一的结果集
query.singleResult();

查询流程状态,通过 processInstanceId

public void queryProcessState(int processInstanceId){
    //由于一个流程实例ID只对应一个实例,使用singleResult执行查询返回一个唯一的结果,如果结果数量大于1,则抛出异常
    ProcessInstance pi = processEngine.getRuntimeService().createProcessInstanceQuery().setProcessInstanceId(processInstanceId).singleResult();
    if(null != p ){
        System.out.println("当前流程在:" + pi.getActivityId());
    }else{
        System.out.println("流程已结束!")
    }
}

查询最新版本的流程定义

// 思路说明:先升序查询所有的,由于相同的流程具有相同的名称(相同名称的流程称为第一版本,第二版本...),然后将这些流程根据key放到map集合中,由于map集合的key不可重复,因此后续版本会覆盖之前的版本,map中所有的value就是去重的流程定义了
public List<ProcessDefinition> findLastList() {
        ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
        query.orderByProcessDefinitionVersion().asc();
        List<ProcessDefinition> list = query.list();
        Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
        for (ProcessDefinition pd : list) {
            map.put(pd.getKey(), pd);
        }
        return new ArrayList<ProcessDefinition>(map.values());
    }

部署(上传)流程:方法一,使用addZipInputStream

public void deploy(MultipartFile resource) {
        DeploymentBuilder builder = repositoryService.createDeployment();
        InputStream in = null;
        try {
            in = resource.getInputStream();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch(Exception e){
            e.printStackTrace();
        }
        ZipInputStream zipInputStream = new ZipInputStream(in);
        builder.addZipInputStream(zipInputStream);
        builder.deploy();
    }

部署(上传)流程:方法二,使用addClasspathResource

// addClasspathResource表示从类路径下加载资源文件,一次只能加载一个文件
public void deploy() throws Exception{
    repositoryService.createDeployment().addClasspathResource("*.bpmn").addClassppathResource("*.png").deploy();
}

根据流程定义的key删除流程定义

//  如果该流程定义下没有正在运行的流程,则可以用普通删除。如果是有关联的信息,用级联删除。项目开发中使用级联删除的情况比较多,删除操作一般只开放给超级管理员使用。
public void deleteByKey(String key) {
    ProcessDefinitionQuery query = processEngine.getRepositoryService().createProcessDefinitionQuery();
    query.processDefinitionKey(key);//根据key过滤
    List<ProcessDefinition> pdList = query.list();
    for (ProcessDefinition pd : pdList) {
        //根据流程定义获取部署id
        String deploymentId = pd.getDeploymentId();
        //普通删除      processEngine.getRepositoryService().deleteDeployment(deploymentId, true);
//级联删除      //processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
    }
}

根据流程定义的id获取图片对应的输入流

public InputStream findImgStream(String id) {
    return repositoryService.getProcessDiagram(id);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值