(一)
首先,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://www.anti-gravitydesign.com