一、简介

本篇文章仅是记录个人使用 Flowable Case Model 过程中的情况。

文档详细可查阅 Flowable 官方文档

二、概念

什么是Case Model,个人理解:它是可以解决某个领域问题的模型;例如:用户模块、购物模块、财务管理、年审等业务场景;也可以简单理解为一堆功能的集合体,然后通过准入条件退出条件来甄别是否执行业务作业(PlanItem Instance)。

三、术语与结构

框架设定上允许使用行业标准XML来定义流程,那么我们可以先看下整个案例模型定义的结构是怎么样的?它由哪些标签组成?
案例模型(CaseModel)也可以称为案例模型定义(CaseModelDefinition)由它创建出来的XML文件后缀名为 .cmmn.xml

├─Case
│  └─CasePlanModel
│      ├─Criteria
│      ├─Event
│      ├─PlanItem
│      ├─Milestone
│      ├─Stage
│      │   ├─PlanItem
│      │   ├─Criteria
│      │   ├─Task
│      │   ├─Milestone
│      │   └─ExtensionElements
│      └─Task

文件内容大致上的结构分层类似酱紫的!

  • 一个案例定义是拥有一个或者多个案例计划模块;
  • 每个案例计划模块包含有多个计划项(PlanItem)、而每个计划项是可以设置准入条件退出条件的;
  • 而像阶段(stage)、各类任务(Task)、里程牌(Milestone)、事件(Event)它们都可以作为一个计划项;
  • 因此假设启动一个案例定义来获得一个案例实例(CaseInstance)之后,你通过查询就会得到好多个计划项实例(PlanItemInstance)
  • 如果你查看一份XML文件,在同一层级结构上你会看到这样的结构内容
<planitem id="planItem2" name="Stock Stage" definitionref="stock_stage">
   <exitcriterion id="sid-1E54860D-FDEF-464B-B16A-A924DE419A84" sentryref="sentry2"></exitcriterion>
</planitem>
<planitem id="planItem3" name="Stock And Order Milestone" definitionref="stockOrderMilestone"></planitem>
<sentry id="sentry2">
   <planitemonpart id="sentryOnPart1" sourceref="planItem1">
   	 <standardevent>complete</standardevent>
   </planitemonpart>
   <ifpart>
   	 <condition></condition>
   </ifpart>
</sentry>
<sentry id="sentry1">
   <planitemonpart id="sentryOnPart1" sourceref="planItem1">
   	  <standardevent>complete</standardevent>
   </planitemonpart>
</sentry>
<stage id="stock_stage" name="Stock Stage">......</stage>

解读出来就类似于:我们先有一个计划项 绑定了一个计划项定义,然后下面是一个哨兵监听了这些计划项,控制它的出入或退出;最后查看下面的标签都是计划项定义(就是humanTask、stage、userEvent、milestone这些标签)

我发现这个结构分布是有顺序要求的,如果你打乱了很有可能是无法发布部署XML的,亲们可以自己尝试下哈。

上面提到的名词术语我们需要稍微记忆一下,方便理解后续的内容

官方图示
在这里插入图片描述
源代码服务类划分如上图,显示的是案例引擎提供的服务类,跟BPMN的类似的作用

  • CmmnRepositoryService 提供管理案例定义和操作部署的服务
  • CmmnRuntimeService 可以启动案例定义来产生一个新案例实例,检索和存储案例变量、查询案例实例详情和计划项列表;或者响应案例实例的各种等待状态,触发计划项等等操作
  • CmmnTaskService 查询、分配给用户或组的任,创建新的独立任务;领取、受让并完成任务。
  • CmmnHistoryService 收集的案例实例的所有历史数据;例如案例实例启动时间、谁执行了哪些任务、完成任务需要多长时间、每个案例实例遵循哪条路径,等等。
  • CmmnManagementService 提供对有关数据库表的低级信息的访问,允许查询不同类型的作业并执行它们。

四、学习路线

  1. 配置项目环境 (SpringBoot 集成 Flowable 应用程序)
  2. 设计并发布部署一个案例模型定义
  3. 启动案例模型定义来创建案例实例
  4. 执行案例实例的计划项实例

