栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Flowable流程审批使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flowable流程审批使用

本文需对flowable 有一点了解,若新入门请先详细阅读官方中文文档:https://tkjohn.github.io/flowable-userguide/

请假实例

请假流程设计及xml文件

请假流程holiday-request.bpmn20.xml
process文件下




  

    
    

    
    

    
    
      
        approved}
        ]]>
      
    
    
      
        !approved}
        ]]>
      
    

    
    

    
    

    
    

    

    

  


1、初始化ProcessEngine流程引擎实例。

    ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
      .setJdbcUrl("jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8")
      .setJdbcUsername("****")
      .setJdbcPassword("****")
      .setJdbcDriver("com.mysql.jdbc.Driver")
      //是否创建或更新数据库表
      .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
    ProcessEngine processEngine = cfg.buildProcessEngine();
  }

2、部署请假流程到引擎中

将流程定义部署至Flowable引擎,需要使用RepositoryService,其可以从ProcessEngine对象获取。使用RepositoryService,可以通过XML文件的路径创建一个新的部署(Deployment),并调用deploy()方法实际执行:

RepositoryService repositoryService = processEngine.getRepositoryService();

Deployment deployment = repositoryService.createDeployment()
  .addClasspathResource("holiday-request.bpmn20.xml")
  .deploy();

现在可以通过API查询验证流程定义已经部署在引擎中;通过RepositoryService创建的
ProcessDefinitionQuery对象实现查询:

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
  .deploymentId(deployment.getId())
  .singleResult();
System.out.println("Found process definition : " + processDefinition.getName());

3、创建流程实例(提交请假申请)
使用RuntimeService启动一个流程实例。收集的数据作为一个java.util.Map实例传递,其中的键就是之后用于获取变量的标识符。这个流程实例使用key启动。这个key就是BPMN 2.0 XML文件中设置的id属性,在这个例子里是holidayRequest。

RuntimeService runtimeService = processEngine.getRuntimeService();

//使用map封装请假相关的信息数据(请假申请人,请假天数,请假理由等)
Map variables = new HashMap();
variables.put("employee", "zhangsan");
variables.put("nrOfHolidays", 4);
variables.put("description", "我要请假4天");
//每次创建提交一个请假申请,就会创建一个请假流程的实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holidayRequest", variables);

4、查询待办任务
通过TaskService创建一个TaskQuery,查询(指定人员/组)待审批的任务

TaskService taskService = processEngine.getTaskService();

List tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();
System.out.println("You have " + tasks.size() + " tasks:");
for (int i=0; i
  System.out.println((i+1) + ") " + tasks.get(i).getName());
}

5、审批任务
人工审批任务(人工审批/用户任务/userTask)

//同意或拒绝请假申请
boolean approved = true;
variables = new HashMap();
variables.put("approved", approved);
//通过complete()提交审批
taskService.complete(task.getId(), variables);

系统任务:领导审批通过或拒绝都将通过系统发送邮件通知:
以审批通过为例:发送邮件通过xml中配置的org.flowable.CallExternalSystemDelegate类实现。
审批通过后自动调用该类中的excute()方法


CallExternalSystemDelegate类需实现JavaDelegate接口,在excute()方法中实现相应功能。

package org.flowable;

import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.JavaDelegate;

public class CallExternalSystemDelegate implements JavaDelegate {

    public void execute(DelegateExecution execution) {
        System.out.println("Calling the external system for employee "
            + execution.getVariable("employee"));
    }

}
集成SpringBoot

添加maven依赖


    org.flowable
    flowable-spring-boot-starter
    ${flowable.version}

配置数据库连接

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable-spring-boot?characterEncoding=UTF-8
spring.datasource.username=flowable
spring.datasource.password=flowable
database-schema-update: true

集成SpringBoot的优点:

  1. 无需创建初始化ProcessEngine流程引擎:自动创建并初始化,即无需步骤1;
  2. 无需部署相关流程,自动部署process下所有流程,即步骤2;
  3. 无需手动通过ProcessEngine获取RuntimeService 、RepositoryService 、TaskService
    等各种服务; 直接使用@Autowired 即可; 例:
@Autowired
private RuntimeService runtimeService;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号