activiti测试文档

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方法执行任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值