91. 基于Notes/Domino的文档工作流系统(三)

如前文所说,基于Notes的工作流系统之所以在Notes应用程序里长盛不衰,就是因为Notes平台适合开发此类系统。无论是政府和企业日常办公中的请假、用车、办公用品领用、人事招聘,还是企业生产经营过程中的采购、报销、设计审批,所有这些流程都可以建模为以文档为核心主要活动为用户审批的工作流。而Notes平台正有许多便利条件开发此类系统。
我们以需求——设计——编码的顺序来研究这样的一个工作流。为了方便,还是以本系列文章演示的采购工作流为例。从武汉到重庆,步行、乘轿、骑马、骑自行车、坐汽车、火车、飞机……,使用不同工具的人自然有不同的计划和行程安排。同样,用过程式的C语言和面向对象的Java来开发同一个画图程序,分析的思路和方法也会迥然有别。工作流系统可以用不同范式(paradigm)的语言和不同类型的数据库开发,建模和设计过程差别很大,本文当然是用Notes平台独特的概念和工具来设计工作流。
主表单设计
从用例(use case)分析,采购工作流系统要完成的即是采购工作单的审批过程。流程中不同角色的用户分别负责录入、审批、核准和补充信息等不同工作。用一个Notes文档来记录采购单,它的创建、查找、修改和删除都是普通的Notes任务,唯一需要注意的是权限设置。采购单文档不仅有整体的读者和作者权限控制,其中的部分信息的阅读和编辑权限也可能只对某些用户开放。在表单上,可使用多标签页的表格和存取控制区段(controlled access section)来实现此目的。例如,在采购表单里,由不同用户负责输入的字段被安排在Basic、Payment Info和Expense Info多个表格标签页里,每个标签页里有一个存取控制区段,它的编辑者为显示时计算诸如"[IT]":SecMainEditors的公式,也就是除了作为特权用户的[IT]角色,每个区段的编辑者保存在表单上方的隐藏域中,而这些字段的内容又和整个文档的读者作者一样在流程中由代码自动设置。
 
Notes工作流特点
接下来便是工作流的设计。一般地抽象而言,一个工作流可以视为由以下要素组成:一个工作流实例(instance);一组节点(状态);在每个状态上实例拥有的一组操作,既可以是系统自动进行的,也可能是人工操作,每个操作结束后实例跳转到另一状态(也可以是同一状态)。附属于工作流的就可以包含与流程有关的业务实体,进行人工操作的用户及相应的权限系统和信息通知系统。与通用工作流相比,Notes平台上的工作流有一些特点。
一、    工作流实例和业务实体都以文档为载体
工作流实例本身只包含与流程有关的信息,例如流程名称、当前节点等。一个工作流之所以有意义,是因为与它绑定的业务实体,比如在采购流程里就是一张采购单。在Notes系统里,两者都以文档为载体,并且往往包含于同一个文档。
二、    操作以Notes系统内用户审批为主
通用工作流各个环节的动作可能五花八门,既有可能是人为的审批,也可能是系统的自动处理,还有可能是调用其它系统的接口。Notes工作流虽然有时也会使用定时代理来处理处于某个节点的文档,用ODBC、JDBC之类的数据与关系型数据库或者其他系统做交互,但大多数工作流的绝大多数动作都是用户的审批。
三、    串行与并行
在讨论串行和并行流程之前,先要界定这两个词的含义。一个流程如果在某个时间同时具有两个或以上的状态,并且每个状态的处理都可以独立同时进行,我们就说这个流程在这些状态上是并行的。相反,如果一个流程在一段时间内虽然状态变化,但任意时刻都只处于一个状态上,我们就说这个流程这段时期或者这些状态上是串行的。与此种分类相区别的是同一节点上多人审批的两种不同模式。“与”模式下某个节点的多名用户都审批完才进入下一节点;“或”模式下某个节点的多名用户只要有一名审批完即转到下一节点。
这些不同的流程审批情况,本来用Notes实现都没有区别,唯一的瓶颈是Notes特有的保存冲突机制。这个问题我在 43. 复制或保存冲突之保存篇一文里已详细讨论。简单地说,就是一个文档在被打开到保存这段时间内,如果又以另一实例(未必需要是其他用户,只要文档从数据库里取出)被打开,那么保存时时间上的后者就会出现冲突。保存冲突不能像复制冲突那样设置合并或者忽略的选项。在客户端中,用户有很多方法可以触发当前文档的保存,在Web系统里,多个用户编辑同一文档的时间段发生重叠也是很难避免的事情。所有这些都导致愚蠢的保存冲突,而又没有一致优雅的解决方案。所以在Notes应用程序里不得不尽量减少多个用户在同一时间段内编辑同一文档的可能性。因此,并行流程这样一种极易导致保存冲突的模式只能被放弃。同一节点上多人审批也同样危险。
最后关于流程每个节点的当前用户,在流程文档里是全部以Notes个人名称保存,还是允许保存角色和群组,在配置流程节点的表单的Remarks区段里做了详细讨论,包括使用角色和群组可能带来的好处、各种情况下的可行性、对代码和设计以及用户功能的影响,有兴趣的朋友可以查看。最后的结论是,在本流程系统里,各个节点的当前用户全部以Notes个人名称保存于流程文档。
下一篇文章详细讨论本流程系统的设计。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值