工作流设计(共11页).doc
《工作流设计(共11页).doc》由会员分享,可在线阅读,更多相关《工作流设计(共11页).doc(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 SevenStar Workflow Enginee 简单就是美。IT领域向来是名词、概念泛滥,正所谓一流公司做标准,经过这些大公司炒作之后,简单问题复杂化,EJB、EAI、ESB、SOA、工作流等等概莫如是。稳定可靠的系统建立在简单的结构之上,简单带来的是全面的优势,性能、可维护性、可控性、可扩展性等等。在清晰的明白所要解决的问题以及如何解决之后,便会发现,其实并没有那么复杂。引擎只是工作流系统中的一部分,其他还有流程设计工具等,在这里我们只对引擎做简单介绍.1 问题的提出在有工作流引擎之前,不外乎是借助状态字段来完成流程性功能。示例代码如下:public voi
2、d doFlow(String sts) if(“A”.equals(sts) int result = do 业务代码1。 if(result 0) doFlow(“B”); else doFlow(“C”); if(“B”.equals(sts) int result = do 业务代码2。 if(result 0) doFlow(“C”); else doFlow(“D”); if(“C”.equals(sts) int result = do 业务代码3。 if(result 0) doFlow(“A”); else doFlow(“B”); if(“D”.equals(sts) 业务
3、代码4。 return;/结束如上代码所示,复杂的并不是业务逻辑代码,而是代码承担了过多的职责,夹杂了复杂的流程逻辑判断。显然,我们将这段代码进行职责分离能够降低代码复杂性。合适的架构来自于Refector,工作流引擎亦来源于流程逻辑从业务逻辑中的分离。目标明确了,当然我们需要归纳分析具体有哪些流程逻辑,之后才能升华。抛开工作流、流程、节点、任务等已被定义的概念,按照自己的思路去思考引擎所要解决的系列逻辑问题如下: 工作流核心逻辑1) 处理先后顺序。2) 谁能处理。3) 是否可以处理了。4) 如何处理。5) 在哪里处理。6) 处理完后如何切换状态。 工作流考虑问题1) 版本问题。工作流的逻辑是
4、会变化的,自然是老的走老的,新的走新的。2) 每次的处理顺序记录。需要引入流程定义与实例的概念,显然每次的处理逻辑都可能是不一样的。3) 子流程问题。父流程,子流程如何交互?4) 聚合分支问题。5) 动态人员分配问题,即无法在流程定义的时候定义谁来处理这个问题,只有在运行时才能确定。比如考核,只有在运行时,根据被考核人,才能确认它的考核人是谁(被考核人的上级)。6) 流程事件 工作流与应用系统整合的问题1) 如何整合应用系统与工作流系统的权限。2) 如何让用户直接查询到需要处理的流程主体列表,比如合同列表、申请列表等。3) 如何整合应用系统与工作流系统的事务。4) 应用系统与工作流系统如何交互
5、。基于以上考虑,参考各大流行工作流引擎,我们设计了SevenStar Workflow Engine可以说它未必是规范、完美的,但一定是相当实用的,没有丝毫学院派味道。2 引擎模型 图 2-1-1 引擎模型图引擎将工作流的定义与运行完全分离,这样可以在运行时改变流程。 Definition1. 流程定义:功能为区分不同的流程,需要考虑的主要是版本问题,主要属性如下 序号名称列名类型备注1流程名称idnumber(12)2流程版本namevarchar2(200)3流程主体类型mainpart_typevarchar2(200)流程处理的主体类型,比如说 合同/申请/审批/请假 等2. 节点定义
6、:流程定义与节点定义为1对多关系,节点需要考虑的主要问题1) 聚合分叉,即串并行问题2) 节点执行条件,特殊情况下要考虑节点是否能启动序号名称列名类型备注1ididnumber(12)2节点名称namevarchar2(100)3显示名称display_namevarchar2(100)4流程定义proc_def_idnumber(12)5节点类型typevarchar2(10)start 起始节点startfork 起始分叉end 结束节点endjoin 结束聚合fork 分叉节点join 聚合节点joinfork 分叉聚合plain 普通6节点执行条件类型condition_typevar
7、char2(10)如果是shell,则value为 脚本id如果是action,则为实现类主要在于实现join的节点,只有判断所有的节点都到了才能执行7节点执行条件condition_valuevarchar2(20)3. 任务定义:节点定义与任务定义为一对多关系,任务需要考虑的主要问题1) 任务的类型,任务可能是表单/工单、动态表单,也可能是java代码、脚本、启子流程等2) 任务可能是必须执行的,也可能是可选的,比如OA中的办与阅的任务3) 任务的完成,可以执行此任务的可能有多个人员分配,可能中间一个人完成了就可以了,也可能需要所有人一起完成,也可能是认领模式,当然也可能是更灵活的模式序号
8、名称列名类型备注1ididnumber(12)2任务名称namevarchar2(200)3任务显示名称display_namevarchar2(200)4节点node_def_idnumber(12)5任务类型action_typevarchar2(20)form 表单执行(人工任务),填urldynamic 动态表单action 后台任务shell 脚本subflow 子流程6任务值action_valuevarchar2(1000)看action_type的值如果是 form,则填入表单页面如果是 dynamic,则填入动态表单id如果是action,则填入实现类如果是shell,则填入
9、beanshell调用脚本id如果是subflow,则填入子流程id7是否必须完成is_mustvarchar2(1)Y/N如果必须完成的话,只有完成,节点才能往后走8是否必须每个人都完成is_allvarchar2(1)Y/N如果必须全部完成,只有分配的人员每个人都完成了,任务才能完成,节点才能往后走9是否打开认领模式is_claimvarchar2(1)Y/N如果是认领模式,分配人员必须先认领,才能开始做任务人员分配定义:即任务上的人员分配定义,哪些人可以执行此任务,需要考虑的问题1) 与现有权限架构的整合2) 运行时才能确认可以执行人员的问题序号名称列名类型备注1ididnumber(1
10、2)2分配类型assign_typevarchar2(200)user/role/dept/group。action/shell 如果是action/shell的话那就是根据脚本确定执行人,比如人员是根据 创建人动态确定的3分配值assign_valuevarchar2(200)如果是user,则为user_iddept则为dept_id4分配名称assign_namevarchar2(200)5任务定义表task_def_idnumber(12)7状态stsvarchar2(1)任务事件定义:即任务的Action监听事件序号名称列名类型备注1ididnumber(12)2事件名称nameva
11、rchar2(100)3事件显示名称display_namevarchar2(200)4事件类型typevarchar2(100)start/end/error/finally/back5关联类型target_typevarchar2(100)node/task6关联值target_valuevarchar2(200)7动作类型action_typevarchar2(100)action/shell8动作值action_valuevarchar2(200)9状态stsvarchar2(1)Y/N4. 路径定义:即节点之间走向,状态切换,主要考虑的问题1) 动态路径问题,即目标节点是运行时确认的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工作流 设计 11
限制150内