activiti测试文档

来源:互联网 发布:电脑看美剧用什么软件 编辑:程序博客网 时间:2024/05/16 18:08

activiti测试文档

环境说明

  • springmvc,spring,mybatis
  • activiti:5.22.0
  • 数据库:mysql

搭建环境

  • 几个重要的配置文件
    • activiti.cfg.xml(名字不能写错,放置在根目录,会根据该配置文件生成ProcessEngine流程引擎)
    • applicationContext-resources.xml(用于配置mybatis)
    • spring-mvc.xml:设置springmvc相关配置
    • jdbc.propertis:设置数据库连接参数

activiti开发步骤

  • 画流程图
    • 在eclispe中安装acti插件
    • 几个重要的节点
      • startEvent:开始节点
      • userTask:用户任务节点
        • 重要参数
        • general: id,name
        • main config
          • Assigine:设置执行人(#{user})
          • Candidate users: 候选人(可设多个#{userIds})
          • Candidate groups:候选组
        • listeners:设置监听器:可用于设置执行人,候选人
      • SequenceFlow:用于连接各个节点
        • main config
          • condition:用于设置条件($(money > 500 && money < 1000)
  • 将生成的png图片和bpmn文件压缩为zip文件,防止在resources下
  • appTest可用于生成数据库表
  • 部署流程图
    • 代码
    /**     * 部署流程图     * @return     */    @RequestMapping("deploy")    @ResponseBody    public Map<String,Object> deploy(){        Map<String,Object> result = new HashMap<>();        try {            processEngine.getRepositoryService().                    createDeployment().                    addZipInputStream(new ZipInputStream(new FileInputStream("D:\\activitiDemo\\src\\main\\resources\\deployment\\leaveflow.zip"))).deploy();            result.put("message","部署成功");        } catch (FileNotFoundException e) {            logger.error("部署失败,失败原因:" + e.getMessage());            result.put("message","部署失败");        }        return result;    }
- 流程部署操作向act_re_procdef和act_re_deployment中插入了数据(参见理解activti表结构)

- 开启流程实例

- 代码:
/**     * 开启一个流程实例     * @return     */    @RequestMapping("startInstance")    @ResponseBody    public Map<String,Object> startInstance(@RequestParam String username) {        /**         * 开启流程实例有两种方式         *      根据key:获得最新版本的流程实例         *      根据流程定义Id:         */        Map<String,Object> result = new HashMap<>();        try {            Map<String,Object> variables = new HashMap<>();            variables.put("username",username);            ProcessInstance processInstance = processEngine.getRuntimeService().startProcessInstanceByKey("qingjiashenqing",variables);            String processInstanceId = processInstance.getProcessInstanceId();            result.put("processInstanceId",processInstanceId);            result.put("message","申请成功");        } catch (Exception e) {            logger.error("请假申请失败:失败原因:" + e.getMessage());            result.put("message","申请失败");        }        return result;    }
- 可在开启之前设置流程变量,设置申请人(username是流程图中定义好的变量)- 流程实例开启操作向act_ru_task,act_hi_actinstm,act_hi_procinst,act_hi_taskinst,act_ru_execution中插入了数据
  • 查询个人任务
    • 代码
    /**     * 查询个人任务     * @return     */    @RequestMapping("queryMyTask")    @ResponseBody    public List<String> queryMyTask(@RequestParam String username) {        List<String> list = new ArrayList<>();        List<Task> taskList = processEngine.getTaskService().createTaskQuery().taskAssignee(username).list();        HashMap<String,Object> result = new HashMap<>();        //这里的taskList不能直接存入Map中        for (Task task : taskList) {            list.add(task.getName());        }        return list;    }
- 可根据执行人姓名,查询个人任务

- 完成任务操作
- 代码

/**     * 部门经理审批     * @return     */    @RequestMapping("depApproval")    @ResponseBody    public Map<String,Object> depApproval(@RequestParam String processInstanceId) {        Map<String,Object> result = new HashMap<>();        //根据流程定义id获得任务对象        Task task = processEngine.getTaskService().createTaskQuery().processInstanceId(processInstanceId).singleResult();        //完成任务        processEngine.getTaskService().complete(task.getId());        /**         * TODO 在开发中,通过类的方式设置好下一个任务的办理人         */        result.put("message","部门经理审批");        return result;    }
- 通过complete方法执行任务
原创粉丝点击