七张核心表

68747470733a2f2f73322e617831782e636f6d2f323031392f30392f32302f6e6a4166426a2e706e67.png

表定义详细

WF_PROCESS

流程定义,例如请假申请,用车申请等流程定义

153019_729ddee2_13178.png

WF_ORDER

流程实例,当前运行中的流程实例的信息,比如,我申请了一条请假流程,流程编号“请假-001”,这个请假流程“请假-001”就是一个流程实例

WF_HIST_ORDER

历史流程实例,只要启动过的流程,历史流程实例表中就会存储流程的实例信息,比如这条流程是否结束

WF_TASK

任务,某个流程中某个节点,叫做任务实例。比如“请假-001”中需要上级审批,“上级审批”这个节点就是一个任务实例

WF_HIST_TASK

历史任务(就是执行完了的任务),所有任务结束以后都会在历史任务信息表里存一条记录

WF_TASK_ACTOR

每个任务对应的参与者(记住谁可以签收或处理),可能会有多个人或者用户组。

WF_HIST_TASK_ACTOR

历史的参与者表,任务处理完以后,对应处理人的信息会存到这个表里面

详细讲解

WF_PROCESS:存放流程定义,通过编辑一个后缀为.snaker的xml文档来定义流程的走向;在前端流程定义管理里有个部署流程的按钮,可以将编辑好的xml文档保存到WF_PROCESS表中,并产生一条记录。xml文档里有流程的名字,如果这个名字在WF_PROCESS已经存在了,则保存时产生的新的记录的version字段值会自动加1。processId是唯一的,不重复。

WF_ORDER:存放流程实例的。开启一个流程实例时,WF_ORDER表有个字段PROCESS_ID和流程定义的process_id相关联,他们是一对多的关系。当开启一个流程实例WF_ORDER时,在WF_ORDER和WF_HIST_ORDER都新增一条记录,并且同时产生的那两条记录的主键id是一样的。,其中WF_HIST_ORDER比WF_ORDER多一个字段ORDER_STATUS 流程实例状态(0:结束;1:活动)。

当流程没跑完时,ORDER_STATUS的值是1;

当整个事件流程跑完了,WF_ORDER表的那条记录会被删除,WF_HIST_ORDER表对应的那条记录的ORDER_STATUS的值变成0,表示流程实例跑完了。

WF_TASK:存当前任务的;当流程执行完当前任务节点时,WF_TASK的这条记录会被剪切到WF_HIST_TASK表中,然后在WF_TASK表中新增下一个任务节点的信息记录。新增的下一任务节点的task有个字段parent_task_id记住上一个任务节点在WF_HIST_TASK表里的WF_HIST_TASK_ID(上一个任务节点从WF_TASK表剪切到WF_HIST_TASK了);这样就可以实现回退等功能。

WF_TASK_ACTOR:存哪个任务关联了那些参与者的,就是哪些人可以签收或者处理。如果当前任务节点被执行了,则相关的参与者会被剪切到WF_HIST_TASK_ACTOR表里,和WF_TASK、WF_HIST_TASK类似,这样回退时,就知道以前这一步是谁处理的。

假如现在执行节点的任务是A2,上述中wf_task存的是执行中的记录,也就是说在执行A2前,wf_task中肯定会有一条执行中的任务记录,假设为A1,那么执行A2时的增删改为先将wf_task和wf_task_actor表中A1的记录插入wf_hist_task和wf_hist_task_actor中;其次是删除wf_task和wf_task_actor中A1记录,然后将A2的信息插入到wf_task和wf_task_actor中。此时wf_task表的parent_task_id是历史表A1记录的Id,通过此可将所有任务串联起来。task表的variable中的值为局部变量只能在当前task中使用。有人会有疑问,假设有如下流程图,执行task1时会怎么样?

image.png

因为开始节点是一个比较特殊的nodemodel,群主称之为流转逻辑元素(下面总体设计思路中会有详细介绍),它只负责流转到下一节点不负责执行,也就没有数据库的增删改。这样直接流转到task1,插入wf_hist_task和wf_hist_task_actor,并且又直接流转到end节点,end节点也是一个流转元素,它会直接删除wf_order表的记录并更改该流程实例wf_hist_order表的order_state的状态。

至此一个流程的所有增删改查结束。

