image.png在之前的帖子中,都知道我们并没有用什么安全框架去操作,通过传递用户id到变量中即可完成流程,之后的帖子讲解的是新的接口,但是这些接口就需要配合安全框架使用了。
1.下载官网代码
https://github.com/Activiti/Activiti
下载完之后,我们复制两个类到本地项目中:
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());
}
网友评论