JWFDv0.96 开源工作流引擎设计-数据库结构说明
工作流引擎讲解
什么是工作流引擎,工作流引擎有什么作用,为什么需要工作流管理系统,在这里我们主要研究它的好处,你想要理解它的好处,就得知道不使用它会带来什么样的坏处。
现在我们来讲工作流,什么是工作流?所谓的工作流就是通常所说的业务流程,那么所谓的业务流程换句话来讲就是多个人在一起去完成一件事情。
这就可以称之为工作流。
流程的本质就是一个参与者参与到一个过程里面来那么现在我们就想为什么需要工作流管理系统,工作流管理系统能给我们带来什么好处。
我们就从这个角度出发来了解JBPM 工作流引擎下面我们就来看关于为什么需要工作流管理系统,以及它给我们带来的好处。
实际上它带来的好处就是使某些容易变化的东西抽象出去,我们能够通过某种方式改变它,然后你就可以对你的某些核心部分不需要做什么变动现在就通过一个小例子来讲这个工作流引擎到底是一个什么东西 举个请假流程的例子 一个请假的过程重点讲解UML 里面的内容,确定UML 里面流程图的讲解顺序 请假流程 现在只看左边的内容,右边的后面再讲,我是方便讲解就将这点东西放到这个空白的地方一个简单的流程图Main 模拟出请假的过程对提交请假单进行分析用一个用户来表示普通用户和审批者,只不过他们的权限不同,他们都能够登录到这个系统现在我们来看用户和请假单,分析他们之间的关系,用户和请假单之间的联系有请假,用户填了一个请假单就创建了一个请假单对象,他们之该是一对多的关系。
因为某一个用户可以请多次假 对吧(其实一般是一个请假单对应一个请假者,这个需求就应该得到客户的确定,客户说了算)那么用户和这个请假单之间还有没有其他联系?接下来是提交请假单。
我首先将请假单提交给张三,那么张三就能够看到这个请假单,如果用户将请假单提交给张三,那么就可以在张三和请假单之间建立一个待审关系 他们之间的关系也是一对多的关系,因为张三可以同时审核几个请假单,就是这意思,一个请假单等待的用户是一个,从现在的需求来看。
那么两者之间还有另外一个联系那就是已审,一个用户可以审批过多个请假单,请假单也可以被多个用户审批 比如张三审批以后交给李四审批,李四审批以后交给王五审批,其实这个已审就是记录审批信息的,比如审批时间,审批意见,把它放在审批关联里边这个就是一个基本的概念,了解这个概念之后我们就考虑它的设计,JBPM 实际上就是协助我们把这个请假单从一个用户手上转递到另一个用户手上。
简单的工作流引擎--数据库设计及开发
简单的⼯作流引擎--数据库设计及开发介绍之前没怎么接触过⼯作流,在⽹上参考了⼀些相关的案例。
任务着急,并没有太看透彻就开始coding了。
这套⼯作流引擎并不复杂,主要是应对简单的流程运转及权限控制。
我们主要⽤在售后等⼯单系统中,⼀张⼯单。
主要实现了以下功能1.⼯作流程的界⾯设计2.流程根据设定的路线流转,设定每个节点的权限,控制流程的编辑及访问,设定流程中每个⽤户对应每个字段的权限3.流程分⽀的⾃动判断4.流程的接单及驳回数据库结构这是⼯作流引擎中涉及到的所有表了。
B开头的为主表,L为关联表,R为引⽤表存储些类型之类的常量。
主要表及字段说明主要的流程设计只保存在两张表中。
流程节点表以及路由表。
为了使⼯作流与业务结合,我们⽤到了流程实例表,以及活动记录表。
每开启⼀个流程,便创建⼀条流程实例,每⼀次流程节点的变动,创建⼀条活动记录。
在活动记录表中,设置了接单⼈字段belongUser,每条节点的编辑之前需要有接单⼈。
可以在提交上⼀节点的时候指定下⼀节点的接单⼈或者点击接单来⼿动接单。
这样设计来避免多⼈同时编辑同⼀个节点。
流程图设计界⾯设计图使⽤的是gooFlow框架,功能⽐较简单,但是恰巧适合我这种并不复杂的⼯作流系统。
⼤家有兴趣的可以下载下来玩⼀下,Demo和Ap i讲解的也⽐较详细对于多个分⽀的情况,有⽤户操作的为⼿动选择下⼀流程。
⽆操作界⾯的话需要需要在路由⾥写上相应的条件语句,来判断接下来要⾛那⼀条路由。
以换货流程为例:在创建退货订单的时候就会⾃动创建⼀条退货的售后⼯单,同时需要传⼊⽀付⽅式及换货单的状态给⼯作流。
相关代码我将每个⼯作流封装为⼀个dto,⾥⾯包括此⼯作流的所有相关信息,系统启动时加载到内存中,在修改⼯作流程时刷新。
⼯作流上下⽂上图只保存了⼯作流的内容,关联到业务的话,还需要⼀个⼯作流上下⽂的类。
此类中应该包括⼯作流当前的状态等信息,同时提供⼀些基本的扩展⽅法。
下图为⼯作流上下⽂类的结构 写下此⽂⼀来为了锻炼⼀下⾃⼰写博客的能⼒以及表达能⼒。
工作流引擎流程产品介绍开发实施
工作流引擎流程产品介绍开发实施1.研究和需求分析:在开发工作流引擎流程产品之前,需要进行深入的研究和需求分析。
这包括了解目标市场和用户需求,确定产品的功能和特性,并收集相关的技术和资源。
2.设计工作流引擎流程:根据需求分析的结果,进行工作流引擎流程的设计。
这包括确定工作流的步骤、条件和规则,定义每个步骤的输入和输出,并构建流程图以可视化工作流程。
3.开发工作流引擎流程的核心功能:根据设计的工作流引擎流程,进行软件开发。
这包括开发核心功能,如流程引擎、任务分配和执行、通知和提醒等。
开发过程中需要使用合适的编程语言和技术工具。
4.开发工作流引擎流程的用户界面:为了方便用户管理和操作工作流程,需要开发工作流引擎流程的用户界面。
用户界面应该简单易用、直观明了,并提供必要的功能和操作。
5.测试和优化:在开发完成后,进行测试和优化工作。
这包括功能测试、性能测试和用户体验测试等。
通过测试和优化,确保工作流引擎流程的稳定性、可靠性和有效性。
6.部署和实施:完成测试和优化后,将工作流引擎流程产品部署到用户的环境中。
在部署之前,需要进行充分的准备工作,包括系统集成、数据迁移和用户培训等。
然后,根据实际需求和计划,进行工作流引擎流程的实施。
7.运维和支持:在工作流引擎流程产品实施后,需要进行运维和支持工作。
这包括监控系统的运行状态、处理用户的反馈和问题,并根据需要进行系统的更新和升级。
总结起来,开发工作流引擎流程产品需要经过研究和需求分析、设计、开发核心功能和用户界面、测试和优化、部署和实施、以及运维和支持等多个阶段。
每个阶段都需要进行详细的规划和准备,并根据实际需求和情况进行调整。
通过合理的开发实施,可以实现高效和可靠的工作流引擎流程产品。
JWFDv0.96 开源工作流系统-二次开发与API简易说明
JWFD开源工作流系统开发包简易说明(v0.96.3版本)四川成都市by comsci 2011.10(第二次编辑)四川成都市by comsci 2012.09(第三次编辑)JWFD 官方logoJWFD ITEYE官方博客JWFD CSDN 官方博客/comsci说明:JWFD流程设计器采用的是JGRAPH5.03的源代码模块本文档分为两个部分:第一部分为JWFD开源工作流二次开发包GUI图形界面模块与代码简要说明第二部分为JWFD开源工作流二次开发包工作流引擎和基础SQL操作API函数说明(第二次编辑)第三部分为JWFD开源工作流二次开发包主GUI界面的工作区按钮说明(by comsci 第三次编辑)请大家在CSDN或者博客园下载中下载JWFD的其它文档和资料地址1:/comsci/favorite/260690.html地址2: /source/3163526第一部分JWFD开源工作流二次开发包GUI图形界面模块与代码简要说明JWFD二次开发包GUI图形界面模块与代码简要说明=========================================================== 图1-1org.jwfd.workflowDesigner.mainUI.UIComponents.MainJgraphModule.java 流程设计器的核心操作功能类(图1-1)重点代码位置说明==========================================================流程设计器工作区鼠标弹出功能代码在上述类的第958-1016行(下图)==========================================================流程设计器工作区浮动按钮区代码在上述类的第1031-1204行(下图)本工作区的每个按钮的使用说明在本文最后部分==========================================================第356行设计过程中在源和目的节点之间插入一条连接线功能代码段(点击这个图标,就可以在两个节点之间拉出一条线)===========================================================第250行设计过程中插入一个新节点(insert())功能代码===========================================================第227到240行流程设计器XML文档实时编辑功能代码的导入区(下图)点击Example01.gxl就可以进入XML编辑器=============================================================== org.jwfd.workflowDesigner.mainUI.UIComponents.MainJgraphinfoModule.java 用于显示和管理主流程设计窗口左下方的流程图节点实时信息(下图)org.jwfd.workflowDesigner.mainUI.UIComponents.MainTreeModule.javaJWFD流程设计器显示和管理流程的左边树形列表窗口功能类(下图)在org.jwfd.workflowDesigner.mainUI.UIComponents.MainTreeModule.java类里面的317-395行,这段代码是实现流程图提交入数据库中的实现代码段(下图-提交流程)org.jwfd.workflowDesigner.mainUI.UIComponents.MainWinMenu.javaJWFD流程设计器主菜单栏功能模块类(主窗口菜单栏目仅仅只有文件和关于属性有功能代码,其它都是空模块,由用户自行添加)org.jwfd.workflowDesigner.mainUI.UIComponents.MainWinStatusBar.javaJWFD流程设计器主窗口底部状态栏模块类(下图)org.jwfd.workflowDesigner.mainUI.UIComponents.MainWinToolBar.javaJWFD流程设计器窗口上部TOOLBAR功能模块类(下图)org.jwfd.workflowDesigner.mainUI.UIComponents.XmlEditUI.java流程XML代码与流程图同步编辑类(本类在MainJgraphModule.java中被调用)(下图)org.jwfd.workflowDesigner.UItools.NodeAttributeChangeDialog.javaJWFD流程设计器流程节点属性修改功能模块(在GraphEd类中调用的对流程拓扑图节点属性进行编辑的弹出窗口类, 修改图的节点ICON和名称,添加流程节点的嵌入条件公式)点击编辑条件公式,出现下面的界面,用户可以在这里面自定义嵌入公式这个界面所对应的代码是org.jwfd.workflowDesigner.UItools.SwingTools.ExpressEditor.java如果用户要自定义XML文档的附加属性,比如说JOIN等事项,请在org.jwfd.workflowDesigner.FLCLs.Gxl.JgraphGxlCodec.java这个类的第439行开始的encodeCondition()这个方法是我后面自定义添加的属性,用户可以自行添加任何附加的XML属性=================JWFD设计器MYSQL数据库模块类包==================================org.jwfd.workflowDesigner.UItools.Database.mysqlorg.jwfd.workflowDesigner.UItools.Database.mysql.MysqlDBconnection.javaJWFD流程系统MYSQL数据库连接配置功能模块(本类通过一个外部param.ini配置文件来连接MYSQL数据库)org.jwfd.workflowDesigner.UItools.Database.mysql.connectionUI.java本类用于流程设计器主菜单“文件”数据库管理“功能模块org.jwfd.workflowDesigner.UItools.Database.mysql.FlowsSqlControlModule.javaMYSQL数据库SQL原子操作方法类(本类是JWFD流程引擎算法的基础操作模块类,不同的数据库的SQL操作语句会有冲突)=================JWFD流程设计器XML(GXL)数据操作方法类包=============================org.jwfd.workflowDesigner.FLCLs.Gxl (GXL就是XML,只是文件后缀名不同而已,用户可以根据自己的需要修改为任何后缀名的文件)org.jwfd.workflowDesigner.FLCLs.Gxl.AbstractActionDefault.javaXML(GXL)文件操作接口类(未实现具体的功能)org.jwfd.workflowDesigner.FLCLs.Gxl.ConvertGraphToGxl.java调用本包中的JGraphGXLCodec类将绘制的流程图编码为XML(GXL)文件(本类的方法是其它操作主调用方法)org.jwfd.workflowDesigner.FLCLs.Gxl.ConvertGxlToGraph.java读取XML(GXL)文件并将其显示在JGRAPH工作区中org.jwfd.workflowDesigner.FLCLs.Gxl.GxlToDatabase.javaorg.jwfd.workflowDesigner.FLCLs.Gxl.ParserGxl.java将XML(GXL)文件的流程数据转换成MYSQL数据库中表数据的SQL操作代码类(上面两个类是联合使用的)====================================================org.jwfd.workflowDesigner.FLCLs.Gxl.JgraphGxlCodec.java将设计器设计出的流程图数据解码为XML(GXL)数据的关键操作类(为流程节点添加新的属性也需要在这里编辑,我修改的地方在第416-454行)==========================对流程设计器进行界面修饰的SWING组件包==========================org.jwfd.workflowDesigner.UItools.SwingToolsorg.jwfd.workflowDesigner.UItools.SwingTools.CellRender.java对流程设计器左边的流程树型列表进行修饰的类org.jwfd.workflowDesigner.UItools.SwingTools.CellRenderGINFO.java对流程设计器左边树型节点的ICON进行修饰的类org.jwfd.workflowDesigner.UItools.SwingTools.CloseTabIcon.javaorg.jwfd.workflowDesigner.UItools.SwingTools.JClosableTabbedPane.java(上述两个类)为每个打开的流程图工作区创建一个带关闭图标的TAB组件org.jwfd.workflowDesigner.UItools.SwingTools.ExpressEditor.javaJWFD流程设计器的节点嵌入式表达式编辑器的SWING界面模块org.jwfd.workflowDesigner.UItools.SwingTools.JTabbedPane1.java流程GXL(XML)代码与流程图同步显示和编辑的按键类(关联操作类为org.jwfd.workflowDesigner.mainUI.UIConponents 下面的XmlEditUI.java)org.jwfd.workflowDesigner.UItools.SwingTools.ProgressBarModule.javaJWFD流程设计器中提交流程图入库中显示的进度控制条SWING模块erTreeModule.java从数据库中提取用户和部门信息生成一棵树(v0.94版本以后已经未使用)===============================嵌入式公式引擎模块==============================================org.jwfd.workflowEngines.GrammarAnalysisorg.jwfd.workflowEngines.GrammarAnalysis.GrammarInterface.java嵌入式脚本公式引擎的主接口工作类,另外三个类均是由antlr的结构文件自动生成的用于处理节点嵌入公式(antrl的语法文件在JWFD官网上面有下载),如果需要自己修改嵌入公式结构,就需要这个结构文档===========JWFD流程引擎模块包===================org.jwfd.workflowEnginesv0.94引擎的流程运行控制类(在v0.96版本中已经被另外一个类代替)org.jwfd.workflowEngines.GXLFlowControlModule.javav0.96引擎的流程运行控制类org.jwfd.workflowEngines.Algorithm.TopologyAnalysis.java上面两个版本的引擎类均依赖org.jwfd.workflowDesigner.UItools.Database.mysql.FlowsSqlControlModul e 这个类中的操作来实现流程引擎的功能=================================JWFD工作流简易调试工具=============================提示:新放出来的JWFDv0.96.3的开发包里面,这个界面已经被修改,但是还未最终完成,请大家注意org.jwfd.workflowClients.FlowClient.java该类是对流程进行数据调试验证而设计的SWING界面(处理按钮表示对节点进行操作,该操作完成之后,就进入到下一个节点)运行之前请在该类第181行处注释的运行的main方法=================================JWFD流程引擎总体结构==================================实际上JWFD的流程引擎分为三个层次,第一层次是流程的邻接表数据结构(参考JWFD数据库结构)第二层次是操作第一层次数据结构的SQL操作方法集合FlowsSqlControlModule第三层次是引擎控制算法TopologyAnalysis第二部分JWFD开源工作流二次开发包工作流引擎和基础SQL操作API函数说明下面是FlowsSqlControlModule类的SQL原子操作的详细API说明(需要结合JWFD v0.96数据库结构理解)如果大家觉得下面的这些API方法不足以操控你们需要的工作流,那么完全可以根据JWFDv.0.96版本的数据库结构,自己实现一组自己的SQL-API方法,用很简单的手段来扩展自己的工作流系统的功能=================================FlowsSqlControlModule类API====================================FlowsSqlControlModule类是下图中表示的流程引擎层次结构的第二层次,这个类包含了全部的流程数据结构SQL操作的原子操作,这个类中的方法被流程引擎的控制器TopologyAnalysis类中的方法所调用,共同组成了JWFD流程引擎/*public boolean start_flow(String graphid, String flow_startup_time) {}设计说明:启动流程,首先是修改流程管理表的flow_status状态值=1,同时写入当期启动时间,参数是流程ID和流程启动时间然后修改流程节点主表的流程对应首节点的状态值=1,这才使流程数据库中的这条流程彻底启动*//* public boolean end_flow(String graphid) {}* SQL操作用途:将流程管理表flow_manager的流程状态字段flow_status值修改为3,表示流程正处于终止运行状态中* 说明:flow_manager表是系统对流程进行管理的总体控制表,表中flow_status字段是对流程整体状态进行管理的子字段(0,1,2三个状态0状态表示流程未运行,1表示正在运行,2表示暂停运行,3表示终止运行)* 版本说明:v0.92版本设计并在以后的版本中使用* *//*public boolean suspend_flow(String graphid) {}* SQL操作用途:将流程管理表flow_manager的流程状态字段flow_status值修改为2,表示流程正处于挂起(暂停)状态中* 说明:flow_manager表是系统对流程进行管理的总体控制表,表中flow_status字段是对流程整体状态进行管理的子字段(0,1,2三个状态* 0状态表示流程未运行,1表示正在运行,2表示暂停运行,3表示终止运行)* 版本说明:v0.92版本设计并在以后的版本中使用* *//*public void restart_flow(String graphid) {}* SQL操作用途:未加入具体代码,请自行修改本操作* 说明:设计目标为流程引擎提供一个对流程实例进行重启动restart的SQL操作方法* 版本说明:v0.92版本设计但未使用**//* public boolean set_active_step(String step_id, String graph_id) {}* SQL操作用途: 将指定step_id值的流程节点的处理状态字段(is_active)修改为1(1值表示节点的状态为处理正在进行中) * 说明:在流程引擎org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的回退处理方法rollback()和SAN()方法中调用本方法* 版本说明:v0.96版本设计并使用,本方法和set_noactived_step(),set_active_step()方法是姊妹方法* *//*public boolean set_overactived_step(String step_id, String graph_id) {}* SQL操作用途: 将指定step_id值的流程节点的处理状态字段(is_active)修改为2(2值表示节点的状态为处理已经完成) * 说明:在流程引擎org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的回退处理方法rollback()中调用本方法* 版本说明:v0.96版本设计并使用,本方法和set_noactived_step(),set_active_step()方法是姊妹方法* *//* public boolean set_noactived_step(String step_id, String graph_id) {}* SQL操作用途: 将指定step_id值的流程节点的处理状态字段(is_active)修改为0(0值表示节点的状态是尚未被处理) * 说明:在流程引擎org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的回退处理方法rollback()中调用本方法* 版本说明:v0.96版本设计并使用,本方法和set_overactived_step(),set_active_step()方法是姊妹方法* *//* public boolean is_overactived_steps(String step_id, String graph_id) {}* SQL操作用途:如果流程图中某节点的字段is_active(是否处于处理状态)属性值为0(属性值为2表示节点处理结束),则返回ture,否则为false* 说明:在org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的SAN方法中用于判断节点是否处于处理结束的状态* 版本说明:v0.96版本设计并使用,本方法和is_notactived_steps()方法是姊妹方法* *//*public boolean is_notactived_steps(String step_id, String graph_id) {}* SQL操作用途:如果流程图中某节点的字段is_active(是否处于处理状态)属性值为0(属性值为0表示节点未被处理),则返回ture,否则为false* 说明:在org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的SAN方法中用于判断节点是否处于处理状态* 版本说明:v0.96版本设计并使用,本方法和is_overactived_steps()和is_actived_steps()方法是姊妹方法* *//*public boolean is_actived_steps(String step_id, String graph_id) {}* SQL操作用途:判断流程节点是否处于处理中状态(通过判断该节点的is_active字段值是否为1,is_active是v0.96新增加字段,该字段为1表示节点处于处理状态,既正在处理状态中,字段为0表示该节点目前未被处理,可以通过扩展该字段的值来扩展节点处理状态)* 说明:在org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中流程运行控制器SAN方法中使用,用于判断节点是否处于处理状态* 版本说明:v0.96版本设计并使用,本方法和is_overactived_steps()和is_notactived_steps()方法是姊妹方法* *//* public String return_FristStep(String graph_id) {}* SQL操作用途: 通过查询每个流程图节点step_name属性值为"工作开始"的操作来获取该流程图第一个节点* 说明:JWFD设计器有开始节点的设置,标志是step_name属性值为"工作开始",本操作通过查询step_name属性值为"工作开始"的节点ID来获取流程图第一个节点的ID,如果流程图设计过程中未设置开始节点,则本SQL操作无法发挥作用* 版本说明:v0.92版本设计,但是各个版本均为使用* *//* public String return_LastStep(String graph_id) {}* SQL操作用途: 通过查询每个流程图节点step_name属性值为"工作结束"的操作来获取该流程图最后一个节点* 说明:JWFD设计器有结束节点的设置,标志是step_name属性值为"工作结束",本操作通过查询step_name属性值为"工作结束"的节点ID来获取流程图最后一个节点的ID,如果流程图设计过程中未设置结束节点,则本SQL操作无法发挥作用* 版本说明:v0.92版本设计,但是各个版本均为使用* *//* public String return_nextStep(String step_id, String graph_id) {}* SQL操作用途: 通过传入本节点ID值,查询与该节点相邻的后驱(下一个)节点ID** 说明:本原子操作是流程引擎的基本原子操作,目的是用来进行流程引擎的分支和汇聚判断,在v0.96版本的* org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类* 和v0.94版本中的org.jwfd.workflowEngines.GXLFlowControlModule类中均有大量使用* 版本说明:版本说明:v0.92设计,所有版本均使用,属于关键原子操作* *//* public String return_preStep(String step_id, String graph_id) {}* SQL操作用途: 通过传入本节点ID值,查询与该节点相邻的前驱(前一个)节点ID** 说明:本原子操作是流程引擎的基本原子操作,目的是用来进行流程引擎的分支和汇聚判断,在v0.96版本的* org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类* 和v0.94版本中的org.jwfd.workflowEngines.GXLFlowControlModule类中均有大量使用:* 版本说明:版本说明:v0.92设计,所有版本均使用,属于关键原子操作* *//* public java.util.ArrayList return_nextSteps(String graph_id, String step_id) {}* SQL操作用途:使用arraylist数组来保存根据传入的step_id查询到得该节点的后驱(后相邻)N个节点** 说明:本原子操作是流程引擎的基本原子操作,目的是用来进行流程引擎的分支和汇聚判断,在v0.96版本的* org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类* 和v0.94版本中的org.jwfd.workflowEngines.GXLFlowControlModule类中均有大量使用** 版本说明:v0.92设计,所有版本均使用,属于关键原子操作* *//*public java.util.ArrayList return_preSteps(String graph_id, String step_id) {}* SQL操作用途:使用arraylist数组来保存根据传入的step_id查询到得该节点的前驱(前相邻)N个节点** 说明:本原子操作是流程引擎的基本操作,目的是用来进行流程引擎的分支和汇聚判断,在v0.96版本的* org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类* 和v0.94版本中的org.jwfd.workflowEngines.GXLFlowControlModule类中均有大量使用** 版本说明:v0.92设计,所有版本均使用,属于关键原子操作* *//* public String Result_Return_NextStep(String Step_id, String graph_id, int status) {}* SQL操作用途:未设计完成* 说明:根据条件返回该点的下一个节点ID* 版本说明:未设计完成* *//* public String get_stepname(String stepid, String graphid) {}* SQL操作用途:通过节点的ID来获取节点的名称,(step_id是流程节点主表step_main的节点ID号,是JWFD引擎中使用率非常高的一个字段值)* 说明:这是一个常规节点查询操作,通常是进行其他流程节点信息查询的关联操作* 版本说明:在v0.94之前已经存在,v0.96版本未使用* *//* public String get_stepid(String stepname, String graphid) {}* SQL操作用途:通过节点的名称来获取节点的ID号,(step_name是流程节点主表step_main的节点名字段) * 说明:这是一个常规节点查询操作,通常是进行其他流程节点信息查询的关联操作* 版本说明:在v0.94之前已经存在,v0.96版本未使用* *//* public boolean set_rollback_step(String step_id,String graphid){}* SQL操作用途:设置该流程节点使其处于回退状态(rollback_status是step_main表中表示节点回退状态的字段该字段为1表示节点处于回退状态中,* 该字段为0,表示节点没有处于回退状态中)* 说明:通过设置流程节点的回退状态标志位(rollback_status)来对流程的某个节点的回退进行处理* 版本说明:rollback_status字段为v0.96数据库系统设计,本方法未在v0.96版本中使用,仅为备用方法* *//* public boolean is_rollback_step(String step_id,String graphid){}* SQL操作用途:判断该流程节点是否处于回退状态(rollback_status是step_main表中表示节点回退状态的字段该字段为1表示节点处于回退状态中,* 该字段为0,表示节点没有处于回退状态中)* 说明:通过获得流程节点的回退状态标志位(rollback_status)来对流程的某个节点的回退进行处理* 版本说明:rollback_status字段为v0.96数据库系统设计,本方法未在v0.96版本中使用,仅为备用方法* *//* public int get_actived_times(String step_id, String graph_id) {}* SQL操作用途:获取指定流程节点的处理次数(actioned_time)* 说明:用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中流程运行控制器SAN方法中* 的访问次数和处理次数和回退次数之和的相等的逻辑判断* 版本说明:本方法v0.96设计并使用,条件分支与汇聚处理逻辑专用方法,actioned_time字段为v0.96版本数据库专用* *//* public boolean cf_step_path(String step_id,String graphid){}* SQL操作用途:通过设置边控制(edge_control)表的边属性字段(prop)为false,使该流程路径被中断* 说明:在org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的cf_SHOSNP方法使用本操作,目的是中断剩余分支点路径* 版本说明:v0.96设计并使用,条件分支与汇聚处理逻辑专用方法* *//* public boolean set_JAP(String step_id,String graphid,int j){}* SQL操作用途:设置流程节点数据库中记录的jap_num字段数据* 说明:通过设置jap_num字段数据,让流程控制器能够设置流程节点的汇聚次数* 版本说明:v0.96设计但并未使用,条件分支与汇聚处理逻辑专用方法* *//* public int get_JAP(String step_id,String graphid){}* SQL操作用途:获取流程节点数据表中记录的jap_num字段数据* 说明:jap_num是v0.96数据库节点主表(step_main)新增加的一个字段,目的是为记录条件汇聚终止剩余节点数量,本方法用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的join_equals和join_less方法* 版本说明:v0.96设计并使用,条件分支与汇聚处理逻辑专用方法* *//* public void Set_Actioned_time(String step_id, String graph_id,int j) {}* SQL操作用途:对流程图的某个指定节点(step_id)设置其处理次数(actioned_time)为设定值J* 说明:用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的单步回退处理方法rollback()* 版本说明:v0.96设计并使用,回退逻辑方法专用* *//* public void Reset_visited(String graph_id) {}* SQL操作用途:对一个流程图的所有节点访问状态全部清零* 说明:在对流程图进行运行的时候,将其访问状态全部清零使得该流程图重新进入初始零状态* 版本说明:v0.94设计,所有版本中未使用,主要用于测试流程* *//*行为代码未设计初衷是为让流程控制器中对节点回退操作有一个有效地原子操作方法*/public void Reset_lastStep(int Step, String graph_id) {}/* public void set_visited_time(String step_id, String graph_id, int j) {}* SQL操作用途:将节点访问次数设置为状态指定值(int j),表示节点已经被访问过J次* 说明:在org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中流程运行控制器san()方法中使用,用于流程节点状态控制* 版本说明:v0.96设计并使用,取代v0.94版本的set_visited()方法* *//* public void set_visited(String step_id, String graph_id) {}* SQL操作用途:将节点访问次数设置为状态"1",表示节点已经被访问过一次* 说明:在org.jwfd.workflowEngines.GXLFlowControlModule类中流程运行控制器dfs()方法中使用,用于流程节点状态控制* 版本说明:v0.94版本使用,v0.96版本中已经被set_visited_time()方法替代* *//*行为代码未设计初衷是为让流程中节点的访问状态被清空,准备用于流程回退和其它状态控制*/public void Reset_visited(String Step, String graph_id) {}/*public boolean get_visited(String step_id, String graph_id) {}* SQL操作用途:返回节点是否已经被访问的逻辑判断值(true,false)* 说明:通过获取这个逻辑值,可以让流程控制器主方法(SAN方法)进行分支和汇聚,访问次数的控制,是一个关键操作方法, 详细用法请参考org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类说明* 版本说明:v0.94开始设计并使用,v0.96版本同样使用,在以后的版本中也要使用* *//* public int get_visited_times(String step_id, String graph_id) {}* SQL操作用途:通过传入节点ID,获得该节点到目前为止的访问次数(int vi)** 说明:在TopologyAnalysis类中很多重要方法都要使用本方法,为流程控制器提供分支和汇聚节点的访问控制数据, 很重要的基础操作详细用法请参考org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类说明* 版本说明:v0.94开始设计并使用,v0.96版本同样使用,在以后的版本中也要使用* *//* public boolean checkuser(String uname, String pass) {}* SQL操作用途:通过用户名和密码,获取登录许可信息* 说明:本方法用于JWFD早期的流程设计器(flow designer)的登录控制* 版本说明:v0.92版本之前使用,v0.94,v0.96版本停止使用** *//* public String get_condition(String step_id, String graph_id) {}* SQL操作用途:通过传入的边ID(edge_id)来获取流程连接边数据表中该连接边的逻辑条件属性值(true,false)* 说明:本方法用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中ConditionDfs方法,为条件分支逻辑控制器方法专用操作* 版本说明:v0.96版本专用** *//* public String get_prop(String edge_id, String graph_id) {}* SQL操作用途:通过传入的边ID(edge_id)来获取流程连接边数据表中该连接边的附加属性* 说明:本方法用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中ConditionDfs方法,为条件分支逻辑控制器方法专用操作* 版本说明:v0.96版本专用** *//* public java.util.ArrayList return_edges(String step_id, String graph_id) {}* SQL操作用途:通过传入的边ID(edge_id)来获取边(连接线)的ID值* 说明:本方法用于org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中ConditionDfs方法,为条件分支逻辑控制器方法专用操作* 版本说明:v0.96版本专用* *//* public String return_tostep(String edge_id, String graph_id) {}* SQL操作用途:获取边(连接线)的终端节点tostep* 说明:用于流程控制器-条件分支逻辑控制器方法(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中ConditionDfs方法)* 版本说明:v0.96版本专用* *//* public String return_splitstep(String edge_id, String graph_id) {}* SQL操作用途:未定义的空方法* 设计目的-获取流程的分支节点,用于流程控制器(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中SAN方法)* 版本说明:v0.96和v0.94版本均未使用,用户可以自定义扩展SQL操作** *//* public void set_join_time(String step_id, String graph_id, int j) {}* SQL操作用途:设置流程节点的汇聚次数为指定值* 说明:设计本方法的初衷是为了通过一个数据表值来设置流程节点的汇聚访问次数* 版本说明:v0.96版本中,用于流程控制器控制汇聚过程(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中SAN方法),该版本未使用本方法* *//* public int get_join_times(String step_id, String graph_id) {}SQL操作用途:返回流程节点的汇聚访问次数说明:返回流程节点的汇聚访问次数,设计本方法的初衷是为了通过一个数据表值来获取流程节点的汇聚访问次数版本说明:v0.96版本中,用于流程控制器控制汇聚过程(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中SAN 方法)该版本未使用本方法*//* public void set_rollback_time(String step_id, String graph_id, int j) {}* SQL操作用途:设置流程的回退次数来控制流程的回退运行过程说明:本方法用于v0.96中流程控制器(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的rollback方法) 通过设置流程的回退次数来控制流程的回退运行过程版本说明:v0.96版本专用*//* public int get_rollback_times(String step_id, String graph_id) {}* SQL操作用途:判断流程的回退次数来控制流程的回退运行过程* 说明:本方法用于v0.96中流程控制器(org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的rollback方法)通过判断流程的回退次数来控制流程的回退运行过程* 版本说明:v0.96版本专用*//* public boolean is_edge_action(String edge_id,String graph_id){}SQL操作用途:通过获得流程的边和流程图ID和状态值,判断线段是否已经被处理(判定边是否已经运行过?)说明:用于流程系统在运行过程中判定流程的状态v0.96版本设计,但该版本并未使用版本说明:v0.96版本设计,但未使用*//*public String NodeOperStrategy(String step_id,String graph_id){}SQL操作用途:判断流程节点的操作属性是人工,自动还是半自动方式说明:与流程控制器的状态机类进行关联,与消息类WFStatusMessage()进行关联版本说明:v0.96版本设计,但未使用*/============================================================================================= 本类中开始的几个方法暂时没有使用,还未添加详细的API说明。
工作流引擎说明书
工作流引擎设计说明书文档版本记录目录1概述..................................................................................................................... - 5 -1.1文档目的 (5)1.2术语及缩略语 (5)1.3参考资料 (5)2工作流引擎的设计架构 (6)2.1工作流引擎的组件的总体架构 (7)2.2流程引擎内核 (8)2.2.1流程定义 (8)2.2.2流程模型 (8)2.2.2.1流程的起点和终点模型 (8)2.2.2.3流程的激活模型 (9)2.2.2.3流程的流转模型 (9)2.3数据访问层 (13)2.3.1数据模型定义 (13)2.3.2流程引擎中对象模型和数据模型的对应关系 (13)2.4扩展接口 (15)2.4.1条件扩展接口 (15)2.4.2人员查找扩展接口 (15)2.4.3事件操作扩展接口 (15)2.4.3流程插件 (16)2.5流程引擎对外接口(API) (17)2.5.1IP ROCESS S ERVICE接口定义 (17)2.5.2IT ASK S ERVICE接口定义 (18)3.流程应用支持层 (22)3.1应用框架 (22)3.1.1页面控制逻辑 (22)3.1.1.1流程起草控制逻辑 (24)3.1.1.2流程待办/已办显示控制逻辑 (24)3.1.1.3流程审批提交控制逻辑 (25)3.1.2流程引擎整合 (25)3.2流程公共应用组件 (28)3.2.1流程起草时的人员过滤操作P ROCESS R OLE F ILTER A CTION (28)3.2.2流程起草操作P ROCESS S TART A CTION (28)3.2.3流程待办显示(D ISPATCH)操作P ROCESS D ISPATCH A CTION (28)3.2.4流程待办列表显示操作P ROCESS L IST A CTION (29)3.2.5流程已办显示(D ISPATCH)操作C OMPLETED D ISPATCH A CTION (29)3.2.6流程已办列表显示操作C OMPLETED A LL L IST A CTION (29)3.2.7流程草稿列表显示操作P ROCESS D RAFT L IST A CTION (29)3.2.8流程提交显示选择路径操作P ROCESS C OMMON S UBMIT A CTION (30)3.2.9流程跟踪信息显示操作P ROCESS C OMMON T RACE A CTION (30)3.2.10流程待阅显示(D ISPATCH)操作R EADER D ISPATCH A CTION (30)3.2.11流程已阅阅显示(D ISPATCH)操作R EADER D ISPATCH A CTION (30)1概述1.1文档目的《设计说明书》阐述工作流引擎的设计架构以及对外的服务功能《设计说明书》要达到如下一些目标:●阐述流程的定义●阐述流程的对象模型●阐述流程的调度执行●阐述流程服务接口1.2术语及缩略语工作流:工作流是业务流程的计算机化或自动化过程。
工作流引擎的设计说明书
软件设计说明书1、作业要求2、系统实现的功能和结果展示2.1 完成的主要功能(1)使用jgraph设计了工作流编辑器。
图形化的实现了工作流的动态创建、流程的执行过程,采用树形结构动态的显示了工作流列表。
(2)采用java的线程机制实现了工作流的任务的并发执行。
(3)工作流引擎的设计:通过jgraph创建一个工作流图,采用图的广度优先搜索算法(BFS)完成对图的遍历和各个任务节点在图中的层次。
工作流执行的时候,根据任务节点的序列和所处的层次,创建相应的任务线程。
位于同一层次的任务节点并发执行,只有当上一层次的任务全部执行结束以后,下一层次的任务节点才可以执行。
2.2 程序运行结果显示2.2.1 工作流编辑器主界面运行程序,显示工作流编辑器主界面,如上图所示。
在画板中默认有两个节点:工作开始和工作结束,是虚节点,表示流程的开始和结束,并不执行实际的操作。
2.2.2 新建一个流程(1)节点的创建。
在主界面中的工具箱中,有一个添加节点控件,单击便会在画板中生成一个节点,默认的名称是节点n。
创建4个节点,通过拖拽放到合适的位置中。
如下图所示。
(2)边的创建。
创建边的时候,要先选中需要建立边的两个节点,先选中的为边的source,后选中的为边的target。
先选中节点“工作开始”,然后按住shift键选中“节点1”,当这两个节点都选中的时候,单击工具箱中的添加边控件,此时在这两个节点之间便生成了一条边。
如下图所示:采用此方法,创建边,建立一个简单的分支流程图,如下图所示:2.2.3 保存流程图当创建完上面的流程图以后,单击菜单栏中的“保存”按钮。
弹出如下界面,在其中输入流程的相关信息,流程的名称是唯一的,否则会弹出重名对话框。
当点击保存以后,执行图的解析,将图的节点和边的信息保存在数据库中。
如下:在流程表workflows中:id是采用序列+触发器设计的自动加1在节点表nodes中,保存了节点的名称,状态、位置、图标等信息,如下:在边表edges中,保存了编的名称,位置,编的起始节点id和结束节点id等信息,如下:2.2.4 流程的显示当保存一个流程的信息到数据库中以后,会在界面的树形结构中显示新创建的流程节点。
JWFDv0.96.3开源工作流系统-简易使用说明
JWFD v0.96.3 开源工作流系统简易使用说明By comsci 四川.成都 2013-6.3(第五次编辑)email: comsci@ QQ: 784092877QQ 群:7428804 JWFD 是comsci 个人开发和维护的,不是由商业企业和组织开发和维护的,JWFD 的开发和维护没有任何商业和经济上的利益及其规划 , JWFD 也没有申请任何专利,请大家放心使用JWFD 是由我在2004年开始设计并开发的一套包括基于JGRAPH 的流程设计器和建立在图形自定义数据结构基础上面的带有引擎算法的工作流软件系统,在随后的几年中,由于工作和其它一些原因,对JWFD 的更新一直都停留在局部BUG 的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在08和09年在完成某项目的机会,对JWFD 在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了数个增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具(基于ANTLR3.0开发,与西安协同的产品类似,脚本功能可能要少些,但是由于antlr 生成的脚本解析模块无法获取数据运算的结果,导致一系列的工作无法继续下去,下一步我考虑使用其它脚本解析模块替换原有的ANTLR 模块),增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,由于做了这些改进,JWFD 的应用范围和功能大大增加了(但是仍然有很多问题),但是由于增加了那么多重要功能,也导致系统的结构更加复杂,代码量更大了,这样一来也使学习成本增加了不少,为了更加便于朋友们了解和应用JWFD ,因此我把JWFD 的文档做得更加详细些,对各种结构和算法做出更加详细和清晰地说明.........这样可以帮助大家更好的理解JWFD 的设计思想JWFD 系统总体结构图(图1,粗体字模块表示其为JWFD 的核心部分) 工作流设计器---节点属性编辑器脚本公式设计器 XML 数据解析 脚本公式数据 关系型数据库(mysql,oracle)生成xml 生成 自定义表单设计器 表单数据生成语法解析模块 SQL 原子操作集合 权限/表单模块JWFD 流程运行控制器模块二次开发接口 流程运行监控台 WEB 操作接口JWFD工作流系统二次开发包的简易配置过程(不涉及嵌入式公式模块的使用)1:安装MYSQL过程说明建议下载mysql-5.0.22-win32这个版本的MYSQL安装包,最好使用windows XP系统或者win2003系统做开发平台,这个版本的MYSQL和mysql-front工具兼容性最好,不会出现一些奇怪的兼容性问题其他安装过程我就不详细介绍了,重点说一下这些地方Service Name 你可以修改成任何字符串但是下面的那个勾选一定要选择如果你要在字符界面里面操作MYSQL,就需要把Include Bin Directory in Windows PATH选择上如果所有的安装过程都正确,全部都打上蓝色的钩,就一切正常了,选择Finish 完成最好在安装完成MSYQL之后,重启一次计算机,然后检查一下XP的系统服务里面,MYSQL 服务是否被自动启动了,有些安装过程虽然没有提示一下,在安装过程中,需要设置系统用户名和用户密码,这两个参数一定要记住哦!!2:使用Mysql-front导入JWFD数据库的过程说明在JWFD博客园官方下载里面下载MySQL-Front_Setup.exe这个文件,然后安装,中间没有什么设置的,只是在连接数据库的配置上面要填写几个连接字符串,如下图选择新建或者编辑以及存在的连接配置,出现下面的界面在一般这里,填写名称是localhost 你的本机地址也可以127.0.0.1----------------------------------------------------------------------------------------------------------------------然后在”连接”选项里面,一般也按照上面的图那样填写,字符集选择utf-8 然后选择确定在注册里面,用户名和密码都是你刚才安装mysql的时候,设置的,这里就填上,数据库可以不选择然后点击确定和打开,就出现下面的界面这个时候,选择帮助(H),对mysql-front进行注册,输入下载的mysql-front压缩包里面的那个注册号文件里面的注册字符串,全部拷贝过来,就可以注册了,以后mysql-front就可以不受限制的使用了用MYSQL-FRONT打开JWFDv0.96的数据库建库SQL文件,然后执行本SQL,就可以在MYSQL里面新建立一个JWFD的数据库结构,当完成这个工作之后,使用JWFD开发包设计的流程图就可以提交进入数据库,并为启动引擎做好数据准备了如上图,执行SQL之后,看见出现一个jwfd的数据库列表就表示JWFD的数据库结构已经建立好了3:运行JWFD之前的一些配置说明--------------------------------------------------------------------------------------------------------------------- 在ECLIPSE开发平台里面(IBM公司出品的一种开源软件开发IDE平台)里面导入JWFD v0.96.3的开发包(提示:我在和用户交流过程中,曾经遇到有用户使用某种的JDK1.6版本导致JWFD运行的时候变得非常缓慢的BUG,尤其是在设计流程图的过程中,连接节点的工作无法进行,如果大家遇到这个问题,请下载2007年之前出的JDK1.6版本(JDK1.5也可以),或者加我QQ:784092877,我把我用的版本发给你们)在启动MYSQL数据库的服务之前,请先使用MYSQL的管理工具mysql-front或者其它工具将JWFD数据库文档压缩包中的”jwfdv0.96数据库.sql“文件运行一次,创建JWFD的数据库,(默认的JWFD的数据库名为jwfd)完成这步之后,大家可以在已经导入的JWFDv0.96.3开发包目录下面找到param.ini文件,打开这个文件,修改里面的MYSQL数据库配置参数原始内容是如下,一般在本机测试JWFD的用户仅需要根据自己的数据库设置,修改用户名User和登录密码Password默认的数据库主机名MysqlHostName为localhost(本地主机),如果需要连接远程的服务器,请将localhost修改为远程服务器的IP地址或者域名默认的数据库连接驱动程序包driver为org.gjt.mm.mysql.Driver,这个JA V A的MYSQL连接驱动包已经包含在JWFD开发包的LIB目录下面,这个驱动版本是针对MYSQL5.0以上版本的,如果是MYSQL3.0或者更低的版本的,可能需要旧版本MYSQL的JDBC驱动包默认的url连接字符串jdbc:mysql://localhost:3306/jwfd 如果MYSQL所在的机器不是本机,请将localhost修改为MYSQL所在机器的IP地址,端口都是3306,保持不变,如果是远程服务器,需要打开防火墙等安全设置,如果用户在导入JWFD的数据库的时候,修改了JWFD 得数据库的名称,需要将jwfd修改为已经被更改的数据库名,例如jdbc:mysql//192.168.1.143:3306/test##请修改自己的MYSQL数据库配置####---------------mysql------------------#MysqlHostName=localhostdriver=org.gjt.mm.mysql.Driverurl=jdbc:mysql://localhost:3306/jwfd?useUnicode=true&characterEncoding=utf-8User=rootPassword=123#---------------mysql------------------#如何把JWFDv0.96开源工作流二次开发包导入Elipse平台中?在ELIPSE开发平台下导入JWFDv0.96二次开发包,选择File,选择New,选择Java Project 出现下面的界面(每个ECLIPSE版本的这个界面估计有所不同),输入你要建立的项目名称比如newworkflow ,然后在Contents里面选择第二项,Create project from existing source(用已有代码创建项目),把你下载的JWFD二次开发包解压缩,存放在磁盘的某个文件夹下面,比如说D:\workflow,那么下面的界面里面,你就选择这个目录(点击Browse),选择JWFD的文件夹当选择JWFD的目录这个工作完成之后,这个界面的最下面的Next>这个按钮就变得可用了点击Next>,然后出现下面的界面直接点击Finish,这样在左边的项目列表中就会出现你刚才新建的这个JWFD二次开发项目了,如果一切正常的话,很快你就可以看到JWFD的图形界面了启动运行JWFD运行org.jwfd.workflowDesigner.mainUI.MainLoginEx.java之后(这个java类文件就在刚才我们导入的项目src包里面,如下图)出现JWFD的登录界面,不同的版本启动界面可能会不一样选中这个JA V A文件,然后点击中间这个白色三角形的图标,如果前面的配置正确,那么就应该出现下面的界面提示:这个界面和下面的设计器界面都可以任意修改,大家可以用自己的LOGO替换JWFD的图标,使JWFD变成自己的工作流平台,启动界面也可以做成需要输入用户名和密码的那种权限控制模式的界面,注意JWFD是C/S程序,如果需要WEB版本的设计器,可以用其它第三方的设计器自己DIY一个WEB版本的设计器,然后利用jwfd的数据库结构来构造一个用户自定义工作流系统点击登录之后,进入流程设计器的界面(如下图)(这个设计器的界面UI模块的代码说明在JWFD开源工作流系统API和二次开发说明文档中有介绍,如果大家觉得还有什么不清楚的地方,请给我发邮件)4:设计一个流程图并提交进入数据库(数据库结构已经建立起来)的简易说明当你设计好一个流程图之后,点击-作图区上面的按钮-保存当前流程图,然后出现一个输入窗体(使用流程图的设计工具栏设计流程图的说明在本文档的后半部)启动程序按钮输入你新建的流程图的名称点确定之后就在未提交工作流列表中出现你刚才保存的这个流程图,如下图,用鼠标右键点击这个流程图名称,会出现一个列表,选择第一项提交流程进入数据库这个按钮点击之后,出现下面的提示,表示你这个流程图已经成功的被提交进入数据库中了这个时候,你可以用mysql-front来查看一下JWFD的数据库中是否已经保存了刚才这个流程图=================================================================打开mysql-front 连接数据库选择数据浏览器,就可以看见刚才提交进入数据库的流程图数据了当你完成这个步骤之后,就可以调用JWFD的流程数据操作API和流程引擎-自动运行控制器,来实现自己的流程客户端了,这些API的说明请参考下面的文档,我将继续完善JWFD 的二次开发文档和说明,并编写用JWFD开发出一个具体的流程应用的说明文档。
工作流引擎的设计与实现
工作流引擎的设计与实现1.引言随着企业业务处理的复杂性与数据量增大,工作流引擎已成为管理与处理企业级业务的核心技术之一。
在各大互联网公司中,工作流引擎已广泛应用于业务流程自动化、流程优化、审核管理等领域。
通过对工作流引擎的研究,本文旨在探讨工作流引擎的设计与实现。
2.工作流引擎概述工作流引擎是一个处理、管理和监视任务的计算机系统。
其包含的工作流管理系统(Workflow Management System,WMS)提供了全面的业务流程管理能力,可以通过定义和控制业务流程的任务、行为和数据,使得被管理的业务流程更为规范化、透明化和优化化。
通过定义和编排业务流程模型,工作流引擎可以实现高度定制化的任务执行。
同时,工作流引擎还具备自适应与灵活的特性,能够自动识别出任务的优先级,并可根据任务的优先级及相关属性,作出合适的调度和执行决策。
工作流引擎通过任务的流转和自动化处理,提升业务的效率与准确性,以及加强了业务可观性,使业务控制变得更加智能化和可预测。
3.工作流引擎原理工作流引擎的本质是一个状态机。
在状态机中,每个状态都代表业务流程中的一个阶段,状态之间的转移代表业务流程的转换,任务被分配到不同的状态机阶段,在每个阶段的状态中执行不同的业务处理,以完成整个业务流程。
同时,状态机还会在状态转换的同时触发执行相关的事件或任务,以驱动整个流程向前发展。
4.工作流引擎设计工作流引擎的设计应该从业务流程的需求出发,根据业务流程中任务和行为定义出抽象状态机,再通过策略、规则、算法等方式定义出不同状态的优先级和状态转移的决策规则。
事实上,工作流引擎的设计需要考虑到众多的复杂问题,如流程调度、任务计划、任务并发、异常处理、任务可视化和监控等。
因此,工作流引擎的设计必须考虑生命周期、模型、任务分层、任务优先级、任务理解和自动化级别等因素。
5.工作流引擎实现工作流引擎的实现需要同时考虑到效率和可靠性的问题。
在开发过程中,需要借助一些技术和框架,使得开发人员能够更好地实现工作流引擎,实现较高的可靠性成本效益比。
工作流引擎流程产品介绍开发实施
工作流引擎流程产品介绍开发实施首先是需求分析阶段。
在这个阶段,产品团队需要与客户充分沟通,理解客户的具体需求和业务流程。
通过与客户的交流,产品团队能够明确工作流引擎的功能需求和用户需求。
在需求分析阶段,产品团队还可以提供一些专业建议,帮助客户优化工作流程,提高业务效率。
接下来是设计阶段。
在这个阶段,产品团队会根据需求分析阶段的结果,进行系统的功能设计和用户界面设计。
功能设计主要包括工作流程的创建、任务分配、通知提醒、数据交互和决策支持等方面。
用户界面设计要注重用户友好性和操作便捷性。
然后是开发阶段。
在这个阶段,开发团队会根据设计阶段的结果,进行软件编码、测试和调试等工作。
开发团队需要按照设计规范和标准进行开发,确保软件的稳定性和可靠性。
紧接着是测试阶段。
在这个阶段,测试团队会对工作流引擎进行全面的测试和验证工作。
测试团队会使用各种测试方法,包括功能测试、性能测试和安全测试等,检查工作流引擎的各项功能是否符合需求,并保证工作流引擎的稳定性和安全性。
然后是使用培训阶段。
在这个阶段,产品团队会对客户进行工作流引擎的使用培训。
培训内容主要包括系统的基本操作、工作流程的创建和管理、任务的分配和跟踪等。
通过培训,客户能够熟练掌握工作流引擎的使用方法,提高工作效率。
最后是上线阶段。
在这个阶段,产品团队会将工作流引擎部署到客户的服务器上,并进行系统的上线和运行。
在上线后,产品团队还会进行一段时间的跟踪和维护工作,确保工作流引擎的正常运行和客户的满意度。
总而言之,工作流引擎流程产品的开发实施是一个复杂而重要的过程。
通过充分的需求分析、设计、开发、测试、使用培训和上线等步骤,可以为客户提供一个功能强大且易于使用的工作流引擎,帮助组织优化和自动化业务流程,提高工作效率和质量。
工作流引擎介绍,工作流引擎技术架构
—— 工业化的流程部件
01 产品介绍 产品概述
02 技术架构
03 技术指标 04 产品应用
05 对比分析
06 典型案例
07 解决方案
产品定位
在客户的信息化统一建设框架中,xx工作流引擎可以:
一、作为工作流引擎嵌入其他业务系统中,提供专属的流程服务 二、作为工作流管理服务中心部署在支撑层,为多个业务系统同时提供流程服务
流程引擎规则接口源码
图标首页导航对应的源码
com/horizon/example/*.java com/horizon/framework/*.java com/horizon/wf/core/manage ment/*.java com/horizon/wf/core/node/bas e/*.java com/horizon/wf/core/rule/*.jav a com/horizon/wf/core/definition /xml/*.java com/horizon/todo/*/*.java
缓存/集群支持 Cache(Memcached/Redis) 核心控制器 Core 异常处理 Exception 消息 Message
流程事务处理 Mybatis/JDBC
J2EE/Servlet 容器
xx工作流引擎架构的核心特性
特性1:架构轻量级,功能重量级 特性2:遵守规范、易于整合 特性3:极致开放、易于扩展
1. 数据集成。 xx 工作流提供多 数据源配置功能,便于从数据 层 面 与 其 他 系 统 整 合 。 2. 组织机构集成。实现 xx 工作
最终实现组织 内部系统间流 程整合优化 协同业务系统 实现数据一致 性事务处理 提供流程服务 供多套系统同 时调用
工作流引擎工作原理
工作流引擎工作原理
工作流引擎是一种软件工具,用于管理和自动化各种业务流程。
它的工作原理如下:
1. 定义流程:用户使用工作流引擎的可视化界面来设计和定义业务流程。
这个过程中,用户可以创建各种活动、决策、条件、分支等,来描述实际业务流程。
2. 配置规则:用户可以设置各种规则来控制流程的执行顺序、分支条件、活动的执行等。
这些规则可以基于时间、数据、用户输入等。
3. 任务分配:一旦流程定义和规则配置完成,工作流引擎会自动将任务分配给相应的参与者或角色。
任务通常包括所需的输入数据、活动的执行规则和截止日期等。
4. 执行流程:参与者会按照工作流引擎指定的流程和规则进行任务的执行。
他们可能需要填写表单、参与讨论、做出决策等。
在执行过程中,工作流引擎会监控任务的状态和执行情况。
5. 自动化处理:工作流引擎可以根据规则自动处理某些任务,无需人工干预。
例如,根据固定的时间规则自动发送提醒邮件,或者根据一定的条件自动决策进入下一个环节。
6. 监控和报告:工作流引擎可以实时监控流程的运行状态,并生成报告和统计数据,帮助业务人员了解和优化业务流程。
JWFDv0.90 工作流系统使用说明
JWFD TM0.90v 工作流设计与运行管理器使用说明这个版本的JWFD系统是最早的版本,其中包括了一个简易的OA操作界面(按照JWFD的版本号的规定,这个版本应该是v0.90),但是这个版本我的机器上面已经没有啦,07年的时候,硬盘坏了,所有的数据都完蛋,网上应该有这个版本的下载,但是我没有找到,希望看到有这个版本下载的朋友给我说一声我的QQ 7840928772010 年COMSCI补充说明目录1: 前言1-1: 什么是工作流管理系统1-2: 如何在项目中成功的引入工作流管理2: 软件简介2-1: 软件特征2-2: 功能列表2-3: 适用范围3: 软件系统结构介绍3-1: 开发环境3-2: 软件架构3-3: 数据字典4: 软件使用说明4-2: 服务端安装配置4-3: 客户端安装配置4-3: 持久层/数据库环境配置5: 软件使用说明5-1: 服务端使用手册a.介绍软件见面上各个功能按钮的功能,操作方法,每个面板都描述一下b.结合一个实例,介绍如何创建一个完整的工作流模型5-2: 公文处理使用手册5-3: 客户端使用手册(介绍如何通过客户端运行相应的流程)6: 中间件接口API说明5-1 :JA VA –DOC 文档5-2 与第三方平台镶入的说明7: 扩展说明8: 版权声明1: 前言1-1 工作流平台技术在国内企业的办公自动化和政府的电子政务系统建设热火朝天的进行之时,各大软件公司与系统集成商在大大小小的项目中虽然赚到了不少,但也遇到了很多困难,这些困难有些来自于自身的软件产品开发技术上的缺陷,有些来自硬件环境的限制和用户的使用水平的参差不齐..而更多的是来自用户的结合自身业务而提出的系统修改的需求….结合我们在实施项目的实际经验来看….这些困难和矛盾都有一个共同点: 我们的产品和服务与用户的需求之间存在着越来越明显的差距,如果不缩小这个差距,我们的厂商就会失去这个市场,失去这个时机…到底需要什么样的产品和服务才能让用户满意?一句话:业务是核心..信息是纽带...服务是关键无论是用户还是厂商对这三点都是比较认同的,可在项目的具体实施过程中,各方面从自己的利益出发,往往又有不同的看法….这样一来..矛盾就出现了….而且越来越大,最后如果处理不好,就将导致整个项目的失败…怎样才能把自己的软件和用户的业务紧密结合…..从国内外这几年的协同办公和OA的发展方向上来看..只有使用工作流这一新的技术平台才能最终解决业务与信息服务之间存在的矛盾工作流WORKFLOW 这一个概念最早是出现工业生产自动化控制这一领域,就是指将一系列需要协作完成的生产操作过程用预先定义的方式使用机器或者生产管理系统来管理整个生产任务,在这一个过程中,每一个生产环节是一个节点,而整个流程可以是一条线,一棵树,甚至是一张复杂的图(这样的生产控制方式对于可以生产多种类型的产品的生产线是非常合适的,不会因为生产不同的产品而把生产线换掉,而只需要调整系统的参数)以往的业务系统中的对业务的流程处理是一个与系统结合的非常紧密的模块,用户的业务流程已经被完全固化在这个系统中,问题就出现在,一旦用户的需求发生一点点变化,开发商都必须对整个软件系统进行修改..甚至对数据库环境做出大的调整..这样一来…用户和开发商的矛盾就不断的出现………而使用工作流平台来管理非工业生产领域的业务流程和协同办公处理正是将用户与软件开发者的矛盾尽可能的减小的一种好方法一个完整的工作流管理系统(中间件或者完整的应用系统)1:流程设计管理工具(通过类似画图的工作方式,使用户自定义一个可以运行的实际工作业务流程)2:流程运行控制器(工作流引擎,使用各种不同类型的网络图型算法控制流程的运行)3:客户端界面(需要与各种不同类型的B/S,C/S系统结合开发)4:流程数据与业务数据库5:实际业务流/表单管理工具(将流程运行与业务数据表单进行绑定)6:流程运行监控界面(用于系统管理员/流程管理员对整个流程进行监控)为了让用户对工作流这一概念有更为明确的了解,特引用中国科学院计算所的 <<基于关系结构的轻量级工作流引擎>> 论文中的一段话工作流是业务过程的计算模型,即将相应的业务逻辑和业务规则在计算机中以恰当的模型进行表示并对其实施计算。
流程引擎表结构设计方案
流程引擎表结构设计方案流程引擎是用于管理和执行业务流程的工具,它通常涉及到流程定义、流程实例、任务分配、流程执行等方面的功能。
在设计流程引擎的表结构时,需要考虑以下几个方面:1. 流程定义,流程定义是指业务流程的模板,包括流程节点、连线、条件等信息。
在数据库中,可以使用一张表来存储流程定义的基本信息,比如流程名称、版本号、创建时间、创建人等字段。
另外,可以使用另外一张表来存储流程节点和连线的详细信息,比如节点类型、节点名称、连线条件等。
2. 流程实例,流程实例是指根据流程定义创建的具体流程,包括流程的当前状态、执行人、执行时间等信息。
在数据库中,可以使用一张表来存储流程实例的基本信息,比如流程名称、发起人、当前状态等字段。
另外,可以使用另外一张表来存储流程实例的执行日志,比如流程节点的执行顺序、执行人、执行时间等。
3. 任务分配,流程执行过程中涉及到任务的分配和处理,需要设计相应的表结构来存储任务信息。
可以使用一张表来存储任务的基本信息,比如任务名称、执行人、执行时间、优先级等字段。
另外,可以使用另外一张表来存储任务的处理记录,比如处理人、处理意见、处理时间等。
4. 流程执行,流程执行涉及到流程节点的执行和流程状态的变更,需要设计相应的表结构来存储执行过程中的相关信息。
可以使用一张表来存储流程节点的执行记录,比如节点名称、执行人、执行时间、执行结果等字段。
另外,可以使用另外一张表来存储流程状态的变更记录,比如状态变更时间、变更原因等。
综上所述,设计流程引擎的表结构需要考虑到流程定义、流程实例、任务分配、流程执行等方面的信息存储需求,合理设计表结构可以更好地支持流程引擎的功能和性能。
工作流引擎介绍工作流引擎技术架构
工作流引擎介绍工作流引擎技术架构工作流引擎是指一个管理、自动化和实施企业业务流程的系统,它的核心任务是将一系列步骤或环节相连,按照正确的顺序来完成一些任务。
一个工作流引擎可以为用户提供一个可供多个角色使用的场景,允许用户自定义业务流程,并且能够根据不同的业务规则,按照业务流程完成各种任务。
一个工作流引擎技术架构可以分为四个层次:应用程序层、BPM引擎层、工作流引擎层和数据存储层。
应用程序层提供一个基于Web或移动端的系统界面,供用户管理业务流程,并完成各种任务。
这一层是工作流引擎最直接面向用户的接口,用户可以通过这一层实现业务流程的定制。
BPM引擎层是工作流引擎架构的核心,它能够实现业务流程的定义、流程实例的创建和管理,以及与应用程序层的交互,负责按照业务流程指定的步骤和次序执行任务,因此,BPM引擎层需要拥有具有丰富的规则引擎和校验逻辑。
JWFDv0.96 工作流引擎数据库结构说明
JWFD v0.96工作流系统设计文档(二) 数据库结构说明----- – by comsci2010--10-5(最新更新)QQ: 784092877(加好友请注明JWFD)EMAIL: comsci@COMSCI博客:JGraph介绍:关于JGraph,open-open上是这样介绍的:JGraph,纯Java开发的图形组件,支持拖,放,缩放,合并等其它操作。
它可以被结合到任何的Swing应用程序当中。
什么是状态机就是状态转移图。
举个最简单的例子。
人有三个状态健康,感冒,康复中。
触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。
所以状态机就是健康-(t3)-〉健康;健康-(t1)-〉感冒;感冒-(t3)->健康;感冒-(t2)-〉康复中;康复中-(t4)-〉健康。
等等。
就是这样状态在不同的条件下跳转到自己或不同状态的图。
介绍: 本项目是一个利用JGRAPH和SWING实现的工作流程设计与运行管理程序,其数据结构和流程算法均是自己设计的,没有使用XPDL等工作流规范文件,而是使用的最简单的XML(GXL)格式,没有状态机的概念而是使用的自定义图形遍历算法来驱动这个流程…主要的操作是在数据库方面,这样做仅仅是降低了工作流管理系统的技术门槛,便于初学者入门并从感性上理解什么是工作流技术,但是在实际应用上和真正的商业工作流产品还有较大的差距V0.96版本介绍JWFD是由我在04年开始设计并开发的一套包括基于JGRAPH开源软件的流程设计器和建立在图形自定义数据结构基础上面的流程引擎的工作流软件系统,在随后的几年中,由于工作和其它一些技术原因,对JWFD的更新一直都停留在局部BUG的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在08和09年在完成某项目的机会,对JWFD在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具(基于ANTLR3.0开发,脚本功能可能要少些),增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,对数据库的表结构也做了一定的调整,精简了几张不需要的表,同时增加了主控制结构表的字段,为方便流程设计的初学者,我在不删除旧数据结构说明的基础上面,从新添加新版本数据结构的说明,这样可以使朋友们很容易的从简单的结构入手,再深入到新版本的结构中去。
流程引擎系统架构设计
流程引擎系统架构设计引擎系统架构设计:流程引擎系统是一种用于管理、自动化和执行业务流程的软件系统。
通过将业务流程进行建模和调度,流程引擎系统能够管理业务流程的生命周期,并支持用户定义业务规则以及执行和监控流程中的任务和活动。
下面是一个详细的流程引擎系统架构设计。
1.架构类型:2.组件划分:-流程执行引擎:负责流程的运行和执行,包括任务分配、流程追踪和异常处理等。
-规则引擎:用于执行和管理业务规则,根据定义的规则进行决策和流程控制。
-任务和活动管理:用于管理和调度流程中的任务和活动,包括分配、执行和监控等。
-数据存储和访问:负责存储和管理流程相关的数据,包括流程实例、任务和流程变量等。
-监控和报告:用于实时监控流程的执行情况,并生成报告和分析数据。
3.数据模型:-流程模型:用于描述业务流程的模型,包括流程节点、流程变量和流程规则等。
-流程实例:表示业务流程的一个具体执行实例,包含了流程的状态和执行历史等信息。
-任务和活动:表示流程中的一个任务或活动,包括任务的执行人、状态和处理结果等。
4.接口和集成:-API接口:提供标准的API供外部系统调用,包括流程的启动、任务的分配和执行等。
-集成插件:支持与其他系统进行集成,如与ERP系统、CRM系统或消息队列系统等的集成。
5.高可用和容错:-分布式部署:通过将系统部署在多个节点上实现系统的高可用性和负载均衡。
-数据备份和恢复:定期备份系统数据,并能够在系统故障时快速恢复数据。
-异常监控和报警:实时监控系统的运行状态,及时发现异常并进行处理。
总结:流程引擎系统的架构设计需要考虑系统的规模、复杂度和可扩展性等因素。
通过合理的组件划分、数据模型设计和接口集成,可以实现高效、稳定和可扩展的流程引擎系统。
同时,需要注意系统的高可用性和容错能力,以确保系统的稳定和安全性。
慧正工作流引擎集成说明
慧正工作流引擎集成说明本文档是针对将工作流引擎集成部署到第三方应用的说明。
按照集成部署步骤安装完毕后,首先需要按照集成接口说明,进行接口开发。
如果需要使用产品的工作流管理界面,需要单独部署产品提供的工作流管理应用。
如果需要在自己的工程内部开发工作流管理页面应用,可以参考产品的管理应用,调用相关api自行开发。
1安装部署按照下述步骤,可以将引擎产品嵌入部署到现有工程中。
第一步:创建数据库,执行建表脚本根据采用的数据库类型,执行对应sql目录下的脚本文件。
第二步:按照程序文件情况,将程序文件拷贝到web应用根路径下相应位置第三步:按照如下说明修改配置文件Web-Inf\web.xml需要添加以下内容<!-- 流程配置文件加载 --><servlet><servlet-name>workflow</servlet-name><servlet-class>com.horizon.workflow.xmlconfig.ConfigLoaderServlet</servlet-clas s><init-param><param-name>WorkFlow</param-name><param-value>workflow.xml</param-value></init-param><load-on-startup>3</load-on-startup></servlet><servlet-mapping><servlet-name>workflow</servlet-name><url-pattern>/workflow.hz</url-pattern></servlet-mapping><!-- 流程定制工具Flex通讯加载 --><listener><listener-class>flex.messaging.HttpFlexSession</listener-class></listener><servlet><servlet-name>messageBroker</servlet-name><servlet-class>flex.messaging.MessageBrokerServlet</servlet-class><init-param><param-name>services.configuration.file</param-name><param-value>/WEB-INF/flex/services-config.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>messageBroker</servlet-name><url-pattern>/messagebroker/*</url-pattern></servlet-mapping>第四步:启动应用,访问http://地址:端口/horizon/workflow/workflow.hz,将页面返回的机器码发给产品提供商,产品提供商提供license文件,拷贝到WEB-INF\license文件夹下,重启服务器。
工作流引擎开发系列一基础知识
工作流引擎开发系列一基础知识
在现在的很多业务系统中都要用到工作流的,比如说办公软件,评审软件。
最近公司需要开发一款工作流引擎,利用数据库做依托,到目前阶段基本上都已经完成了。
呵呵,本人也不太喜欢说文字,接下来就简单介绍下基础的东西。
首先系统架构图如下:
工作流(即Workflow),毋庸置疑就是一套流程规范,这套流程规范是用户自定义的,可以实现相应的一套业务的自动化完成模板。
每个模板中都包含相应的活动(即Activity),在日常生活中几种常见的活
动有:审批,会签,并行和分支。
每个活动都会拥有相应的动作(即Action)。
如图:
在整个引擎中要分为三块:工作流运行平台,业务平台和工作流配置平台。
工作流平台主要是工作流运行实例的宿主,业务平台主要是给用户来是实现自己的数据变更,配置平台主要用来做工作流模板配置。
整体设计如下:
相关运行步骤如下:
1. 配置工作流模板
2.运行工作流模板生成工作流实例instance和节点flow的相关信息
3.在运行的过程中执行相关的业务更改
4.根据相关节点生成对应的T odo待办内容
5.点击Todo待办信息调用do方法执行相关操作
6.整个过程中都使用Indicator指示器和WorkState状态器来控制流程走向。
流程引擎设计方案
流程引擎设计方案引言:随着信息技术的快速发展,各类企业和组织在业务处理过程中面临着越来越复杂的流程管理问题。
为了提高工作效率、降低成本和减少人为错误,流程引擎成为了一个重要的解决方案。
本文将介绍流程引擎的设计方案,包括基本概念、架构和关键功能等内容。
一、基本概念1. 流程:指一系列具有逻辑关联的任务或活动,按照一定的规则、顺序和条件进行执行。
流程可以是线性的,也可以是具有分支和汇聚的复杂结构。
2. 流程引擎:指能够自动执行和管理流程的软件系统。
它将流程图中的任务和规则抽象为可执行的代码,并提供相应的界面和工具供用户定义、执行和监控流程。
3. 流程实例:指特定流程在某一时刻的具体执行情况,包括当前所处的节点、已经完成的任务和待办任务等信息。
二、流程引擎的架构流程引擎的架构通常包括以下几个核心组件:1. 流程定义:用于定义和描述流程的结构、流转规则和节点信息。
通常采用BPMN(Business Process Model and Notation)标准进行建模,以保证流程的可视化和可理解性。
2. 流程引擎核心:包括流程引擎的执行引擎和流程实例管理。
执行引擎负责解析流程定义,驱动流程的执行并处理任务的分配和执行。
流程实例管理负责管理流程实例的状态、流转和数据传递等。
3. 任务管理:负责任务的创建、分配、执行和完成等操作。
任务管理通常与人员管理系统或工作流管理系统进行集成,以实现任务的自动分配和流转。
4. 规则引擎:用于流程中的条件判断和决策,根据一定的规则和数据进行流程控制。
规则引擎可以是基于规则库的,也可以是基于机器学习和人工智能的。
5. 数据存储:用于存储流程定义、流程实例和任务等数据。
可以采用关系数据库或NoSQL数据库进行存储,以便支持大规模和高并发的流程执行。
三、流程引擎的关键功能1. 流程定义和编辑:提供可视化的界面和工具,让用户能够方便地定义和编辑流程。
用户可以通过拖拽和连接节点,定义流程的结构和流转规则,并设置节点的属性和行为。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JWFD v0.96 开源工作流引擎设计(二) 数据库结构说明----- – by comsci2010--10-5(最新更新)QQ: 784092877(加好友请注明JWFD)EMAIL: comsci@COMSCI博客:/comsci介绍: 本项目是一个利用JGRAPH和SWING实现的工作流程设计与运行管理程序,其数据结构和流程算法均是自己设计的,没有使用XPDL等工作流规范文件,而是使用的最简单的XML(GXL)格式,没有状态机的概念而是使用的自定义图形遍历算法来驱动这个流程…主要的操作是在数据库方面,这样做仅仅是降低了工作流管理系统的技术门槛,便于初学者入门并从感性上理解什么是工作流技术,但是在实际应用上和真正的商业工作流产品还有较大的差距V0.96版本介绍JWFD是由我在04年开始设计并开发的一套包括基于JGRAPH开源软件的流程设计器和建立在图形自定义数据结构基础上面的流程引擎的工作流软件系统,在随后的几年中,由于工作和其它一些技术原因,对JWFD的更新一直都停留在局部BUG的修正上面,对核心引擎算法没有进行什么大的改进,这几年国内的流程产品层出不穷,技术水平不断提高,为适应这种发展的情况,我利用在08和09年在完成某项目的机会,对JWFD在面对各种实际项目中所体现出来的缺陷进行了修改,对引擎算法进行了大幅度的修正,新增加了增强流程引擎功能的算法,加入了自定义嵌入式脚本解析工具(基于ANTLR3.0开发,脚本功能可能要少些),增加了流程设计器的流程代码编辑功能,增加了简易流程引擎调试工具,对数据库的表结构也做了一定的调整,精简了几张不需要的表,同时增加了主控制结构表的字段,为方便流程设计的初学者,我在不删除旧数据结构说明的基础上面,从新添加新版本数据结构的说明,这样可以使朋友们很容易的从简单的结构入手,再深入到新版本的结构中去。
数据库结构总览(JWFD v0.94数据库结构):(下面这两段话是描述的jwfdv0.94之前的数据结构,用户可以跳过不看)JWFD曾经使用表一共12张,分别是:用户权限部门管理类一共三张表: 'department', 'department_level', 'departmentmember'用户表类两张:user和user_group (以上的表都不是核心结构,可要可不要,但是做为一个完整的程序,还是应该考虑的…这些表是用户和权限控制的基础数据结构)(上面的六张表由于和实际应用项目开发关系过于密切,在JWFD的新版本中已经完全被放弃不用了,JWFD只是一个用于学习的工作流系统,我只关心流程核心的运行控制和处理问题,对于项目和产品应用的外围数据结构,比如说表单等数据结构,我在这里暂时不关心,这些工作是交给项目实施者和商业产品开发者考虑的工作)流程运行控制表一共五张表: 'edge_control', flow_manager', 'route_control', 'step_detail', 'step_main',文档管理类: 一张表:documentv0.94版本之前的数据库总体结构(下面的内容是描述jwfdv0.96的数据库结构)v0.96版本的数据库总体结构目前所有的表,其中只有4张表对于流程引擎来讲比较重要(它们分别是edge_control', flow_manager', 'route_control', 'step_main'),也需要重点说明,其它的表在系统中使用率不高,甚至根本没有使用,只是用于给用户进行自定义扩展的时候使用的,大家一看就懂。
最新的v0.96版本中,一共有5张表都已经废弃了,原因是由于在jwfd的设计过程中,会出现各种不同的应用,作为JWFD的设计者,我无法完全掌握用户自定义的需求,所以只给用户提供了扩展的接口,具体的应用还是需要用户自己去设计和实现的。
流程图数据结构--实际流程建模数据是由XML文件导入数据库,请看下例文章了解XML数据结构,JWFDv0.96工作流系统开发包简要说明.docJWFDv0.96 工作流XML结构说明.doc表名: step_main( 流程图节点属性主表)该表和edge_control表共同在数据库中表示了流程图拓扑数据结构,(在数据库中采用顶点和弧的方式来表示图的拓扑结构是一种最流行的,最方便的解决方法,当然..这里也不例外,我已经在设计基于矩阵的流程拓扑数据结构,希望在JWFDv0.98以后的版本推出基于矩阵流程数据结构的新引擎)step_main表的一条记录就代表在流程图中的一个顶点的拓扑数据,具体结构如下:上图是jwfdv0.94之前版本的数据结构上图是jwfdv0.96版本的新数据结构,增加了5个字段,减少了3个字段(下面做补充说明)字段1: id (排序ID号,非空,短整型) 功能: 该条记录的唯一性标识字段2:step_name ((节)顶点标识名,非空,字符型) 功能: 标识流程图节点的名称,中文或者英文,在流程图定义或者运行控制过程中标识或者代表该节点,和表中的step_id字段相对应,字段3: graph_id (流程图标识字段,非空,字符型) 功能: 用于区分不同的流程图,使用中文或者英文,是该表的INDEX字段,查询各流程图的关键字段字段4: is_active (流程运行状态标识字段,非空,短整型,默认值0) 功能:通过该字段来标识一个已经处在运行状态中的流程的各个节点的状态,0代表非活动,1代表已经开始活动,2代表异常状态,(流程节点是否活动就是通过该字段来表示的,朋友们可以对这个字段进行自定义扩展,以便扩展引擎的控制功能)字段5: step_id(流程图顶点的内部标识字段,非空,字符型) 功能: 在数据库和XML文件中标识一个节点,不对外显示,只是在内部程序中用来代表节点的字段,与step_name相对应,其重要性主要体现在数据SQL语句中作为where子句的查询条件字段,该字段和XML数据结构中的node_id属性相对照字段6: is_routed (流程图路由节点标识字段,可空,短整型) 功能: 功能扩展字段字段7: visited (流程访问状态标识字段,非空,短整型) 功能: 标识流程运行阶段该顶点被运行控制模块访问次数的统计,该字段是程序中图形算法模块需要的重要字段,在有分支节点的流程图中,通过该字段来分辨哪些后驱点被访问,哪些没有被访问字段8: allow_toback (流程运转回退标识字段,可空,短整型,默认0) 功能: 表示该节点可回退,0代表容许回退(在v0.96版本中,该字段已经被删除)----------------------------------------------------------------------------------------------------------------------JWFD V0.96版本的增加字段补充说明(要深入认识这几个字段的功能和作用,请大家参考“JWFDv0.96 工作流系统开发包简易说明.doc”文档中的流程引擎基础API调用说明)字段9: cond (嵌入式公式数据字段,长字符串型,可为空,默认"") 功能:作为节点嵌入式脚本(公式)数据的数据库保存字段,用于流程条件表达式的逻辑判断和相应处理字段10: actioned_time ( 流程节点处理次数计数器字段,可为空,短整型,默认0 ) 功能:记录流程节点在运行过程中的被处理次数,属于功能计数器字段字段11:jap_num (条件表达式汇聚逻辑控制字段,可为空,短整型,默认0) 功能:记录流程汇聚节点的汇聚控制次数,属于功能计数器字段字段12: rollback_status ( 流程节点回退状态字段,可为空,短整型,默认0 ) 功能:记录流程节点回退状态,尚未使用,备用字段字段13: rollback_time (流程节点回退次数计数器字段,可为空,短整形,默认0 ) 功能:记录流程节点的回退次数,属于功能计数器字段字段14: startup_time(流程引擎时间控制字段,可为空,字符串型,默认“”)功能:记录该流程节点的起始运行时刻值,属于流程时间控制参数字段字段15: end_time(流程引擎时间控制字段,可为空,字符串型,默认“”)功能:记录该流程节点的终止运行时刻值,属于流程时间控制参数字段---------------------------------------------------------------- ------------------------------------------------------表名: EDGE_CONTROL( 流程图边(弧)关系表)字段1: id (排序ID号,非空,短整型) 功能: 该条记录的唯一性标识,字段2: edge_id ( 流程拓扑边标识ID,非空,字符型) 功能: 标识流程图连接边的名称,SQL语言中查询的条件值,作为该条记录的唯一主键字段,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的id字段数据值相对应字段3: from_step( 起始顶点连接属性,非空,字符型) 功能: 该边所连接的起始顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的from字段数据值相对应字段4: to_step ( 终结顶点连接属性,非空,字符型) 功能: 该边所连接的终结顶点的标识ID,该字段和XML连接边数据结构中的<edge from="node2" id="edge0" to="node1">数据段中的to字段数据值相对应字段5: flow_master_id ( 保留字段) 功能: 保留字段6: graph_id ( 同step_main表中同名字段) 功能: 同step_main表中同名字段相同这张表和step_main表共同组成了流程图的基础拓扑数据结构表..实际上大多数对图的遍历和控制的操作算法都是在这两张表的数据结构基础上进行的----------------------------------------------------------------------------------------------------------------------Jwfdv0.94采用一个经过修改的广度优先算法对流程图进行遍历(在程序中使用的算法就是在下面的伪码基础上完成的),请查看代码包中org.jwfd.workflowEngines.GXLFlowControlModule类中的DFS方法(在v0.96版本中该方法已经被org.jwfd.workflowEngines.Algorithm.TopologyAnalysis类中的SAN方法所取代)/****************** 流程引擎伪码描述算法***************************/ 前驱路由点: 该点是N个节点的source点(N>1)后驱路由点: 该点有N个节点的target点(N>1)这个算法基本上可以解决分支和发散,与汇聚的流程图遍历问题Public DSF (){for(int i = 0, I < 当前节点的邻接点个数, I ++ ){if (该点是个前驱路由点) {if (该点没有被访问过) {设置访问次数加(从递归方法中获得的循环控制变量)返回}else if( 如果已经访问过,但是访问次数<它的前驱节点总数){设置访问次数加(从递归方法中获得的循环控制变量+1)返回}else if(总计访问次数=它的前驱节点总数){递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)}}else if(如果是普通节点){设置访问标志递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中,dfs(i))}}}}/*****************************************************************************/表名flow_manager ( 用于对流程的整体运行状况进行控制,这张表是流程的总体控制表,以区别于对流程的细节进行控制的其它几张表)字段1: id (记录标识字段)字段2: graph_id ( 流程记录关联字段,非空,字符型,保留)字段3: flow_name ( 属性同上,现在程序使用的是这个字段)字段4: flow_status ( 流程运行状态管理字段,非空,短整型,默认0) 0为未启用该流程,1为流程开始运行,2为终止运行状态字段5: docid (该字段用于与一个document中的文档进行签名流程的绑定)字段6:Flow_startup_time (流程开始运行的时间)字段7 :Flow_create_time ( 流程登记的)字段8: Department_id ( 流程的部门ID标识号)----------------------------------------------------------------------------------------------------------------------表名: step_detail ( 流程节点属性明细表,作为主表step_main的附属表,存储节点的详细活动属性) 在v0.94和v0.96版本中,该表均未被引擎所使用,用户可以自行扩展该表,以使系统能够处理更加复杂的嵌入数据,比如说表单和公文流转等信息设计本表的目的是为了让一个流程中的节点能够通过一些简单的数据处理变成一个活动点,同时最大限度的分离流程图拓扑数据和活动处理数据流该表目前的对应程序里面的公文处理流程中的大部分用户节点操作(action表示该节点的活动属性)字段1: id 记录ID字段2: flow_id 流程图ID字段3: step_id 顶点ID字段4: user_id 对应处理用户ID字段5: action_type 活动类型字段6: action_result 活动处理结构状态字段7: action_time 活动处理时间字段8: action_record 活动记录内容字段9: action_status 活动当前状态字段10: time_limit 活动处理时间期限字段11: action_startup_time 活动开始时间字段12: action_end_time 活动结束时间字段13: route_node 该活动自由路由点字段14: action_optional 用户处理意见------------------------------------------------------------------------------------------------------------------- 用户可以在这个表的基础上进行修改,以方便自己的应用程序中对流程节点活动的处理------------------------------------------------------------------------------------------------------------------ 表名:route_control( 流程路由点属性表) 保留,尚未使用说明:本表主要是为了减少流程引擎的节点路由控制而设置的表,但是在流程引擎代码中并为使用,仅仅保留为待用数据表保留,尚未使用字段1: route_id 路由点ID字段2: route_name 路由点名称字段3: step_id路由点对应流程点ID字段4: route_stepid 保留字段5: graph_id流程图ID。