zoukankan      html  css  js  c++  java
  • flowable学习笔记-简单流程概念介绍

    1 Flowable process engine允许我们创建ProcessEngine 对象和使用 Flowable 的API

    ProcessEngine是线程安全的,他是通过 ProcessEngineConfiguration 进行创建的。ProcessEngineConfiguration 可以对 process engine 进行配置和微调。

    ProcessEngineConfiguration 是通过 XML 配置文件或者通过编程方式进行创建,最少配置是配置好数据库链接。例子如下

    package org.flowable;
    
    import org.flowable.engine.ProcessEngine;
    import org.flowable.engine.ProcessEngineConfiguration;
    import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration;
    
    public class HolidayRequest {
      public static void main(String[] args) {
        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
          .setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1")
          .setJdbcUsername("sa")
          .setJdbcPassword("")
          .setJdbcDriver("org.h2.Driver")
          .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
    
        ProcessEngine processEngine = cfg.buildProcessEngine();
      }
    }

    说明:如果是spring环境,配置文件类 StandaloneProcessEngineConfiguration 可以替换成 SpringProcessEngineConfiguration 。

    2 部署流程定义到 flowable engine,此时需要用到 RepositoryServiceRepositoryService 可以通过 processEngine 获得。通过向 RepositoryService 传递流程定义文件来获得部署对象。Deployment

    部署流程意味着:

    1)流程定义会持久化到数据库中

    2)BPMN 2.0 process XML 将会被解析成内存对象模型,该模型可以被 Flowable API 管理。

    3 开始一个流程实例

    到现在流程引擎中已经有了流程定义,开始流程实例之前需要一些流程变量,通过 RuntimeService 启动一个流程实例。初始变量类型是  java.util.Map,向RuntimeService 对象传递初始数据,而变量的 key 和 流程定义文件 BPMN 2.0 XML 中的 id 相匹配。启动一个流程实例代码示例如下:

    RuntimeService runtimeService = processEngine.getRuntimeService();
    
    Map<String, Object> variables = new HashMap<String, Object>();
    variables.put("employee", employee);
    variables.put("nrOfHolidays", nrOfHolidays);
    variables.put("description", description);
    ProcessInstance processInstance =
      runtimeService.startProcessInstanceByKey("holidayRequest", variables);

    RuntimeService  开启一个流程是通过流程定义中的 ID ,在 Flowable 中称作是key。

    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess");

    4 查询和完成任务

    当某一任务赋给一组人时,使用常量即可,如下:

    <userTask id="approveTask" name="Approve or reject request" flowable:candidateGroups="managers"/>

    当要赋给流程变量中的摸一个人时,使用格式如下

    <userTask id="holidayApprovedTask" name="Holiday approved" flowable:assignee="${employee}"/>

    4.1 当要查询待办任务时,需要使用 TaskService  ,代码示例如下:

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

    4.2 编写java自动化Service,在BPMN 2.0中称之为 Service Task,在流程定义中代码如下

    <serviceTask id="externalSystemCall" name="Enter holidays in external system"
        flowable:class="org.flowable.CallExternalSystemDelegate"/>

    其中代理类 CallExternalSystemDelegate 需要实现 org.flowable.engine.delegate.JavaDelegate 接口,此时,当流程到该任务时,会实例化该类并执行 execute 方法

  • 相关阅读:
    学习进度笔记13
    学习进度笔记12
    学习进度笔记11
    学习进度笔记10
    学习进度笔记9
    《架构之美》读书笔记1
    学习进度笔记8
    电话拨号盘(带触摸振动反馈)
    堆排序(小根堆)
    图论起步(长期更新)
  • 原文地址:https://www.cnblogs.com/zhaopengcheng/p/9354935.html
Copyright © 2011-2022 走看看