ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

flowable实战(三)flowable流程实例管理接口

2021-06-02 13:56:59  阅读:269  来源: 互联网

标签:return String flowable 流程 processInstanceId 接口 实例 public


一、流程实例的管理接口常见功能:

1.启动一个流程(即创建一个流程实例)

2.本人发起的流程实例

3.本人参与的流程实例

4.挂起/激活流程实例

5.提前终止流程实例(或又叫撤销流程)

6.彻底删除流程实例

7.流程图查看

8.判断流程实例的状态(运行中/已结束)

二、主要接口:

1.启动流程:

public ProcessInstance strartFlow(String processKey, Map<String, Object> paras){
    //启动前必须开启,这样才能取得流程发起人
    String  userId=paras.get("AuthenticatedUserId").toString();
    //设置流程实例的发起人是当前用户
   Authentication.setAuthenticatedUserId(userId);

    // 取得业务id
    String busiKey = paras.get("busiKey").toString();

    if (StringUtils.isEmpty(processKey)){
        logger.error("错误:流程定义未找到!");
    }
    if (null == paras){
        paras = new HashMap<>();
    }

    Deployment deployment = repositoryService.createDeploymentQuery().processDefinitionKey(processKey).singleResult();
    if (deployment == null) {
        logger.error("错误:启动流程实例:" + processKey);
    }

   ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey, busiKey, paras); // 同时设置业务的id到流程实例中的BUSINESS_KEY_

    logger.info("成功:启动流程实例:" + processInstance.getProcessDefinitionName() + ":" + processInstance.getId());

    Authentication.setAuthenticatedUserId(null); // 这个方法最终使用一个ThreadLocal类型的变量进行存储,也就是与当前的线程绑定,所以流程实例启动完毕之后,需要设置为null,防止多线程的时候出问题。
    return processInstance;
}

2.提前终止流程实例:

public void deleteProcessInstanceById(String processInstanceId){
    // ""这个参数本来可以写删除原因
    runtimeService.deleteProcessInstance(processInstanceId,"");
}

3.本人发起的流程实例:

/**
 * @Description: 我发起的流程实例列表
 *
 *
 * @Date: 2019/5/12 20:31
 * @Param:userId  用户id
 * @return:  List<Zjm_gflowTask>   流程实例列表
 **/
public List<HistoricProcessInstance> getMyStartProcint(String userId){
    List<HistoricProcessInstance> list=processEngine.getHistoryService() // 历史相关Service
                                    .createHistoricProcessInstanceQuery()
                                   // .finished() 已完成的 unfinish 未完成的,或者不加表示全部
                                    .startedBy(userId)
                                    .orderByProcessInstanceStartTime().asc()
                                    .list();

    return list;
}

 

3.1 本人参与的流程实例:

//查询指定用户参与的流程信息 (流程历史  用户参与 )

List hpis = historyService

.createHistoricProcessInstanceQuery().involvedUser(name)

.orderByProcessInstanceStartTime().desc().listPage(firstResult, maxResults);

 

4.挂起与激活流程实例:

/**
 * @Description: 挂起流程实例
 *  
 *
 * @Date: 2019/5/15 1:19 
 * @Param:  processInstanceId  当前流程实例id
 * @return: 无
 **/
public void handUpProcessInstance(String processInstanceId){
     runtimeService.suspendProcessInstanceById(processInstanceId);
}

/**
 * @Description:恢复(唤醒)被挂起的流程实例
 *  
 *
 * @Date: 2019/5/15 1:22 
 * @Param:  processInstanceId  流程实例id
 * @return: 无
 **/
public void activateProcessInstance(String processInstanceId){
    runtimeService.activateProcessInstanceById(processInstanceId);
}

5.生成流程图

// 将生成图片放到文件夹下
String deploymentId = "801";
// 获取图片资源的名称
List<String > list = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
// 定义图片资源的名称
String resourceName = "";
if (list !=null && list.size()>0){
    for (String name:list){
         if (name.indexOf(".png")>=0){
              resourceName = name;
         }
    }
}

// 获取图片的输入流
InputStream  in = processEngine.getRepositoryService().getResourceAsStream(deploymentId,resourceName);
// 将图片生成到D盘的根目录下
File file = new File ("D:/" + resourceName);
// 将输入流的图片写到d盘下
FileUtils.copyInputStreamToFile(in,file);

5.判断流程实例在运行中是否存在

/**
 * @Description: 判断流程实例在运行中存不存在
 *  
 *
 * @Date: 2019/5/26 19:24 
 * @Param:  procInstanceId 流程实例
 * @return:  true表示存在,false表示不存在
 **/
public Boolean  isExistProcIntRunning(String procInstanceId){
  ProcessInstance  pi= runtimeService.createProcessInstanceQuery().processInstanceId(procInstanceId).singleResult();
  if (pi==null){
    return false;
  }else{
    return true;
  }
}

6.查询历史实例中流程实例是否存在

/**
 * @Description:  查询历史实例中流程实例是否存在
 *  
 *
 * @Date: 2019/5/26 19:35 
 * @Param:  procInstanceId 流程实例
 * @return:  true表示存在,false表示不存在
 **/
public Boolean isExistProcHistory(String procInstanceId){
    HistoricProcessInstance  hpi= historyService.createHistoricProcessInstanceQuery().processInstanceId(procInstanceId).singleResult();
    if (hpi==null){
        return false;
    }else{
        return true;
    }
}

标签:return,String,flowable,流程,processInstanceId,接口,实例,public
来源: https://blog.51cto.com/u_10976476/2845654

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有