选定用户与用户组启动流程(学习笔记)

public class RepostoryServiceTest {

    private static final Logger LOGGER =  LoggerFactory.getLogger(RepostoryServiceTest.class);

    @Rule
    public ActivitiRule activitiRule = new ActivitiRule();

    @Test
    public void testRepository(){
        //repositoryService最重要的功能就是对流程定义文件的部署
        RepositoryService repositoryService = activitiRule.getRepositoryService();

        //创建一个流程部署对象,先根据repositoryService创建一个deploymentBuilder然后
        //用deploymentBuilder构建出一个部署对象,指定名字为测试部署资源,且添加了两个资源文件
        DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
        deploymentBuilder.name("测试部署资源1")
                .addClasspathResource("my-process.bpmn20.xml")
                .addClasspathResource("second_approve.bpmn20.xml");
        //当deploy完成以后,就会将我们的部署对象跟两个资源文件存进数据库里面
        Deployment deploy = deploymentBuilder.deploy();
        LOGGER.info("deploy = {}",deploy);

        //第二次部署
        DeploymentBuilder deploymentBuilder1 = repositoryService.createDeployment();
        deploymentBuilder1.name("测试部署资源2")
                .addClasspathResource("my-process.bpmn20.xml")
                .addClasspathResource("second_approve.bpmn20.xml");
        deploymentBuilder1.deploy();

        //查看部署对象里面有什么,deploymentQuery内涵各种查询方法查询流程定义对象
        DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();
        Deployment deployment = deploymentQuery.deploymentId(deploy.getId()).singleResult();

        //查询出list类型的流程定义对象
        List<ProcessDefinition> definitionList = repositoryService
                .createProcessDefinitionQuery()
                .deploymentId(deployment.getId())
                .listPage(0, 100);
        for (ProcessDefinition processDefinition : definitionList) {
            LOGGER.info("processDefinition = {} , version = {} , key = {} , id = {}",processDefinition,
                    processDefinition.getVersion(),
                    processDefinition.getKey(),
                    processDefinition.getId());
        }

        //部署跟流程定义文件可以是一对多的关系

    }

    /*当有需求需要定义用户与用户组关系时。
    * */
    @Test
    @org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})
    public void  testCandidateStarter(){
        RepositoryService repositoryService = activitiRule.getRepositoryService();
        //获取流程定义对象,singleResult获取唯一的结果
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();

        //repositoryService只是给我们提供了构建用户用户组与流程关系的方式,并没有提供校验,需要我们自己在业务逻辑中做校验
        repositoryService.addCandidateStarterUser(processDefinition.getId(),"user");
        repositoryService.addCandidateStarterGroup(processDefinition.getId(),"groupM");

        //把用户跟用户组设置进去以后如何获取出来呢
        List<IdentityLink> identityLinkList = repositoryService.getIdentityLinksForProcessDefinition(processDefinition.getId());
        //取出来以后输出查看下其内容
        for (IdentityLink identityLink : identityLinkList) {
             LOGGER.info(" identityLink = {}",identityLink);
        }
        //删除关系
        repositoryService.deleteCandidateStarterUser(processDefinition.getId(),"user");
        repositoryService.deleteCandidateStarterGroup(processDefinition.getId(),"groupM");
      

    }

}

这里singleResult();只能返回一个结果,要是多了会报错。

 

原文地址:https://www.cnblogs.com/xk920/p/10688127.html