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

2021-04-02  本文已影响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());
    }
上一篇下一篇

猜你喜欢

热点阅读