activiti快速入门--简单请假例子(1)

1.      新建一个maven项目

2.      pom.xml文件添加所需依赖:

   

   

   org.activiti

   activiti-engine

   5.21.0

   

   

   org.activiti

   activiti-spring

   5.21.0

   

   

   org.codehaus.groovy

   groovy-all

   2.4.3

   

   

   org.slf4j

   slf4j-api

   1.7.6

   

   

   org.slf4j

   slf4j-jdk14

   1.7.6

   

   

   junit

   junit

   3.8.1

   test

   

   

   mysql

   mysql-connector-java

   5.1.38

   



3.  创建activiti数据表,具体操作如下:

1)     创建配置文件:activiti.cfg.xml,添加以下代码:(我用的是mysql数据库)

 



 



        



        

        

        

       

        

        

       

        

        

        



2)     写CreateTable.java创建表,代码如下:

 publicclass CreateTable {

  @Test

  publicvoid createTable(){

      ProcessEngine processEngine =

  ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")

              .buildProcessEngine();

      System.out.println("processEngine="+processEngine);

  }

}


3)     跑下上面代码就可以了,数据库中会多出25张数据表

4.  创建process.bpmn画流程图:(简单画一个请假例子,填写基本信息key和name,添加一个开始事件和结束事件Event:StartEvent、EndEvent,以及添加两个Task事件:UserTask)

 activiti快速入门--简单请假例子(1)_第1张图片

点击对应task分配任务人assignee,在main config下填写:

activiti快速入门--简单请假例子(1)_第2张图片activiti快速入门--简单请假例子(1)_第3张图片

该bpmn文件选择用xml形式打开的话,生成上面所画的代码如下:

 



 

   

     

        

     

   

   

     

        

     

   

   

     

        

     

   

   

   

   

   

 

 

   

     

        

     

     

        

     

     

        

     

     

        

     

     

        

        

     

     

        

        

     

     

        

        

     

   

 



 

5. 好了下面开始真正的流程操作了,我们创建一个operate.java文件来操作流程,具体步骤如下:

         1)部署我们创建的bpmn流程如到数据库中:(运行后:在act_re_deployment流程部署表和act_re_procdef流程定义表中会有对应的数据信息)

 

    private static ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();

   @Test

    public void delployFlow(){

                 Deploymentdeployment = processEngine.getRepositoryService()

                .createDeployment()

                .name("helloworld")

                .addClasspathResource("Process.bpmn")

                .addClasspathResource("Process.png")

                .deploy();

        System.out.println(deployment.getId());

        System.out.println(deployment.getName());

    }

补充下:

上面中的png文件,如果保存bpmn不会自动生成PNG文件的话可以以下操作:

Window->preferences->activity->saveaction->create process这个选择框勾上;

解释下ProcessEngine这个类,在Activiti中最核心的类,其他的类都是由他而来,例如:

上面的processEngine.getRepositoryService()//管理流程定义

1.1 RuntimeService :activiti的流程执行服务类,可以从这个服务类中获取很多关于流程执行的相关的信息。

1.2    TaskService是activiti的任务服务类。可以从这个类中获取任务的相关信息,如当前正在执行的个人待办和用户组待办任务。

1.3    HistoryService是activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所有待办节点的运行情况。

1.4    ProcessDefinition流程定义类,可以从这里获得资源文件等。

1.5    ProcessInstance代表流程定义的执行实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是它的流程任务可以有多个,每个任务对应流程图中相应的流程节点。

2)接着上面后开启流程:

 

 @Test

    publicvoid flowStart(){

        RuntimeServiceruntimeService = processEngine.getRuntimeService();

        //用key启动时按照最新的流程图版本定义启动

    ProcessInstanceprocessInstance = runtimeService.startProcessInstanceByKey("HelloWorldKey");

    }


补充:

其中runtimeService.startProcessInstanceByKey("HelloWorldKey")中的HelloWorldKey对应流程图中的ID,在数据表中对应act_re_procdef流程定义表中的key字段

     启动完流程后在act_ru_execution表中会产生一条数据,这条数据为当前流程正在执行的任务,其中act_id_字段的值对应流程图节点的ID值在act_ru_task表中会产生一条任务数据,execution_id_对应act_ru_execution主键,proc_inst_id_为流程实例IDname_值为流程节点名称,assignee_字段为该待办当前的处理人(也就是上面我们在画流程图中所设置的cwh

3)查询下任务人所有的任务:


  @Test

    publicvoid findMyPersonTask(){

        Stringassignee = "cwh";

        ListtaskList= processEngine.getTaskService()//获取任务service

                .createTaskQuery()//创建查询对象

                .taskAssignee(assignee)//指定查询人

                .list();

        if(taskList.size()>0){

            for (Task task : taskList){

                System.out.println("代办任务ID:"+task.getId());

                System.out.println("代办任务name:"+task.getName());

                System.out.println("代办任务创建时间:"+task.getCreateTime());

                System.out.println("代办任务办理人:"+task.getAssignee());

                System.out.println("流程实例ID:"+task.getProcessInstanceId());

                System.out.println("执行对象ID:"+task.getExecutionId());

            }

        }

    }

activiti快速入门--简单请假例子(1)_第4张图片

4)             提交任务到下一个任务人(也就是提交我们的申请到经理手中去)

 @Test

    publicvoid completeTask(){

        StringtaskId = "17504";        processEngine.getTaskService().complete(taskId);//完成任务

        System.out.println("完成任务,任务ID"+taskId);

  }


补充:taskId对应上面数据表act_ru_task中所生成的ID,也就是我们上面通过cwh查询出来的任务id,提交后该笔任务就到了下一个人手上(也就是经理,我们上面设置的assignee ‘menco’)那么我们查询下menco的任务信息,调用上面3)写的findMyPersonTask():改查询条件assignee为‘menco

  activiti快速入门--简单请假例子(1)_第5张图片

5)             经理拿到该条申请后,进行审批然后提交之后那么该笔任务流程也就结束了

 @Test

    publicvoid completeTask1(){

        Stringtaskid = "20002";

        TaskServicetaskService = processEngine.getTaskService();

        processEngine.getTaskService().complete(taskid);//完成任务

        System.out.println("完成任务,任务ID"+taskid);

  }


你可能感兴趣的:(activiti)