如何实现多人审批同一文档

原创 2003年01月10日 14:03:00

(一)
首先,Lotus Notes作为一个文档型的数据库,并未提供记录(文档)的锁定。
因而作为一个面向群组的文档,如果不采取措施,将会发生文档的编辑和保存冲突,这
是显然的。Lotus 提供了复制技术和版本控制技术,但是,由于应用的复杂性,尚且不
能满足我们的要求。于是许多人都想用编程控制的方法实现这种控制。
在这里,我们主要讨论关于编程的方法,关于复制和版本控制另作讨论。

(二)
解决方法之一:加锁
加锁分为两种,一种是文档锁,一种是自锁。两种方式各有利弊。但是通常的方式是文档锁。
一、文档锁:
所谓文档锁就是对目标文档建立一个附属文档,利用附属文档对目标文档进行锁定。
具体描述如下:
附属文档通常和目标文档建立一对一的连接。
在附属文档中设立状态域,标识对目标文档拥有编辑权限(保存权限)的用户属性。
在目标文档被编辑并且保存时,把当前状态写入附属文档的状态域,从而为文档加了锁。如果有
其他用户试图保存时,首先检测附属文档,判断状态域,如果不符合保存条件,取消保存。从而
避免了冲突。
值得注意的是;加了锁定的文档,一定要在操作结束时解锁,也即复位附属文档的状态域。
二、自锁:
所谓自锁,就是在文档中设立状态域,在此文档第一次保存时修改此状态域的值,记录文档当前
拥有编辑保存的权限的用户信息。此后的用户打开文档时,首先判断状态域的值,若有人正在编
辑,则不进入编辑状态,从而避免了冲突。此种方式同样需要解锁。
三、两种方法的比较:
原理上是一致的。
但是我们知道当目标文档加锁后,解锁前,如果发生意外,如断电,死机等情况使得来不及解锁,
就关闭了文档。再次打开时,已经成了死文档,不能进行修改了(除非管理员)。采用第二种方
法,肯定会遇到此类问题。但是如果是第一种方法,适当设置权限,编制解锁程序,可以使用户
自己就能完成解锁,不必麻烦管理员。

(三)
解决方法之二:版本控制
所谓版本控制,就是当多人同时审批一篇文档时,分别保存各自的文档作为目标文档的答复。
即用不同的版本实现多人审批。
一、设计表单时,选择表单属性为版本控制。
二、编程实现灵活的版本控制。
请参见有关版本控制的讨论。


对文档的版本控制

(一) 什么是版本控制?
许多人对菜单里的选项[文件]-[另存为新版本]表示疑惑,这与命令
@Command([FileSaveNewversion])意义是相同的。那么到底是什么意思呢?我们先理解一下
版本控制。
Notes提供了一个设计绝妙的双向复制机制。在复制时不可避免的会发生多个人在同一个服务
器或不同服务器上编辑了同一个数据库或其复本的同一个文档。那么怎么处理这些不同人的
修改呢?当然在服务器看来,他们是具有同等地位的,去掉任何一个都是不合适的,于是,他
们的信息分别保存,于是就产生了同一文档的不同版本。

(二)
下面的部分摘自Notes 帮助数据库。
在表单中添加一个 $VersionOpt 域允许用户创建编辑文档的新版本。使用这个特殊
的域比使用表单的版本控制要灵活的多,因为后者将影响使用该表单创建的每一个文档。
1. 创建名为“$VersionOpt”的域并将它定义为计算的文本域或可编辑的关键字域,
不要选择“允许多值”或者“可使用不在列表中的值”选项。“显示时计算”和“创建
时计算”的域不能在这种条件下使用。
2. 对于一个关键字域,请选择“输入关键字(每行一个)”并编写每一个项目,使用关
键字和与之等效的同义词。例如,自动保存为答复文档 | 2。
3. 单击设计窗格,单击“公式”并编写公式。
4. 对于计算域,请添加公式,对于可编辑的域,请添加缺省值公式。
计算的文本域
在计算的 $VersionOpt 域中可以包含以下值:
值跟踪类型0不进行版本跟踪1当用户选择“文件”“另存为新版本”来保存文档时,新的
版本变为答复文档2保存时新的版本自动变为答复文档3当用户选择“文件”“另存为新版
本”来保存文档时,旧的版本变为答复文档4保存时旧的版本自动变为答复文档5当用户选
择“文件”“另存为新版本”来保存文档时,新的版本变为并列(同级)文档6保存时新的
版本自动变为并列(同级)文档

