一个最简单的Activiti入门流程代码

1.创建maven工程并导入pom文件


        
            org.springframework
            spring-context
            4.1.9.RELEASE
        
        
            org.springframework
            spring-jdbc
            4.1.9.RELEASE
        
        
            org.activiti
            activiti-engine
            5.22.0
        
        
            org.activiti
            activiti-spring
            5.22.0
        
        
            com.h2database
            h2
            1.4.193
        
    

2.在resources目录下新建一个xml文件(VacationRequest.bpmn20.xml),用来表示一个流程图信息,其本质是对流程图的转化




  

    
      
        
        
        
      
    
    

    
      
        ${employeeName} would like to take ${numberOfDays} day(s) of vacation (Motivation: ${vacationMotivation}).
      
      
         
          
          
        
        
      
      
        
          management
        
      
    
    

    
    
      ${vacationApproved == 'true'}
    

    
    
    

    
      ${vacationApproved == 'false'}
    

    
      
        Your manager has disapproved your vacation request for ${numberOfDays} days.
        Reason: ${managerMotivation}
      
      
        
        
        
        
          
          
        
      
      
        
          ${employeeName}
        
      
    
    

    
    
      ${resendRequest == 'true'}
    

     
      ${resendRequest == 'false'}
    
    

  


3.创建java类,编写一个最简单的流程

使用Activity服务的第一步即创建ProcessEngine实例,它是整个Activity的引擎,几乎所有的引用都是由它生成的。我代码中使用的是基于默认创建配置,因为方便测试。当然也能借助于Spring的解析和依赖注入功能来创建引擎

在Spring配置文件(applicationContext.xml)下添加bean即可

  

    
    
    
    

    

    

    
    
  

 

public class OnboardingRequest {
    public static void main(String[] args) {
        //基于默认创建配置
        ProcessEngineConfiguration cfg = new StandaloneInMemProcessEngineConfiguration()
                .setJdbcUrl("jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000")
                .setJdbcUsername("sa")
                .setJdbcPassword("")
                .setJdbcDriver("org.h2.Driver")
                .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        ProcessEngine processEngine = cfg.buildProcessEngine();
        String pName = processEngine.getName();
        String ver = processEngine.VERSION;
        System.out.println("ProcessEngine:"+pName+",Version:"+ver);
        //基于配置文件创建ProcessEngine
/*        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        String pName = processEngine.getName();
        String ver = processEngine.VERSION;
        System.out.println("ProcessEngine:"+pName+",Version:"+ver);*/

        //发布一个流程实例,发布意味着Activity引擎会把bpmn 2.0.xml解析成可以执行的东西,“发布包”的所有流程定义都将被存到数据库中,这样当重启引擎时
        //它依然可以获得已发布的流程定义
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("onboarding.bpmn20.xml").deploy();
//        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
//                .deploymentId(deployment.getId()).singleResult();
        System.out.println("Number of process definition :"+repositoryService.createProcessDefinitionQuery().count());

        //启动一个流程实例,流程定义是“蓝图”(标准),流程实例是它的一个运行的存在
        Map variables = new HashMap();
        variables.put("employeeName", "Xujia");
        variables.put("numbleOfDays", new Integer(4));
        variables.put("vacationMotivation", "I'm really really tired !");
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("vacationRequest", variables);
        //验证是否开启了一个流程实例
        System.out.println("Numble of process instance :" + runtimeService.createProcessInstanceQuery().count());

        //查询所有task
        TaskService taskService = processEngine.getTaskService();
        List tasks =taskService.createTaskQuery().taskCandidateGroup("management").list();
        for (Task task : tasks) {
            System.out.println("Task available:"+task.getName());
        }
        //完成整个任务
        Task task = tasks.get(0);
        Map taskVariables = new HashMap();
        taskVariables.put("vacationApproved", "false");
        taskVariables.put("managerMotivation", "We have a tight deadline!");
        taskService.complete(task.getId(), taskVariables);

        //挂起、激活一个流程定义(不同于工单的挂起,类似于模型的启停状态)
        repositoryService.suspendProcessDefinitionByKey("vacationRequest");
        try {
            //挂起流程定义后即无法创建新流程了,会报出异常
            runtimeService.startProcessInstanceByKey("vacationRequest");
        } catch (ActivitiException e) {
            e.printStackTrace();
        }
        //激活一个流程定义:   repositoryService.activateProcessDefinitionXXX方法

    }
}


 

你可能感兴趣的:(java)