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


发布评论