snakerflow 多人_工作流-轻量级工作流引擎Snaker学习笔记相关推荐

  1. python人工智能学习笔记_[Python] 人工智能与自然语言处理学习笔记(1)

    最近我参加了一个人工智能与自然语言处理的课程,这是第一周的学习笔记.这份笔记不涉及一般知识,全部都是与实践(我在这门课上的作业)有关的总结. 文章目录理论学习人工智能的五种模型:作业1. Rule B ...

  2. juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)

    网上的版本好像好久都没更新了treePlotter是没有人用了么.今天学习的时候发现有些地方已经改了,我改的是在python 3.6 上的运行版本,需要导入matplotlib.pyplot impo ...

  3. 04_ClickHouse表引擎概述、MergeTree系列引擎、Log系列引擎、集成引擎、特定功能的引擎(学习笔记)

    1.表引擎概述 1.1.MergeTree系列引擎 1.2.Log系列引擎 1.3.集成引擎 1.4.特定功能的引擎 1.表引擎概述 ClickHouse在建表时必须指定表引擎. 表引擎主要分为四大类 ...

  4. python函数增强代码可读性_如何提高代码的可读性 学习笔记

    本文整理自 taowen 师傅在滴滴内部的分享. 1.Why 对一线开发人员来说,每天工作内容大多是在已有项目的基础上继续堆代码.当项目实在堆不动时就需要寻找收益来重构代码.既然我们的大多数时间都花在 ...

  5. mysql实现关注收藏_收藏|我的Mysql学习笔记

    欢迎关注我的公众号:早起Python 大家好,今天是陈熹专栏 SQL是一个存活近半个世纪的语言,如今仍有大量人在使用.它语法简单,对培养数据整理和提取的思维有很大帮助.我将我过去的笔记分享给大家,希望 ...

  6. python进阶之学习笔记_干货 | Python进阶系列之学习笔记(二)

    目录 对象 字符串 一.对象 (1)什么是对象 在python中一切都是对象,每个对象都有三个属性分别是,(id)身份,就是在内存中的地址,类型(type),是int.字符.字典(dic).列表(li ...

  7. groovy怎样从sql语句中截取表名_《SQL基础教程》学习笔记

    第1章 数据库和SQL 1-3 SQL概要 SQL语句及其种类 DDL-CREATE,DROP,ALTER DML-SELECT,INSERT,UPDATE,DELETE DCL-COMMIT,ROL ...

  8. 前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构

    前言 部门领导让我研究数字货币交易所的开发技术,今天好不容易把码云(Gitee)上开源数字货币交易所CoinExchange的代码编译成功并搭建出来了,在排查问题的过程中,不断的查看代码以及使用到的技 ...

  9. parallelstream启动的线程数_高并发与多线程网络学习笔记(三)线程组和线程池

    线程组 线程组的作用是:可以批量管理线程或线程组对象,有效地对线程或线程组对象进行组织. 构造函数 ThreadGroup(String name)//默认parent为当前线程组 ThreadGro ...

最新文章

  1. 阿里达摩院2020趋势第一弹:感知智能的“天花板”和认知智能的“野望”
  2. 四则运算 3.0 结对
  3. D-Link防火墙操作初步
  4. linux shell expr命令 字符串操作
  5. linux系统修改系统时间
  6. Linux 基础I/O :文件描述符,重定向,文件系统,软链接和硬链接,动态库和静态库
  7. 关于运行jar包时的一个错误
  8. 独立站卖家不可缺的推广引流?
  9. 一张图看懂VnTrader的数据流
  10. Java对数组的操作(三)—比较两个数组中的元素是否相同的最简单方法
  11. 查看总耗时_讲真,我为什么劝你别总加班。
  12. vscode: Code Runner直接运行多文件C++程序
  13. 高手实战!Windows 7开机加速完全攻略
  14. 全拼到缩写月份单词python_英文中十二月份的全称和缩写
  15. 使用Banner制作轮播图
  16. 微信小程序引入组件以及catchtouchmove实现拖动效果
  17. html相同数据合并单元格合并单元格,Javascript合并表格中具有相同内容单元格示例...
  18. 使用c3p0数据库连接池连接时出现错误:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
  19. Python语法学习之函数
  20. RationalDMIS 7.1 矢量点自动“获得IJK“功能。

热门文章

  1. 华大单片机DDL库与lite库的区别
  2. springboot1:项目启动
  3. ipad显示portal服务器获取不,AC6005使用Controller部署无线portal认证portal页面不弹出故障...
  4. arduino驱动MG996舵机+stm32f103驱动舵机
  5. 计算机仿真思考题,化工计算机仿真思考题.doc
  6. 天津城市职业学院 计算机等级考试,2016上半年天津计算机等级考试考点地址电话...
  7. 校园网络系统dhcp服务器,校园网络DHCP和DNS服务器安装配置.doc
  8. java学习资料文档和视频(转)
  9. VHDL语言基本单元及其构成——EDA学习笔记(一)
  10. 如何使用js动态生成html代码