activiti 简单的流程实例

请假流程实例

基本介绍

通过一个小例子了解activiti 工作流程的原理,

注意:执行人可以直接设置,也可以取自流程变量,用${}或者#{}获取,同时还可以在监听器中设置

部署流程定义:deploy();

设置流程启动人:identityService.setAuthenticatedUserId(启动人ID);

启动流程(根据Key获取根据ID)、

runtimeService.startProcessInstanceByKey(流程定义id,流程变量集合(一般是用map);//流程变量可以设置,也可以不设置,根据流程的需要来确定

办理任务:taskService.complete(任务节点ID,流程变量);// 流程变量可以设置,也可以不设置,根据流程的需要来确定.

查询:

流程定义查询

流程实例查询

流程变量查询

任务实例查询

流程图

申请人---上级领导—人事部—结束


流程属性



 

开始节点

流程变量:

申请人ID(“qwe”)

申请标题:请假回家

申请理由:休假

申请时间:

请假天数:

上级领导ID:managerId

 

上级领导审批

执行人:用变量获取${ managerId }

审批结果:通过/不通过

理由:

 

hr审批

用变量获取${hr }

审批结果:通过/不通过

理由:

 

结束

开始部署流程

用junit进行测试:

首先创建流程引擎

    /**

     * 手动获取流程引擎

     * @return

     */

    public ProcessEngineprocessEngine() {

           

            ProcessEngineConfigurationprocessEngineConfig= ProcessEngineConfiguration

                    .createProcessEngineConfigurationFromResource("activiti/cfg/activiti.cfg.xml");

            //ProcessEngine流程引擎的抽象,通过它我们可以获得我们需要的一切服务

            ProcessEngineprocessEngine = processEngineConfig.buildProcessEngine();

            return processEngine; //有返回值时报错

    }

部署流程

    /**

     * Classpath的方法部署流程

     * @throws Exception

     */

      @Test

      public void test_Deploy() throws Exception{

          RepositoryService repositoryService =processEngine().getRepositoryService();

       

           String Path="activiti/diagrams/请假流程实例1.bpmn";//文件路径 

           String Path1="activiti/diagrams/请假流程实例1.png";

           repositoryService.createDeployment()//创建部署对象

           .addClasspathResource(Path)

           .addClasspathResource(Path1)       

         .name("请假流程实例1")//给流程定义命名

         .category("日常办公")//设置流程类型

         .deploy();//部署--发布   

      }

流程部署后流程定义表中以下信息:

act_re_deployment


在网页中进行启动和查看流程

已经部署的流程查询

//查看已经部署流程的最新版本

    @Override

    public ListgetDeploymentList() {

        // TODO Auto-generated method stub

        Listlist = repositoryService.createProcessDefinitionQuery()

                .latestVersion().list();       

        return list;

       

    }

页面中展示:

启动流程设置申请人的流程变量

startProcessInstanceByKey :根据流程定义中最新的流程版本进行启动

    public voidstartprocessByKey(String key){

        Stringapplyuser ="zyq";

        identityService.setAuthenticatedUserId(applyuser);

        Map<String,Object>variables = new HashMap();//设置流程变量

        variables.put("applyUserId","qwer");

        variables.put("applyTitle","test_请假申请流程");

        variables.put("applyTime","7");

        variables.put("applyCtreateTime",new Date());

        variables.put("applyReason","休假");

        variables.put("managerId ","xxx");

    ProcessInstanceprocessInstance = runtimeService.startProcessInstanceByKey(key,variables);

   

    Tasktask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();

    System.out.println(task.getAssignee());

    }

启动后各表的变化不再列出

流程启动后可以查询上级领导xxx 是否有收到流程

任务查询

       /**

         * 任务查询个人

         */

        @Test

        public void test_searchTask(){

            TaskServicetaskService =processEngine().getTaskService();

            List<Task> list =    taskService.createTaskQuery().taskAssignee(managerId)//根据执行人查询

                .orderByTaskCreateTime().desc()

                .list();

            for(Task t:list){

            System.out.println("任务节点id:"+t.getId());

            System.out.println("任务节点名:"+t.getName());

            System.out.println("任务节点所属流程定义Id:"+t.getProcessDefinitionId());

             }

        }

执行结果:

任务节点id:30010

任务节点名:上级领导审批

任务节点所属流程定义Id:请假流程实例1:2:27504

上级领导办理任务(hr办理同理)

    @Override

    public void myTaskeComplete(String taskId) {

        Map<String,Object>variables = new HashMap();//设置流程变量

        variables.put("managerCheckResult", "同意");

        variables.put("managerCheckreason","可用年休假");

        variables.put("managerCheckrTime",new Date());

        variables.put("hr", "xxhr");

        taskService.complete(taskId,variables);

    }

 可以查询正运行的任务表和历史任务表各自的变化

最后流程变量汇总:


猜你喜欢

转载自blog.csdn.net/qi95719/article/details/66472325