工作流 快速启动

来源:互联网 发布:女命七杀格 知乎 编辑:程序博客网 时间:2024/06/05 09:38
具体实现:
1、下载安装eclipse 配置activiti插件
2、在eclipse中建立Activiti Project
3、在resources下新建Activiti Diagram
4、设计流程节点,可以添加节点上可以添加form(支持类型string、long、enum、date、boolean),可以在连线上设置判断条件控制流程走向,最后保存文件。
5、在需要添加工作流的项目中resources底下添加activiti.cfg.xml文件。
6、添加diagrams文件夹并将5保存的文件考到其中。
7、在pom.xml中引入activiti资源依赖
<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>5.16</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-cdi</artifactId>
            <version>5.16</version>
        </dependency>
    8、代码引入工作流


    @Test
   public void createTable() {
       ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
    
   }


   /**
    * 部署流程
    * 启动完成后在act_re_deployment流程部署表和act_re_procdef流程定义表中会有对应的数据信息.
    */
   @Test
   public void deployFlow(){
       Deployment deployment = processEngine.getRepositoryService()
               .createDeployment()
               .name("test")
               .addClasspathResource("diagrams/MyProcess.bpmn")
               .addClasspathResource("diagrams/MyProcess.png")
               .deploy();
       System.out.println(deployment.getId());
       System.out.println(deployment.getName());
   }


   /**
    * 删除流程定义
    */
   @Test
   public void deleteProcessDefinition(){
       RepositoryService  repositoryService = this.processEngine.getRepositoryService();
       /**
        * 只能删除没有启动流程的流程定义。如果流程启动则抛出异常
        */
       repositoryService.deleteDeployment("5004",true);//删除流程定义,级联删除启动的流程
   }


   /**
    * 启动流程
    * 启动完流程后在act_ru_execution表中会产生一条数据,这条数据为当前流程正在执行的任务,其中act_id_字段的值对应流程图节点的ID值 在act_ru_task表中会产生一条任务数据,execution_id_对应act_ru_execution主键,proc_inst_id_为流程实例ID,name_值为流程节点名称,assignee_字段为该待办当前的处理人
    */
   @Test
   public void flowStart(){
       RuntimeService runtimeService = processEngine.getRuntimeService();
       //使用流程定义key启动流程实例,key对象myProcess.bpmn文件中的id属性,对应act_re_procdef
       //用key启动时按照罪行的流程版本定义启动
       ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");
       System.out.println(processInstance.getId()); //流程实例id
       System.out.println(processInstance.getProcessDefinitionId());//流程定义id
       RepositoryService repositoryService = processEngine.getRepositoryService();
       ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processInstance.getProcessDefinitionId());
       System.out.println(processDefinition.getId());
       System.out.println(processDefinition.getKey());
   }




   /**
    * 查询当前人的任务
    */
   @Test
   public void findMyPersonTask (){
       String assignee= "张三";
       List<Task> taskList = this.processEngine.getTaskService()
               .createTaskQuery()//创建查询对象
               .taskAssignee(assignee)//制定要查询的人
               .list();
       if(taskList !=null && !taskList.isEmpty()){
           for (Task task:taskList){
               System.out.println("待办任务id:" + task.getId() + " ");
               System.out.println("任务名称:" + task.getName() + " ");
               System.out.println("任务创建时间:" + task.getCreateTime() + " ");
               System.out.println("任务办理人:" + task.getAssignee() + " ");
           }
       }
   }


   /**
    *推进工作流进程
    *
    */
    @Test
   public void completeTask2(){
       String taskId = "15002";
       Map variables = new HashMap<>();
       variables.put("message", "同意");
       this.processEngine.getTaskService()//获取任务service
               .complete(taskId,variables);
       System.out.println("完成任务,任务id:"+taskId);
   }


/**
    *获取form设置
    *
    */
   @Test
   public void getFormProperties(){
       String taskId  = "2504";
       List<FormProperty> list = this.processEngine.getFormService().getTaskFormData(taskId).getFormProperties();
       if(list!=null && list.size()>0){
           for(FormProperty formProperty:list){
               formProperty.getType();
               System.out.println(formProperty.getId() + "     " + formProperty.getName() + "      " +formProperty.getValue());
           }
       }
   }




注意事项:
activiti设置表单只保存表单设置,但是应用中录入的值是不保存的,需要系统自行开发保存