宋芬
蘇州大學網絡中心 江蘇 215021
蘇州大學的OA系統是基于Lotus Domino平臺開發的,自 2000年一直運行至今。雖然定時做一些數據的清理和整理工作,但幾年的運轉,數據不停的堆積,給系統硬件造成壓力的同時影響了系統的性能——文件檢索時間不斷延長、系統運行速度不斷減慢。如此發展下去勢必會導致系統癱瘓。把歷史數據導出到檔案管理系統中,才能緩解OA系統的運行壓力。蘇州大學的檔案管理系統——南大之星,該系統支持的后臺數據庫是 SQL Server,無法直接讀取 Lotus Domino的數據,一般的做法是,工作人員手工把OA系統中的數據錄入到檔案管理系統中,可這樣做費時費力,還容易出錯。因此需要開發OA系統和檔案管理系統之間的接口程序,方便、快速和準確地收集OA中的數據。既能減輕OA服務器的壓力、確保OA系統的安全運行,還能減輕檔案管理系統管理員的工作負擔。
Notes提供了一個文檔數據庫管理系統。所有的應用都以數據庫的形式出現,所處理的對象就是數據庫中的文檔。一般說來,先由應用程序開發設計人員設計文檔(包括設計域、表單、視圖、文件夾、操作等),用戶則基于已有的設計創建文檔,并且按照定制的工作流程對文檔進行處理。每個數據庫(.NSF文件)都可以包含不同格式和類型的文檔。
關系數據庫(RDB:Rational Database)是以二維表格及其關系作為數據模型的數據庫,表的每個行稱為一條記錄,每一個列稱為一個屬性(或字段),所有屬性名稱構成的集合稱為關系模式。關系模型由關系數據結構、關系操作集合和完整性約束三部分組成。將對象數據庫管理系統(ODBMS)定義為一個集成了數據庫能力與面向對象編程語言能力的數據庫管理系統(DBMS)。關系型數據庫通過SQL 語言訪問數據,提供對數據的實時訪問,使用實時查詢來定位數。Notes數據庫與關系數據庫的比較總結如表1所示。

表1 關系數據庫與Notes數據庫比較
在Notes應用開發過程中,經常需要實現Notes數據庫與其他關系型數據庫(如Oracle、Sybase、SQL Server、DB2等)的數據交換,為此Lotus公司推出了相關組件來完成Notes數據庫與關系型數據庫管理系統(RDBMS)之間高效、快速、可伸縮的批量數據交換,如 Notes Pump、LEI、 DECS和LS:DO等。
早期的 Notes Pump組件,它作為Lotus公司 Domino/Notes 系列產品之一,是一個企業級規模的數據分發服務器,它可實現RDBMS和Notes 數據庫之間數據的周期性復制,主、輔Domino服務器之間數據的及時和自動的同步。數據的移動可以是調度安排的,也可以是輪詢或手動的,還可以被某個特定的條件所激發。是一個基于服務器的 32位多任務數據傳輸引擎。
LEI(Lotus Enterprise Integrator)是Notes Pump的后繼產品,利用LEI工具的連接及行為來實現NOTES與SQL數據庫的連接,實際上起到中間服務器的作用,它使不同數據庫通過它的connection及activity文檔來實行數據交換。
DECS(Domino內置的企業集成服務:Domino Enterprise Connect Services)是Lotus 公司開發的一種技術的名稱,提供了一個從Domino應用到外部數據的深層次集成的連接性的方便使用的、基于表單的接口,在配置服務器的時候,需要選擇安裝 DECS。使用 DECS,開發人員擁有了一個不用編程的、模板化的應用,使得外部數據源變成了Domino應用的一部分。
Lotus Notes 為了方便與其他程序進行數據接口,還提供了一套專門的擴展類庫,即 Lotus Script Data Object (LS:DO),它是由 ODBC Connection,ODBC Query,ODBC resultSet 三個類組成的一個集合,提供對外部的 ODBC 數據的完全讀、寫訪問。它們提供了通過ODBC Version2.0 標準訪問和更新外部數據庫中的表的屬性和成員函數。
通過上面的介紹,我們可以看到,有多種方法可以實現Lotus數據庫和關系數據庫之間的互操作,在本文中,筆者通過ODBC連接SQL SERVER 數據庫,把OA系統中文檔的紅頭、文號、標題、正文內容、主題詞、抄送、抄報、發文單位、校對、附件等內容傳輸到檔案管理系統的相應字段中。
Lotus Notes使用ODBC標準存取異種數據庫信息。通過Notes里內嵌的公式或Script語言,可以在Notes文檔中引入非Notes信息,可把現成的數據轉換成Notes數據庫。在存取外部數據之前,必須先定義一個數據源,以便讓ODBC驅動程序管理器知道怎樣獲取數據。一個數據源把一個特定的ODBC驅動程序和要存取的數據庫聯系在一起,并包括用戶想存取的數據,它與服務器或目錄、后臺DBMS(數據庫管理系統)以及網絡平臺相聯系。ODBC驅動程序管理器負責將應用程序的SQL語句以及其他的信息傳遞給驅動程序,而驅動程序則負責將結果集傳回應用程序。
LSX兼容模塊允許用戶使用LotusScript語言來編寫存取外部數據的程序,在訪問ODBC類之前,需把下面的語句放置在(GLOBAL)對象的(OPTIONS)事件:
USELSX“*LSXODBC”
Notes的ODBCConnection、ODBCQuery、ODBCResultSet三個類為Notes提供了用ODBC標準存取外部數據庫的屬性和操作。ODBC Connection 用于連接到ODBC數據源;ODBC Query 用于定義一個SQL語句;ODBC ResultSet在結果集合上執行操作的 ODBC的數據存取特性。使用 LotusScript Language 編寫公文歸檔程序將檢索數據寫入SQL Server 數據庫,程序中首先要創建訪問 ODBC的 3個類,然后使用ConnectTo函數連建立與SQL SERVER的連接,將標準查詢語句賦給qry.sql,然后和結果集相連,執行函數result.execute查詢出表中最大的 ID值,為在表中新增記錄做準備。部分代碼如下:
初始化與SQL SERVER相關變量:

