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