• activiti--操作例子


    package com.example;
    
    import java.io.Reader;
    import java.io.StringReader;
    import java.util.HashMap;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.xml.stream.XMLInputFactory;
    import javax.xml.stream.XMLStreamReader;
    
    import org.activiti.bpmn.converter.BpmnXMLConverter;
    import org.activiti.bpmn.model.BpmnModel;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngineConfiguration;
    import org.activiti.engine.RepositoryService;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.history.HistoricVariableInstance;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.repository.ProcessDefinition;
    import org.activiti.engine.repository.ProcessDefinitionQuery;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.IdentityLink;
    import org.activiti.engine.task.Task;
    import org.junit.Before;
    import org.junit.Test;
    
    /**
     * 测试流程
     * @author 20150205
     *
     */
    public class TestActiviti {
        
        /**
         *  RepositoryService 管理流程定义 
            RuntimeService 执行管理,包括启动、推进、删除流程实例等操作 
            TaskService 任务管理 
            HistoryService 历史管理(执行完的数据的管理) 
            IdentityService 组织机构管理 
            FormService 一个可选服务,任务表单管理 
         */
        
        /**
         * 
         */
        
        ProcessEngine processEngine = null;
        RepositoryService repositoryService = null;
        RuntimeService runtimeService = null;
        TaskService taskService = null;
    
        @Before
        public void init() {
            //加载spring配置文件,创建 ProcessEngine
            processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
                    .buildProcessEngine();
            repositoryService = processEngine.getRepositoryService();
            runtimeService = processEngine.getRuntimeService();
            taskService = processEngine.getTaskService();
        }
    
    
        /**
         * 部署流程定义加载test.bpmn文件
         */
        @Test
        public void deploy(){
            Deployment deployment  = repositoryService.createDeployment()
                    .addClasspathResource("diagrams/qingjia.bpmn")
                    .name("请假流程")
                    .category("办公类别")
                    //.tenantId("租户1")
                    .deploy();
            String id = deployment.getId();
            
            //级联删除,不管流程是否启动
            //repositoryService.deleteDeployment(id, true);
            
            System.out.println("***************部署流程定义完成***************" + id);
        }
        
        public void deployStr() throws Exception {
            XMLInputFactory factory = XMLInputFactory.newFactory();
            Reader reader = new StringReader("bpmnxml字符串");
            XMLStreamReader streamReader = factory.createXMLStreamReader(reader);
            BpmnXMLConverter converter = new BpmnXMLConverter();
            BpmnModel bpmnModel = converter.convertToBpmnModel(streamReader);
            Deployment deployment = repositoryService.createDeployment()//创建Deployment对象
                    .name("")
                    .category("")
                    .tenantId("000000")
                    .addBpmnModel("", bpmnModel)
                    .deploy();//部署
            
            
          //字符串  
    //        String text = "<?xml version="1.0" encoding="UTF-8"?><definitions>...</definitions>";           
    //          
    //         deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service  
    //                        .createDeployment()//创建部署对象  
    //                        .addString("helloworld.bpmn",text)                    
    //                        .deploy();//完成部署  
        }
        
        @Test
        public void selectP() {
            //获取到流程查询对象
            ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();
            //查询所有流程定义
            List<ProcessDefinition> list = processDefinitionQuery.list();
            //查询所有流程定义最新的流程,最新的版本
            Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
            
            List<ProcessDefinition> list1 = repositoryService.createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
            for (ProcessDefinition processDefinition : list1) {
                //留最新的key
                map.put(processDefinition.getKey(), processDefinition);
            }
            System.out.println("查询流程模板");
            
            
        }
        
        
        //查询正在执行的流程实例,判断流程是否结束
        public void selectProcessInstance() {
            ProcessInstance singleResult = runtimeService.createProcessInstanceQuery()
                    .processInstanceId("processInstanceId")
                    .singleResult();
            if(singleResult==null) {
                //流程已结束
            }
            
        }
        
        
    
        /**
         * 启动一个请假流程
         */
        @Test
        public void start() {
            for(int i = 0 ; i < 1; i++){
                //根据KEY默认安装流程版本启动流程
                String processId = runtimeService.startProcessInstanceByKey("qingjiaid").getId();
                System.out.println("***************启动第" + i + "个请假流程完成***************" + processId);
            }
            
            //流程执行对象表act_ru_execution
            //一个流程只有一个流程实例
            //多个流程对象对应一个流程示例,比如流程中有分支和聚合
            
            
        }
        
        /**
         * 设置流程变量和任务变量
         * 
         */
        
        
        @Test
        public void setVariable() {
            //runtimeService.setVariables(executionId, variables);
            //taskService.setVariables(taskId, variables);
            //启动流程时设置流程变量
            //runtimeService.startProcessInstanceByKey(processDefinitionKey, variables)
            //taskService.complete(taskId, variables);
            Map<String, Object> variables = new HashMap<String, Object>();
            //可以覆盖,覆盖修改
            variables.put("请假天数", 4);
            variables.put("请假原因","事假");
            taskService.setVariables("2504", variables);
            //存放对象时,对象必须序列化并且不能修改,否者反序列化时会出错,比如保存变量后,对象添加一个新属性,解决:必须有一个序列化版本ID
            //taskService.setVariableLocal("taskId", "variableName", new Person());
            //Local  是和任务ID关联,当前任务结束后,act_ru_variable表就不存在了,下一个任务获取不到了,历史表里有act_hi_varinst
            //taskService.setVariablesLocal(taskId, variables);
            System.out.println("设置任务变量");
            
            Map<String, Object> variables1 = taskService.getVariables("2504");
            System.out.println("获取任务变量"+variables1.toString());
            
            Map<String, Object> variables2 = runtimeService.getVariables("2501");
            System.out.println("获取流程变量"+variables2.toString());
            
            
            //历史流程变量
    //        List<HistoricVariableInstance> list = processEngine.getHistoryService()//
    //            .createHistoricVariableInstanceQuery() // 创建一个历史的流程变量查询对象
    //            .variableName("请假天数").list();
        }
        
        //查询具体任务
        @Test
        public void selectTask() {
            List<Task> tasks = taskService.createTaskQuery().taskAssignee("张三").list();
            for (Task task : tasks) {
                System.out.println("" + task.getName() + ",id:" + task.getId());//任务的name与id
                System.out.println(task.getAssignee());//任务拥有者
                System.out.println(task.getProcessInstanceId());//流程实例id
                System.out.println(task.getProcessDefinitionId());//流程定义id
                taskService.complete(task.getId());//完成任务
            }
        }
        
        /**
         * 查询组任务
         */
        @Test
        public void selectGroupTask() {
            //act_ru_identitylink
            //TYPE_    participant个人任务,组任务
            //candidate  张三,李四
            List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("张三").list();
            
            //查询正在执行任务办理人
            List<IdentityLink> IdentityLinks = taskService.getIdentityLinksForTask("taskId");
            for (IdentityLink identityLink : IdentityLinks) {
                //identityLink.getUserId()
                //identityLink.getType()
                System.out.println();
            }
            //将组任务分配给某个人(可以是组内的人,也可以不是)
            //拾取任务
            //taskService.claim("taskId", "userId");
            //将个人任务回退到组任务,前提,之前也是一个组任务
            //taskService.setAssignee("taskId", null);
            //向组任务中添加成员
            //taskService.addCandidateUser("taskId", "userId");
            //taskService.deleteCandidateUser("taskId", "userId");
        
        }
    
    
        
    }
  • 相关阅读:
    POJ 1754 Splay
    POJ 3481Double Queue Splay
    前缀表达式求值
    Treap(树堆):随机平衡二叉树实现
    Tarjian算法求强联通分量
    (转)priority_queue的用法
    001Angular2环境准备
    9.富客户端应用程序的线程
    8.信号
    7.线程的优先级
  • 原文地址:https://www.cnblogs.com/jentary/p/13986619.html
Copyright © 2020-2023  润新知