JWFDv0.96 开源工作流引擎设计-数据库结构说明
- 格式:doc
- 大小:99.00 KB
- 文档页数:10
什么是工作流引擎,工作流引擎有什么作用,为什么需要工作流管理系统,在这里我们主要研究它的好处,你想要理解它的好处,就得知道不使用它会带来什么样的坏处。
现在我们来讲工作流,什么是工作流?所谓的工作流就是通常所说的业务流程,那么所谓的业务流程换句话来讲就是多个人在一起去完成一件事情。
这就可以称之为工作流。
流程的本质就是一个参与者参与到一个过程里面来那么现在我们就想为什么需要工作流管理系统,工作流管理系统能给我们带来什么好处。
我们就从这个角度出发来了解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.运维和支持:在工作流引擎流程产品实施后,需要进行运维和支持工作。
这包括监控系统的运行状态、处理用户的反馈和问题,并根据需要进行系统的更新和升级。
总结起来,开发工作流引擎流程产品需要经过研究和需求分析、设计、开发核心功能和用户界面、测试和优化、部署和实施、以及运维和支持等多个阶段。
每个阶段都需要进行详细的规划和准备,并根据实际需求和情况进行调整。
通过合理的开发实施,可以实现高效和可靠的工作流引擎流程产品。
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 流程的显示当保存一个流程的信息到数据库中以后,会在界面的树形结构中显示新创建的流程节点。
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.工作流引擎实现工作流引擎的实现需要同时考虑到效率和可靠性的问题。
在开发过程中,需要借助一些技术和框架,使得开发人员能够更好地实现工作流引擎,实现较高的可靠性成本效益比。
工作流引擎流程产品介绍开发实施首先是需求分析阶段。
在这个阶段,产品团队需要与客户充分沟通,理解客户的具体需求和业务流程。
通过与客户的交流,产品团队能够明确工作流引擎的功能需求和用户需求。
在需求分析阶段,产品团队还可以提供一些专业建议,帮助客户优化工作流程,提高业务效率。
接下来是设计阶段。
在这个阶段,产品团队会根据需求分析阶段的结果,进行系统的功能设计和用户界面设计。
功能设计主要包括工作流程的创建、任务分配、通知提醒、数据交互和决策支持等方面。
用户界面设计要注重用户友好性和操作便捷性。
然后是开发阶段。
在这个阶段,开发团队会根据设计阶段的结果,进行软件编码、测试和调试等工作。
开发团队需要按照设计规范和标准进行开发,确保软件的稳定性和可靠性。
紧接着是测试阶段。
在这个阶段,测试团队会对工作流引擎进行全面的测试和验证工作。
测试团队会使用各种测试方法,包括功能测试、性能测试和安全测试等,检查工作流引擎的各项功能是否符合需求,并保证工作流引擎的稳定性和安全性。
然后是使用培训阶段。
在这个阶段,产品团队会对客户进行工作流引擎的使用培训。
培训内容主要包括系统的基本操作、工作流程的创建和管理、任务的分配和跟踪等。
通过培训,客户能够熟练掌握工作流引擎的使用方法,提高工作效率。
最后是上线阶段。
在这个阶段,产品团队会将工作流引擎部署到客户的服务器上,并进行系统的上线和运行。
在上线后,产品团队还会进行一段时间的跟踪和维护工作,确保工作流引擎的正常运行和客户的满意度。
总而言之,工作流引擎流程产品的开发实施是一个复杂而重要的过程。
通过充分的需求分析、设计、开发、测试、使用培训和上线等步骤,可以为客户提供一个功能强大且易于使用的工作流引擎,帮助组织优化和自动化业务流程,提高工作效率和质量。
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。