五、配置项目环境 (SpringBoot 集成 Flowable 应用程序)

开发环境 我这里使用的 Docker compose 来部署基础环境,所以像MYSQL、Flowable-UI 都将会使用docker方式部署它。

5.1 环境要求

  • Docker 和 Docker Compose 命令可用
  • JDK 11+
  • intellij IDEA 编译器
  • Maven 3.8.0+

5.2 Docker Compose 安装基础环境

主要是部署了 MYSQLRedis、Flowable-UI 应用容器哈!

在个人的工作目录新建配置文件 docker-compose.yml

version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    command: [ "--max_connections=1000" ]
    ports:
      - "3306:3306"
    #command: ["--log_bin_trust_function_creators=1"]
    security_opt:
      - seccomp:unconfined
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/config/my.cnf:/etc/mysql/my.cnf
      - ./mysql/init:/docker-entrypoint-initdb.d
      - ./mysql/log:/var/log/mysql
      - ./mysql/mysql-files:/var/lib/mysql-files
    environment:
       - TZ=Asia/Shanghai
       - MYSQL_ROOT_PASSWORD=root
       - MYSQL_ALLOW_EMPTY_PASSWORD=no
       - MYSQL_USER=nine
       - MYSQL_PASS=password
    networks:
      - localhost-network
    restart: always

  redis:
    image: redis:latest
    container_name: redis
    command: ["redis-server","/etc/redis/redis.conf"]
    environment:
      - TZ=Asia/Shanghai
      #- ALLOW_EMPTY_PASSWORD=yes
      #- REDIS_PASSWORD=password
      #- REDIS_HOST=127.0.0.1
    volumes:
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/etc/redis/redis.conf
    ports:
      - 6379:6379
    networks:
      - localhost-network
    restart: always
  
  flowable-ui:
    image: flowable/flowable-ui:6.7.2
    container_name: flowable-ui
    ports:
      - 8087:8080
    volumes:
      - ./workflow/apps:/apps
      - ./workflow/processes:/processes
      - ./workflow/cases:/cases
      - ./workflow/dmn:/dmn
      - ./workflow/eventregistry:/eventregistry
      - ./workflow/forms:/forms
      - ./workflow/data:/data
      - "./mysql/mysql-connector-j-8.0.33.jar:/app/WEB-INF/lib/mysql-connector-j-8.0.33.jar"
    environment:
      - server.forward-headers-strategy=framework
      - spring_datasource_url=jdbc:mysql://mysql/docpal
      - spring.datasource.username=root
      - spring.datasource.password=root
      - spring.datasource.driver-class-name=com.mysql.jdbc.Driver
      - spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
      - spring.jpa.show-sql=false
      - spring.jpa.hibernate.ddl-auto=create
      - flowable_app_resource-location=file:/apps/
      - flowable_process-definition-location-prefix=file:/processes/
      - flowable_cmmn_resource-location=file:/cases/
      - flowable_dmn_resource-location=file:/dmn/
      - flowable_eventregistry_resource-location=file:/eventregistry/
      - flowable_form_resource-location=file:/forms/
      - flowable_content_storage_root-folder=/data
      - flowable.mail.server.host=mailhog
      - flowable.mail.server.port=1025
      - flowable.mail.server.username=
      - flowable.mail.server.password=
      - flowable.idm.app.admin.user-id=admin
      - flowable.idm.app.admin.password=test
      - flowable.idm.app.admin.first-name=Test
      - flowable.idm.app.admin.last-name=Administrator
      - flowable.idm.app.admin.email=test-admin@example-domain.tld
    networks:
      - localhost-network
    depends_on:
      - mysql
    restart: always

volumes:
  mysql:
  elastic:
  redis:

networks:
  localhost-network:
    name: localhost-network-1

启动 docker 容器列表

docker compose -f docker-compose.yml up -d

在这里插入图片描述
Flowable-UI启动之后,直接浏览器打开:http://localhost:8087/flowable-ui/idm/#/login
在这里插入图片描述
它的默认账号/密码 admin/test 登录成功。
在这里插入图片描述

Okay,暂时搞掂一丢丢!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