1、(完整版)一个工作流系统开发文档(含调研、需求分析、设计)目录开场白1工作流技术调研:1工作流的概念1工作流相关术语2工作流系统功能概述2工作流运行的模式列举4业内工作流产品调研5Mocha BPM产品5中软工作流产品调研6天翔myApps工作流产品调研7我们的需求分析9系统模块划分10工单系统的功能性需求列表10需求变更总结13设计方案15数据库设计15关于hibernate实现持久层和session的管理17自定义表单的设计18自定义流程的设计19消息模块的设计21后记22开场白 我告诉自己要有专业精神,可是。.。我真的好业余。 以前我不知道,我到底适不适合学计算机,如今我有了答案,以前我
2、不知道我能在这个行业取得多大的成就,如今我仍然没有答案,只是当我有一天我发觉枪毙一个 毫无常理可言的 可以称为意识流的bug 的时候,我觉得这种感觉仿佛是自己成为了侦探小说里的主角一般,故事的结局是聪明才智让迷离的云雾消散,那一刹那的欢喜就像是一个你坚持了很久的英雄梦想霎那间以一种最满意的方式开出花来. 也许很少有人能理解这宗近乎疯狂的感觉,而对于一个每天对着计算机将近9个小时的IT者来说,我的确需要这样的近乎自恋的情感变化或者说异样的愉悦体验。 情也抒了,于是该变身回一个真正的IT者,紧以此贴记录在过去的半年里我所从事的高尚职业,如果你要问我我从事的什么高尚职业,它为何高尚,那我会告诉你原因
3、就是 我装逼,自恋,而又认为有体会到了一些与众不同的感觉。 首先自量底牌,我只是一个普通的大四学生,通过自己的努力保研成功,大四之后经常浪迹在javaEye中,此贴可称为处女贴.本贴的意义在于自我终结,顺便带着抛砖引入的使命,再顺便让我打破万事开头难的俗套,一边督促自己常常自我总结,自我提高。关键词 : 工作流 jbpm 动态流程 可定制表单。 本文就以我在过去三个月开发的一个完整流程系统为背景,总结在我知识所及范围里的工作流系统开发经验,贻笑大方想来是不可避免的,还望各位牛人指正,俺只是一个放低了姿态的学生。工作流技术调研:工作流的概念l 工作流是一类能够完全或部分自动执行的经营过程,它根据
4、一列过程规则,文档、信息或任务能够在不同的执行者之间进行传递与执行(WfMC)l 工作流管理系统是一个软件系统,它完成工作流的定义和管理,并按照在计算机中预先定义好的工作流逻辑推进工作流实例的执行(WfMC)l 工作流起源于办公自动化领域,我们可以把工作流系统比作生产流水线,不同的部门和加色根据权限的划分执行相应的任务。工作流相关术语l Activity定义:在一个进程中,形成一个逻辑步骤的一次工作。包括manual activity和automated activity 用法:一个进程可以由多个对整个商业进程的可行性有帮助的有逻辑顺序关系的activity组成;每个activity一般都是流
5、程引擎的最小工作单元 l Process Instance定义: 一个单独制订的进程的表现 用法:由工作流管理系统管理或创建每个进程实例表现了一个单独制定的实例,使用它自己的进程实例数据,并可独立控制或检查完成或终止l Participant 定义: 它是一个资源,执行由一个工作流活动实例表达的工作。这个工作一般都是指定到工作流参与者的一个或多个工作条目 用法:通常是指人力资源,但不能简单概念的包括智能代理(intelligent agent)之类的机器资源,一个工作流参与者可以在商业进程中直接定义,或者由组织或角色实体定义l Task定义: 在一个进程实例中的一次活动的一次工作 用法:一个活
6、动代表性的都产生一个或多个工作条目,这些工作条目组成了用户着手的任务 工作流系统功能概述l 流程定制工具提供了一个流程建模的可视化开发环境,让用户能够使用图形化拖拽的方式,方便、直观、有效地设计、修改和维护企业业务流程,并且所见即所得,极大地提高了易用性(如下图)l 管理监控工具 提供可视化的平台查看流程历史,对流程任务进行查询等工作.(如下图) l 工作流客户端与应用我们工作流提供了一个客户端的应用,提供了用户任务列表、签收任务、完成任务等等,但是在具体的项目中,可以根据用户的需求需要重新做一个应用,核心接口已经提供了,只需做一个用户需要的展现形式l 工作流引擎引擎支持多种流程运行模式,运行
7、时对流程和活动进行有效管理,根据流程向参与者分配任务,并对管理和监控功能提供有效支持.引擎通过接口与工作流工具、外部应用和第三方工作流引擎进行交互,向系统提供工作流执行服务.(如开源的jbpm流程引擎)工作流运行的模式列举l 顺序(Sequence )- 顺序执行任务;l 并行分叉(Parallel Split) 并行执行任务;l 同步(Synchronization)- 同步两个并行执行的线程;l 排它选择(Exclusive Choice) - 从多个路径种选择一个执行;l 简单合并(Simple Merge) - 合并两个可选执行路径l 任意循环(Arbitrary Cycles) -
8、执行工作流图时无任何环路限制;l 绝对终止(Implicit Termination) 若无事可做时则终止。 给出一个简单的流程建模图:业内工作流产品调研Mocha BPM产品(注:以下信息基于mocha bpm产品白皮书整理) Mocha bpm产品特点介绍:l 提供了业务流程设计、运行、维护和优化的工具,同时将提供应用引擎的方式来支撑企业核心业务应用系统, 灵活地与业务系统的应用集成,实现业务流程管理系统的自动化。l 全面整合业务流程,摩卡 BPM 以其强大的工作流引擎为依托,依靠完备的数据交换平台,完全按照业务流程本身的流转规则,并以全程的自动化方式,实现跨机构、跨业务、跨部门、跨应用的
9、流程整合。l 完整的生命周期管理建模:由业务人员完全以业务视角,使用流程图来描述一个业务流程,即配即用的动态定制自动化:定义好的流程,在BPM 系统中自动执行, 完全废弃传统的纸张,流程的传递无需人工干预。搜索:BPM 中的流程和数据呈指数增加,系统能对流程状态、运行情况等数据信息进行索引和监控,实现快速查找。管理:能够可视化地监控流程的执行情况,对流程执行中出现的意外进行处理。开发:简化工作中的流程步骤,满足随时变化的业务需求,降低了二次开发的难度,提高开发的效率.整合:BPM 不仅仅是由人来参与,通过整合Mocha BPM Integration,部分活动也可以由IT 系统来参与,达到自动
10、化的目的。Mocha BPM 通过对组织内外的流程管理,提高了组织的客户满意度,提升了组织的竞争能力,加强了组织的适应变化能力,使组织在竞争之中始终具有领先的优势.Mocha BPM 帮助企业,让流程成为一个企业的竞争优势.它是经过多年的项目经验积累不断完善的成熟的BPM产品.中软工作流产品调研功能列表:l 监控管理监控流程状态管理流程运行查看流转历史提供考核依据 l 流程定制图形化定制符合行业规范独立运行修改便捷 l 组织结构图形化定制符合行业规范独立运行修改便捷 l 任务管理查询任务办理任务 委托任务分派任务发起会签天翔myApps工作流产品调研主要关注点:(流程自定义,表单自定义,任务自
11、定义)流程定义:拖拽方式的流程定义节点上任务自定义:表单自定义:通过三部自定义过程,该工作流软件可以实现业务无关的流程建模方式。作为一个初出茅庐的学生,第一次来到公司面前做技术调研报告,胸里貌似没有了成竹,只是老师的一番话顿时让我淡定了不少,都把他们当作傻子吧,此时此刻以我的智商以定能唬得主那帮最可爱的人。当时的情形我已经记不住了,所有的只言片语在脑海里聚拢成一句话:我们的需求三句话:流程可定制,表单可定制,流程可监控,小孙作为绝对主力,千万不要在需求上再出问题,你看我刚才叫什么外卖来着,明明是鸡腿,到手的却成了鸡翅,并且三个月后给出第一个版本.于是我在此记住了这个人,他叫张总,在公司里一直强
12、调着业务.如今回过头来想想,这也是我第一次做 技术调研,对于一个全新的领域 这一环节显得如此的重要,再次打个比如,就像你去一个陌生的城市读书,这一步就像你的一个亲戚或朋友一样,虽然你之后总是要一个人去面对这个陌生的城市,但你朋友或亲戚的存在让你感到了一种叫做方向的东西。我们以后的设计方案,貌似就是 对 上述几个产品 加上 joffice 加上 shareidea 的整合 ,或者说是博取众长,虽然并不确定采众长之后我们取得了站在巨人肩膀上一般的成功.我们的需求分析系统模块划分工单系统的功能性需求列表功能类别功能名称、标识符描述工单流程管理新建业务流程管理员点击“新建业务流程”菜单,系统弹出可视化
13、业务建模工具,工具包括可选组件列表,和实时操作展示区,管理员可以通过拖拽等方式快速的构建业务模型。管理员须填写流程名称,点击“发布流程“按钮,进行业务流程部署。备注:可选组件包括:开始节点、结束节点、任务节点、分支节点、聚合节点(可参考jbpm自带的流程建模工具)、连线。其中任务节点可弹出“配置对话框“进行任务定制。每个新发布的流程要按照jbpm4.3规范生成xml配置文件。配置对话框: 绑定表单,绑定操作人员,条件设定等选项(具体参照系统原型) 查看流程列表管理员:管理员点击“查看系统流程“菜单,系统显示当前已经发布的流程列表,每一条流程后面跟有操作按钮:删除”、”修改。双击一条流程数据,系
14、统显示该流程的详细页面(包括流程图)备注:列表中每一项要显示数据为:流程名称、流程创建人、流程创建时间、流程实例数普通用户: 点击“查看系统流程“菜单,系统显示当前已经发布的流程列表,每一条流程后面无操作按钮。双击一条流程数据,系统显示该流程的详细页面(包括流程图)修改业务流程管理员在系统流程列表上点击“修改 ”“按钮后,系统切换到新建流程界面,展示区给出该流程的流程图,管理员可通过工具进行修改.具体操作参考新建业务流程模块。删除业务流程管理员在系统流程列表上,点击“删除“按钮,系统给出提示信息,提示”该流程下的所有业务实例都将会删除,是否继续”。智能表单管理新建表单管理员点击“新建业务表单“
15、菜单,系统弹出可视化操作工具,管理员可以通过任意的拖放构建符合业务的表单.备注:表单支持的标签类型可参考html组件。必须要支持的标签有:单行文本框,多行文本框,时间文本框,文件文本框(传附件)、checkbox文本框、操作按钮。其他填写信息:表单名称。 查看表单列表管理员:管理员点击“查看系统表单“菜单,系统显示当前已经发布的表单列表,每一条表单后面跟有操作按钮:删除”、”修改”。双击一条表单数据,系统显示该表单的详细页面(以html的形式)备注:列表中每一项要显示数据为:表单名称、创建人、创建时间普通用户: 点击“查看系统表单“菜单,系统显示当前已经发布的表单列表,每一条数据后面无操作按钮
16、。双击一条表单数据,系统显示该表单的详细页面(以html的形式)修改表单管理员在系统表单列表上点击“修改”按钮后,系统切换到修改表单界面,管理员可通过可视化建表工具进行修改。具体操作参考新建表单模块。删除表单管理员在系统表单列表上,点击“删除“按钮,系统给出提示信息,提示“删除表单,会让当前绑定的流程无法正常运转,请确保无绑定流程,是否继续?”。任务管理查看代办任务列表用户点击“查看待办任务“按钮,系统给出待办任务列表,列表以优先级排列,限期办理的任务以红色背景显示,用户双击任何一条待办任务即进入任务显示页面,用户可进行相应的操作.备注:显示界面的右边给出当前任务的流程图,并标识出当前任务所处
17、的环节。处理任务用户在待办任务显示界面根据页面操作进行任务处理,可查看和上传附件.新建任务用户可以发起一个任务,即启动一个业务流程,而当前任务处于流程的第一个任务节点。用户点击“新建任务按钮”,系统显示当前系统所有流程列表,用户点击任何一条流程后的“启动按钮便可启动流程并对第一个任务进行处理。查看历史任务用户点击“查看历史任务”按钮,系统给出该用户曾经处理过的流程实例,所有信息按照所属的流程的不同进行排列.列表上方给出两个过滤条件“已完成流程、“未完成流程”.用户双击任意一条数据,系统给出流程实例显示信息页面(包括流程实例图,并标识出当前状态)流程监控管理查看系统流程实例管理员 点击“查看系统
18、流程实例”菜单,系统给出当前在系统下运行的所有流程实例,列表以优先级排列,并以颜色区分。红色表示限期完成型流程、紫色表示无限期流程、灰色表示已完成流程。同时在列表的上方给出过滤选项checkbox。过滤的条件为所属的流程项目。管理员点击每一条流程都可以进入流程明细界面,管理员可根据规则对当前任务的负责人发送短信来督促业务的进行。每一条的流程信息后有操作按钮“删除。可对流程实例进行管理。查看流程明细双击流程实例列表的任一条信息,进入流程实例明细界面(要求有显示流程图和当前任务所处位置).超期告警 管理员通过查看流程实例找出将要超期的任务,点击“发送任务提醒信息”按钮提醒任务负责人.系统根据预定义
19、值,每隔一段时间检查超期任务一次。并自动发送提醒信息。用户管理用户管理部门管理角色管理人员管理资源管理资源组管理需求变更总结所属模块计划需求实际需求变更量备注流程管理每个节点绑定表单整个流程绑定一个表单此变更虽然在灵活程度上使得流程变得没先前灵活,当已经大大降低了流程在试图显示和开发上的难度需求与技术实现的折中流程管理每个节点上显示整个表单的内容每个节点上可以对表单的显示进行显示内容的定制,即可以控制表单上每个单元格的可见、可读等权限的控制大大增加了开发的难度和工作量,但提供了相当的灵活性,为系统的特色功能之一考虑到该功能的实用性,牺牲一定的时间和精力是值得的。流程管理每个任务负责人配置 由角
20、色指定每个任务负责人的配置提供两种选择,可以由角色指派,也可以精确到人工作量上改变不大,却细化权限控制的粒度对于工单系统提供 基于角色和基于人的任务权限控制是合理的流程管理查看新建立的流程图查看建立的流程图,并且在每个节点上配置的表单权限也能一起查看增加工作量流程管理增加重置模板的功能对于上次未完成的流程提供重置功能,即流程的基本信息使用上次的模板流程管理修改流程未实现工作量增加太大,如果流程可修改需要引入本版控制机制在时间有限的情况下,暂时搁浅此部分功能表单管理可配置基本的样式,类似建数据库一样实现表单定制支持任意样式,包括单元格合并、字体控制、html组件实现,类似使用js实现一个简单的e
21、xecel 或者dw大大增加的开发难度和工作量此为核心需求之一,必须实现表单管理增加重置模板的功能对于上次未完成的表单提供重置功能,即表单的基本信息使用上次的模板任务管理任务可以主动启动和指派启动任务可以有第三方模块启动,增加工单系统与其他系统相互交互调用的功能,以xml 作为数据接口相当于引入新的模块,加入了jms 和 信息传递模块,开发、调试、测试大约增加了一周的工作量是系统能够和第三方软件结合,大大提高了系统的灵活性。事务管理查看组内任务去掉此功能,把组任务,个人任务,委托任务 一并放入待处理任务是的功能更加紧凑,使用户在一个页面里即可查看到需要他处理的任务事务管理查看历史任务,可查看该
22、流程已经运行到的任务节点加入查看历史表单功能,可以查看当前按表单所处的状态由于表单的显示采用组件配置,并没有增加很多工作量每个模块加入查询分页功能增加了一定的工作量分页有利于速度的提高,查询可以在海量信息里让用户很快的找到感兴趣的内容结论:我们需求的获得完全是出于技术调研和自我经验,真正的用户并没有参与其中,所以我们尽可能的做到灵活性,自我感觉这样的产品危险性比较高,很可能在实际使用中遇到许多无法预料的问题。并且讲可以预见的是由于用户没有参与到实际的需要中,并且系统的原型也没有展示给用户,在界面问题上将会出现最多的需求问题。 从整体来看,开发过去属于基于原型的增量开发。设计方案数据库设计流程E
23、R说明:由于考虑到支持流程可定制,我们开始想过给 jbpm的一些表中加入一些字段以达到支持灵活的需求,但这牵涉到对jbpm开源框架进行重构,并且我们对jbpm也没重源码上进行解读,所以我们放弃这一种办法。我们采用的设计思想 如 上述 ER 模型,我们通过对jbpm数据库结构的 一些研究并进行了一些包装,我们抽象出 流程定义,流程实例 活动节点,并分别用外键关联 jbpm 中相应的 实体,本质上就是对jbpm 进行了一下包装,把业务数据都放在 这些自定义的实体上,jbpm 的数据表负责流程逻辑相关的数据。 用户ER说明:用户模块对权限粒度要求比较细:总体来说就是 用户与用户组多对多关联,用户组相
24、当于角色控制了基本的权限,资源与资源组多对多关联,并且资源组与用户组关联,这样就间接实现了资源的权限控制,这在小型的系统中是比较常用的用户管理数据模型了。关于hibernate实现持久层和session的管理在我们的数据库建模中,存在很多一对多的关系,一开始我们使用hibernate全部实现了所以的关联关系,在实际的调试中由于我们对延迟加载的不精通我们在很多部分都使用了非延迟加载,其中我们遇到了几次内存溢出的问题,这主要是由于非延迟加载把所有的相关数据都一次加载出来了,比如查找流程类型的时候几乎把数据库查询了一遍。无奈之下 我们把延迟加载用上,结果出现这样或那样的问题(主要是学艺不精),最后我
25、们干脆放弃使用hibernate来管理 1对多的关系,我们把model 对象里面集合属性全部去掉使用一个外键字段,有关联关系的我们就多写一个service 方法,这样我们发现虽然增加了访问数据的次数但每次获得的数据都是最小最实用的。在此我的经验就是 如果你对hibernate 不是那么精通建议放弃 hibernate 1对多关系维护.在一开始的session管理中,我们使用的是threadlocal方式,为每个连接保持一个session,在实际的操作中,经常出现一个session中有 duplicated model 情况,并且一些问题时而出现时而不出现,还是由于我们对hibernate se
26、ssion 具体原理不是很清楚,在调试过程中吃尽了苦头,最后我们采用的方法是,我们在service 层自己管理session,每个sevice 方法对应一个session.这样所有的问题都解决了。自定义表单的设计从大体思路来讲,表单设计是基于js 的类execel 实现。每个表单独立保存为一个html,以字符串的形式保存在数据库中,前台显示时取出 html 串 以组件展现,在实现阶段 设计到大量的DOM 操作,这需要扎实的 html 和js 基础。整个workbench表单操作格式设计表单项类型通过我们的工具,基本上能实现任意格式的表单,只是风格和外观上有所欠缺。表单的上的没一个控件或字段都对
27、应了 pro_data 表中的一条记录.我们保留整个html字段,并不用保存相关的布局信息.自定义流程的设计总体来讲,工作流设计器牵涉到大量界面操作并高级动作如拖拽等。在我们的实现中我们采用extjs 框架,我们的自定义流程 采用不同的节点来区分会签,对回退的实现采用用户画回退线的方法,每个转移线上可以配置转移条件,每个活动节点可以配置 表单权限 和消息机制。Workbench 任务节点属性配置任务节点配置表单权限通过点击权限控制 下的表单权限 弹出绑定的表单如下图构造转移条件消息模块的设计我们采用jms 框架来实现消息模块,其中我们的设计支持 本机内部通信,即可以向系统中发送或接受消息,这主
28、要用于任务的通知催办 和告警,目前我们消息支持 短信,邮件 ,和系统消息。同时我们消息模块可以接受外部系统的消息,这主要是为了流程与其他系统相结合。现在实现的是第三方使用我们的流程只要发送启动信息,并传递xml 数据即可。后记第一次发贴,发现写得东西大都是先前文档的简单粗暴连接,至于文字和技术内涵似乎无从找寻,我想论坛上每一个人都是这样走过来的吧,虽然我也常常做着一帖惊人的梦。我知道 要想给别人一杯水,自己必须要有一桶水,但此时此刻我只想要开个头,虽然我知道 我写得东西 会贻笑大方.但还是心存美好,希望大家能多多鼓励,多多交流。指出错误和不足之处。Ps:欢迎交流 sunlujingqq。com