如前文所说,基于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个人名称保存于流程文档。
下一篇文章详细讨论本流程系统的设计。

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

  1. 95. 基于Notes/Domino的文档工作流系统(七)

    本文继续剖析基于Notes/Domino的文档工作流系统的设计和代码,以方便用户能应用和创建自己的工作流.(CSDN的下载资源一旦上传就不能修改,很不方便,现已将下载地址改到GitHub,若发现下载有 ...

  2. 89. 基于Notes/Domino的文档工作流系统(一)

    介绍 Notes/Domino作为一个数据库系统和开发平台,具有许多与众不同的特点.这些特点使得它适于开发某些类型的应用系统(同时就不是开发其他一些类型系统的适宜平台),这其中就包括工作流.这里指的并 ...

  3. 90. 基于Notes/Domino的文档工作流系统(二)

    XPages下的工作流演示 网页外观的可能性在技术上超过Notes客户端里的表单,Web应用程序在页面设计上花费的精力和取得的效果也远远超过基本保持传统客户端应用程序界面风格的Notes.我是程序员, ...

  4. (附源码)springboot基于WEB的高校文档打印系统 毕业设计101004

    Springboot 高校文档打印系统 摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以 ...

  5. MFC中 给基于CFormView的单文档添加背景图片

    关于基于CFormView的单文档应用程序,添加一个图片背景的方法之一如下: 下面是利用LoadImage实现.(先在程序目录中添加背景图片back.bmp) 1.在view类中添加类成员变量:(为C ...

  6. (一)JAVA基于OPENXML的word文档插入、合并、替换操作系列之基础篇

    (一)JAVA基于OPENXML的word文档插入.合并.替换操作系列之基础篇 前言 什么是Open Xml? Open XML SDK 这系列笔记要做点什么? 涉及技术点 关于word.openxm ...

  7. (五)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之word文件合并[支持多文件]

    (五).JAVA基于OPENXML的word文档插入.合并.替换操作系列之word文件合并[支持多文件] 二.word合并的多种方案简单比较 三.基于Open Xml WordprocessingML ...

  8. java openxml 操作 word,(三)、JAVA基于OPENXML的word文档插入、合并、替换操作系列之html转word...

    (三).JAVA基于OPENXML的word文档插入.合并.替换操作系列之html转word 系列笔记传送门 富文本转word文档 准备待转换内容 内容清理与格式化 转换成word文档 输出结果展示 ...

  9. 使用xsl将xml转化为HTML文档,基于XSL将XML文档转换为HTML格式文档的方法与流程

    技术特征: 1.一种基于XSL将XML文档转换为HTML格式文档的方法,其特征在于,包括: S1,新建一个与XML文档同名的HTML格式文档: S2,定义转换算法,实现XML文档到HTML格式文档的转 ...

最新文章

  1. 常用的 Normalization 方法:BN、LN、IN、GN(附代码&链接)
  2. 【BZOJ】2982 combination
  3. 教师查询系统C语言,教师管理系统c语言版
  4. 点关机后主机不能自动关机的原因
  5. Redux学习(一)——Redux的使用过程
  6. 十分钟轻松搞懂CSS的五大定位方式!(建议收藏)
  7. lambda函数 python菜鸟教程-Python3 函数
  8. 算法排序----二分排序法
  9. 推荐几本计算流体力学(CFD)书籍
  10. 【RSLogix5000】—(1.1)—厂房ControlLogix系统介绍(硬件介绍)——原理
  11. 【新书推荐】【2019】电磁理论和等离子体电子学的工程师手册
  12. 3.1 腾讯云AI能力矩阵
  13. 宝塔一个IP创建多站点
  14. 基于Python的贝壳某城市二手房交易分析及预测系统 文档+项目源码+演示视频
  15. wxwork和wx.qy判断企业微信小程序编译运行环境
  16. 【Python实战案例】读取雷达基数据
  17. Python仓库管理系统源代码,库存管理系统源码,基于flask,内含数据库文件,已实现出入库、库存预警,库存搜索等功能
  18. 使用Obj2gltf 将Obj格式转换为glft格式
  19. 数睿数据为代表的企业级无代码智能软件产业迎来新风口
  20. 鸿蒙OS 2.0内测版,鸿蒙系统2.0安装包下载地址

热门文章

  1. P1880 [NOI1995]石子合并
  2. 测试用例-微信视频通话
  3. 三. SpringBoot原理
  4. [喵咪BELK实战(2)] elasticsearch+kibana搭建
  5. 华为服务器怎么查看raid型号,工具查看服务器raid配置
  6. 一个完整系统的测试过程
  7. 2021年化工自动化控制仪表考试APP及化工自动化控制仪表模拟考试题库
  8. Android 天气APP(二十八)地图搜索定位
  9. python安装wx模板_如何安装python的wxPython模块
  10. SPI协议讲解与总结