美文网首页
一、工作流 Activiti7-11.API新特性Process

一、工作流 Activiti7-11.API新特性Process

作者: 那钱有着落吗 | 来源:发表于2021-04-02 10:06 被阅读0次

    在之前的帖子中,都知道我们并没有用什么安全框架去操作,通过传递用户id到变量中即可完成流程,之后的帖子讲解的是新的接口,但是这些接口就需要配合安全框架使用了。

    image.png

    1.下载官网代码

    https://github.com/Activiti/Activiti

    image.png

    下载完之后,我们复制两个类到本地项目中:


    image.png

    大致了解下


    image.png

    从第一张图我们知道要想与ProcessRuntime交互,当前登录用户必须具有ROLE_ACTIVITI_USER 这个角色,所以这个例子中的用户角色都是这个,然后使用下面方法都创建好用户。

    下面这个类则是获取用户的信息:


    image.png

    2.使用ProcessRuntime类

    注意:我们在每个方法之前都有 securityUtil.logInAs("zhangsan"); 在实际生产时是不需要这个代码的,因为登录肯定是在之前做了登录的逻辑

    首先我们需要用安全框架的测试添加用户的类,把张三李四添加进去,用于测试,需要注意一点的是:在生产环境不是这么做的,具体可以去参考安全框架的使用

    image.png
    @Autowired
        private ProcessRuntime processRuntime;
    
        @Autowired
        private SecurityUtil securityUtil;
    
        //获取流程实例
        @Test
        public void findProcessInstance(){
    
            securityUtil.logInAs("zhangsan");
    
            Page<ProcessInstance> processInstancePage = processRuntime.
                    processInstances(Pageable.of(0,100));
    
            System.out.println("流程实例数量:"+processInstancePage.getTotalItems());
    
            List<ProcessInstance> instanceList = processInstancePage.getContent();
    
            for(ProcessInstance instance:instanceList){
                System.out.println("getId"+instance.getId());
                System.out.println("getName"+instance.getName());
                System.out.println("getStartDate"+instance.getStartDate());
                System.out.println("getStatus"+instance.getStatus());
                System.out.println("getProcessDefinitionId"+instance.getProcessDefinitionId());
                System.out.println("getProcessDefinitionKey"+instance.getProcessDefinitionKey());
            }
    
        }
    
    image.png

    然后就可以看到具体的流程实例信息了。

    3.使用ProcessRuntime启动流程实例

     //启动流程实例
        @Test
        public void startProcessInstance(){
            securityUtil.logInAs("zhangsan");
    
            ProcessInstance processInstance = processRuntime
                    .start(ProcessPayloadBuilder.start()
                    .withProcessDefinitionKey("defkey")
                    .withName("流程名称")
                    .withVariable("name","wang")
                    .withBusinessKey("key")
                    .build());
        }
    

    这就是使用新的api来启动流程实例了,其中可以指定很多的参数,当然如果要使用这个方法就还是需要画流程图,然后部署了。

    4.使用ProcessRuntime删除流程实例

    //删除流程实例
        @Test
        public void delProcessInstance(){
            securityUtil.logInAs("zhangsan");
    
            ProcessInstance processInstance = processRuntime
                    .delete(ProcessPayloadBuilder
                            .delete()
                            .withProcessInstanceId("").build());
        }
    

    传入流程实例id,就可以删除了。

    挂起与删除差不多,方法是:suspend,激活是:resume

    4.使用ProcessRuntime获取实例参数

    //获取实例参数
        @Test
        public void findVariables(){
            securityUtil.logInAs("zhangsan");
    
            List<VariableInstance> variables = processRuntime
                    .variables(ProcessPayloadBuilder
                            .variables()
                            .withProcessInstanceId("").build());
        }
    

    相关文章

      网友评论

          本文标题:一、工作流 Activiti7-11.API新特性Process

          本文链接:https://www.haomeiwen.com/subject/durzcltx.html