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

类别:VC语言 点击:0 评论:0 推荐:

(一)
首先,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

本文地址:http://com.8s8s.com/it/it2048.htm