建立與SQL SERVER的連接:實現增加新記錄,有一種簡單方法就是把組織好的insert語句賦值給qry.sql,然后執行result.excute。在實際運行過程中,大部分情況下可以正常運行,但在處理某些公文時會出現missing argument的錯誤提示。通過調試Lotus Script腳本并多次單步跟蹤腳本的執行情況,發現當插入內容中包含單引號時,就會出現這種錯誤(一般公文中如果涉及到外國人的名字,則都會出現單引號),insert語句本身的單引號和插入內容中的單引號產生了混淆。一種解決方法是使用函數,把半角狀態下的單引號轉換成全角狀態的單引號。但函數往往對字符串的長度有限制,而很多公文多會超出這個限制。且這種在整篇公文中遍歷的查找相應字符,然后再轉化的做法影響整個操作的效率。因此筆者采用的是另一種更可行和更高效的方法,用 addrow來增加新記錄。這種方法除了避開了單引號的問題,對于增加的每一個字段都非常的清晰,不會像insert語句那樣,把所有的內容都組合在一個語句中。Addrow方法可讀性強,不容易遺漏內容,也便于增加或刪除需要處理的字段。代碼如下:




當然除了這些操作之外,Notes還可以在本環境中對關系型數據庫進行更多的操作。例如增加表、刪除表等。只需將相應位置用相應的SQL語句替換即可,可以用Create table來創建表,用INSERT,DELETE,UPDATE來更改表的內容。
用戶只需要在自己的計算機上安裝Lotus Notes6.5以上的客戶端軟件,創建好連接到SQL SERVER的ODBC數據源,使用本文中的公文歸檔程序,就可以輕松的把OA中的數據轉移到檔案管理系統中去。這不僅提高了設備管理的安全性、可靠性及工作效率,同時為設備管理者提供了快速的信息收集、傳遞和處理方法,方便了OA用戶與檔案管理人員之間的交流與合作。并且使得歷史公文信息可以更快的被用戶查詢。這對辦公自動化系統與檔案管理系統具有十分重要的意義,使得辦公自動化系統與檔案管理系統的功能不斷地強大,并為用戶提供更好更優質的服務。
[1] 蘭雨晴,晏海華,劉超,Lotus Domino/Notes群件技術教程[M].北京:機械工業出版社.2001.
[2] Notes數據庫--文檔數據庫探究[EB/OL]. http://tech.csai.cn/dbms/.
[3] Lotus愛好者論壇[EB/OL]. http://www.lotusfans.com/forum/.
[4] 崇大志,何軍.DOMINO應用系統中異構數據交換技術的研究與實現[J].電腦知識與技術.2007.