zoukankan      html  css  js  c++  java
  • Flowable-简单应用

    Flowable简单的应用终于写好了,对于大致的功能也有了一定的了解,虽然在真实的项目应用中使用的话
    还需要进行改进,但是这里还是先写个总结记录一下大致的流程,不足之处后期再来填坑吧。

    一.前期准备工作

    1. Flowable提供的流程绘制服务

    3.在flowable的流程化绘制服务内绘制流程图,我简单绘制了一个,如下所示:

    然后把绘制到的流程下载到本地,并放到processes文件夹下,下面简单说一下这个文件:


    • process 对应的是这个流程整体,id一般在查询的时候作为taskKey使用,name并不是属于flowable的属性,
      主要是为了展示使用的
    • startEvent 这是使用了一个空的开始,还有一些定时的开始,大家有需要可以去了解一下
    • userTask 用户任务,第一个usertask的flowable:assignee是用来接收我们传入的参数的,这里第二个usertask
      添加了一个listener,是在开始执行这个模块的时候触发的,大家可以根据自己的需求去设置执行的时机。listener
      的类必须实现ExecutionListener,主要是针对流程的监听。还有一个TaskListener接口,主要是针对task的监听,
      大家有需要的也可以去了解一下。
    • sequenceFlow 连线,连接两个步骤,sourceRef开始,targetRef目标,conditionExpression执行的判断的表达式
    • exclusiveGateway 排他网关
    • endEvent 结束
      4.简单的操作
      创建流程
    void createTask(){
            HashMap<String,Object> map=new HashMap<>();
            map.put("beginTaskID","张三");
            runtimeService.startProcessInstanceByKey("holiday-request",map);
        }
    

    查看流程,这里我是通过入参查询的,还有许多别的查询办法,大家可以自行去探索:

       void selectTask(){
            List<Task> beginTaskID1 = taskService.createTaskQuery().processVariableValueEquals("beginTaskID", "张三").list();
            System.out.println(beginTaskID1.size());
        }
    

    完成流程

    void completeTask(){
            List<Task> beginTaskID1 = taskService.createTaskQuery().processVariableValueEquals("beginTaskID", "张三").list();
            String taskId = beginTaskID1.get(0).getId();
            HashMap<String,Object> param=new HashMap<>();
            param.put("checkResult","通过");
            taskService.complete(taskId,param);
        }
    

    查看流程图

    public void getProcessDiagram(HttpServletResponse httpServletResponse, String processId) throws Exception {
            ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processId).singleResult();
    
            //流程走完的不显示图
            if (pi == null) {
                return;
            }
            Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();
            //使用流程实例ID,查询正在执行的执行对象表,返回流程实例对象
            String InstanceId = task.getProcessInstanceId();
            List<Execution> executions = runtimeService
                    .createExecutionQuery()
                    .processInstanceId(InstanceId)
                    .list();
    
            //得到正在执行的Activity的Id
            List<String> activityIds = new ArrayList<>();
            List<String> flows = new ArrayList<>();
            for (Execution exe : executions) {
                List<String> ids = runtimeService.getActiveActivityIds(exe.getId());
                activityIds.addAll(ids);
            }
    
            //获取流程图
            BpmnModel bpmnModel = repositoryService.getBpmnModel(pi.getProcessDefinitionId());
            ProcessEngineConfiguration engconf = processEngine.getProcessEngineConfiguration();
            ProcessDiagramGenerator diagramGenerator = engconf.getProcessDiagramGenerator();
            InputStream in = diagramGenerator.generateDiagram(bpmnModel, "png", activityIds, flows, engconf.getActivityFontName(), engconf.getLabelFontName(), engconf.getAnnotationFontName(), engconf.getClassLoader(), 1.0);
            OutputStream out = null;
            byte[] buf = new byte[1024];
            int legth = 0;
            try {
                out = httpServletResponse.getOutputStream();
                while ((legth = in.read(buf)) != -1) {
                    out.write(buf, 0, legth);
                }
            } finally {
                if (in != null) {
                    in.close();
                }
                if (out != null) {
                    out.close();
                }
            }
        }
    

    删除流程

    void deleteTask(){
            List<Task> beginTaskID1 = taskService.createTaskQuery().processVariableValueEquals("beginTaskID", "张三").list();
            String processId = beginTaskID1.get(0).getProcessInstanceId();
            runtimeService.deleteProcessInstance(processId,"删除的原因");
        }
    

    三.总结
    这里只是简单的给大家介绍了一下,大家感兴趣的话可以移步到我的github,里面有关于flowable的简单实现,有页面,
    可以进行简单的操作,会比纯看代码直观很多。
    github地址:https://github.com/WX59991/flowable

  • 相关阅读:
    大数据测试2
    大数据测试3
    CROSS APPLY和 OUTER APPLY 区别详解
    SQL中的escape的用法
    Sql Server参数化查询之where in和like实现详解
    多行文本框换行符处理
    Cross Apply的用法
    交叉连接Cross Join的用法
    统计字符串中某个字符的个数
    JOIN用法
  • 原文地址:https://www.cnblogs.com/MissWX/p/14011409.html
Copyright © 2011-2022 走看看