可编辑的关键字域
在可编辑的关键字域中,要使选项更容易被用户理解,请使用必要的值作为关键字同义词,并在同义词前面添加可读性较强的关键字名称,使用竖线 (|) 间隔关键字与同义词。例如:
不进行版本跟踪 | 0
在使用“文件”“另存为新版本”时创建答复文档 | 1
自动创建答复文档 | 2
在使用“文件”“另存为新版本”时升级为主文档 | 3
自动升级为主文档 | 4
在使用“文件”“另存为新版本”时创建新的主文档 | 5
自动创建新的主文档 | 6

Activiti逐级审批

动手实现了一下activiti下实现中国特色的逐级审批。 准备工作是写一个人力资源服务类并将它注入到applicationContext;这个服务类就是模拟上下级关系:kermit -> gonzo...
  • sunxing007
  • sunxing007
  • 2013年01月10日 21:48
  • 11537

JIRA中的并联审批流程定制

JIRA号称可以跟踪任何事务,让JIRA的流程来匹配团队的工作流程,而不是让你的团队适应JIRA的工作流程。但是在实践中,有些有些流程用JIRA还是比较困难的,比如并联审批流程,一个并联审批流程需求大...
  • yuxiangji
  • yuxiangji
  • 2013年10月28日 15:57
  • 4315

禁止多人使用同一账号在系统上进行操作[踢人操作]

在开发中遇到一个问题,系统内,同一个账号可以在不同的地方多个人同时进行登陆,操作。    要求是同一账号在系统内必须保持唯一,即,若是有人用同一账号登陆了,已登录账号失效        解决方案...
  • u013630876
  • u013630876
  • 2015年04月02日 09:53
  • 750

Activiti系列(四)——设计指定Assignee+审批

上面的三篇博客中,主要是说Activiti比较基本的,这个是我们项目中设计的Activiti的Designer。 主要解决的问题: 1、提交人可以是任何人。这里我们用变量。 2、审批人用L...
  • u010540106
  • u010540106
  • 2016年03月27日 21:41
  • 9064

jBPM 整理文档 工作流基础

1. 工作流基础 1.1. 工作流相关概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息...
  • ntt126796
  • ntt126796
  • 2016年03月16日 16:12
  • 433

jbpm3 流程定义文件

jbpmConfiguration     stagePretreatmentAction                   jbpmConfiguration            ...
  • yemao100
  • yemao100
  • 2015年06月05日 15:55
  • 128

linux环境下的多人聊天程序设计

STEP 1:老师给出了原始的程序,是功能不完善的,也就是让我们把发信息的用户名和时间啥的显示出来,这样不是比较合理嘛;原程序是可以实现传text的,就是没有用户名而已。 先跑一下(切换到你放这三文...
  • xerjava
  • xerjava
  • 2015年05月19日 15:59
  • 741

gitlab多人协同工作

gitlab多人协同工作 本文为亨利向《Git权威指南》的作者蒋鑫老师的答疑邮件写成。  这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答。  蒋鑫老师的细致专业的解答让...
  • Lost_in_the_woods
  • Lost_in_the_woods
  • 2017年06月01日 08:21
  • 436

JBPM学习(三):管理流程定义

概念: ProcessDefinition,流程定义:一个流程的步骤说明,如一个请假流程、报销流程、是一个规则。 ProcessDefinition,流程定义对象,是解析.jpdl.xml文件得到流程...
  • v123411739
  • v123411739
  • 2014年05月02日 23:33
  • 5615

使用git fetch和git rebase处理多人开发同一分支的问题

情景有的时候会遇到这种问题,比如说有两个人,在同一个分支进行开发,假设是我自己,跟我的同伴;现在,我写了一部分代码,准备push到远程了,于是我执行git add、git commit,一切ok,没问...
  • azureternite
  • azureternite
  • 2017年07月26日 17:31
  • 333
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何实现多人审批同一文档
举报原因:
原因补充:

(最多只允许输入30个字)