Lotus Notes程序設計隨筆(一)
作者 李建壹 Louis Lee(小路哥)
一、前言
許多初學Lotus Notes(Lotus Notes以下簡稱Notes)的朋友常常會因為Notes學習范圍太廣、教育訓練課程太貴、中文資料太少?等等因素,而不知該從何開始入門學習。不過因為這些因素而放棄的話,其實是非常之可惜的,畢竟Notes的功能及其整合性在群組軟件領域中,仍然是領先其它群組軟件的佼佼者。
Louis為了讓許多初學Notes的朋友可以快速上手,所以決定著手撰寫此系列的文章,希望以最淺顯易懂的白話文來為初學者建立Notes程序設計最基本的觀念(但會不會中斷不敢保證 :p)。不過既然是「隨筆」,所以一些順序的編排就不會那么的有系統。另外,在章文中雖然偶爾會提到一些技術觀念,但并不屬于高深的技術文件,純粹只是觀念養成的文章。若您想進一步了解文中提及的觀念時,Louis「強烈」建議直接參考Notes程序設計說明資料庫。當然,本系列文章中若有訛誤還請各位前輩高手多多指教。
二、Notes學習方向
Notes的學習方向主要分為程序設計與系統管理兩部份,一般通稱為Notes AD(Application Development)與SA(System Administration),而這也是IBM官方的說法。不過,有時候AD也有人稱為AP,而SA則常會與IT界常用的系統分析(System Analysis)搞混,所以在與其它朋友交流時可千萬不要雞同鴨講。
但不論是Notes AD還是SA的知識,這兩者并無明確界線,而且兩者其實是相輔相成的。以ACL的設定來講,就無法明確歸納至AD或SA任一范疇,因為不管是在開發應用程序(應用程序以下簡稱AP)或是管理Domino系統,ACL的設定都是必須的常識。另外,在開發Web AP時,為了讓瀏覽器使用者可以正常瀏覽存取Web AP的內容與資料,也須要先在服務器上做一些設定,而這也是開發人員所須要了解的。
所以就Louis個人的觀點而言,千萬不要將自己的角色局限在程序設計師或系統管理員而排斥學習任何一方面的知識。因為如此只會讓您在執行一些任務時捉襟見肘罷了。接下來就讓我們進入的正題吧!!
三、Notes資料庫的分類與基礎結構
在學習Notes AP開發的第一步驟,就是要先對Notes資料庫有所了解,如此才不會因為觀念不足或是錯誤而導致在開發過程中產生阻礙。所以Louis先整理一些觀念讓您稍微了解:
Top
(一)Notes資料庫的分類
以目前市場上的資料庫產品而言,就資料型態、功能性或配置方式分成好幾類,例如最常聽到的就是關聯式資料庫(Relational Database),通常簡稱為RDBMS或是RDB,而最具代表性的就是Oracle、DB2、Informix、SQL?等等,不過這都是要付授權費,如果是免費的,目前最紅的該屬MySQL了(Notes都可以跟這些資料庫整合喔~~)。
就資料型態而言,Notes屬于文件式資料庫而非關聯式資料庫。很多初學Notes的朋友對文件式資料庫這名詞通常都會很疑惑,一是因為網路上很難找到相關信息,二是對Notes還不是很了解。不過在之后的內容中Louis會陸續說明文件的觀念。
就資料庫的配置方式而言,Notes則被歸類在分布式資料庫,為什么呢?因為Notes
的資料庫可以藉由抄寫機制,將各資料庫抄本分置到各服務器與客戶端中。分布式資料庫的理論在網路上有很多資料,若有興趣的話可以到各大搜尋引擎網站找找。
(二)Notes資料庫的結構
每一個Notes資料庫在windows OS下是以檔案格式存在的,其擴展名通常是NSF,也就是Notes Storage Facility的簡寫,翻譯成中文就是Notes儲存設備。至于擴展名NTF也是Notes范本資料庫,全名是Notes Template Facility,是用來產生一般資料庫的范本。也就是說,您可以利用模板資料庫來新建一個資料庫,而此資料庫中的設計是與模板資料庫的設計一模一樣的。
按照官方的說法,每個Notes資料庫是由四個基本組件所組成:
1.ACL:
就是Access Control List,一般翻譯成存取控制清單,或是權限控制清單,顧名思義就是讓資料庫管理員可以指定使用者對該資料庫執行何種動作。
2.設計組件:
是指套表、視界、外框、圖文框、領航員?等等組件,而這些都是Notes資料庫最最基礎的組件,也是用來讓資料庫可以與使用者互動的基本組件,沒有這些組件,資料庫即無法運作。
3.所謂邏輯:
是指程序設計師在資料庫中所撰寫的程序語言,Lotus Script、公式、代理程序都是。主要是要運算處理資料庫中的資料,或者達成某些自動化的作業。
4.資料:
是指儲存在文件中的文字、數字、日期時間、附加檔案?等等信息。
四、資料的安全控管
若要簡單描述Domino對資料的安全控管,基本上由外而內可以分成幾關:服務器è資料庫è文件è隱藏公式。
以服務器這一關來說,是在服務器文件中控管的,例如允許或不允許哪些使用者存取此服務器、允許或不允許哪些使用者可以在服務器上建立或刪除資料庫…等等。
若是使用者被賦予存取服務器的權限,就會進入到資料庫安全控管這關,而這關的安全控管就是由資料庫ACL來決定的。
再來是文件的安全性控管,這是經由套表屬性之安全卷標下的選項,以及讀者與作者欄位來處理的。
最后就是隱藏公式,其實,隱藏公式根本就不算是安全性控管的方法,這只能說是開發技巧。因為即使透過隱藏公式把套表中的特定欄位隱藏起來,使用者仍然可以透過文件屬性方塊看到各欄位中的資料。
Top
五、ACL
既然我們在前面多次談到ACL,不稍微跟他交個朋友好像說不過去,所以在這兒就為大伙兒引薦他吧,呵呵。在ACL中主要有幾種組件設定:使用者類型、權限類型、執行動作。
設定使用者類型是為了避免ID被誤用。舉例來說,通常服務器在資料庫ACL中都是管理員權限,假設服務器ID被有心人士盜用,可能就會造成極大的破壞。所以為了防范有心「人」士進行這種破壞行動,就必須在ACL中正確設定為服務器類型,如此該人士即使拿到服務器ID也沒辦法使用Notes client來對資料庫執行任何活動。因為,服務器不是「人」,所以不會使用Notes client(不過在系統管理中,Louis強烈建議把服務器當作是「人」,這樣有助于管理概念的建立)。但相對的,如果未設定適當的類型,也會導致某些動作無法執行。
再來是權限類型,依權限低高依序有七層-沒有權限、儲存者、讀者、作者、編輯者、設計師、管理員?!緵]有權限】當然就不能對資料庫執行任何動作,因為連進去的權利都沒有。Louis常戲稱【儲存者】為工讀生權限,儲存者僅能輸入資料到資料庫中,輸入完畢后,就無法再看到這些資料。感覺就像找了一位工讀生來key in大量資料到資料庫中,但又不想讓工讀生記起這些資料或是看到其它資料。
先假設文件或套表中沒有讀者欄位,當使用者被賦予【讀者】權限時,使用者就只能閱讀文件,而不能編輯文件,當然更不可能建立文件(可執行動作之建立文件選項被強制disable了)。不過,一但文件中有讀者欄位,若使用者的名稱未在讀者欄位的名稱清單之中,則即使有再高的ACL權限還是無法閱讀該文件。
至于【作者】權限就必須跟【作者】欄位配合使用才具效用,當使用者被賦予【作者】權限,但作者欄位中的使用者名稱卻是別位使用者時,這時即使該份文件是目前使用者所建立,但因為其名稱未列于作者欄位中,所以無法編輯該文件,僅能閱讀而已。順帶一提,如果使用者被賦予【編輯者】(含)以上權限,但文件中的作者欄位中并沒有這位使用者名稱,使用者還是可以編輯文件,因為【作者】權限必須跟【作者】欄位配合使用才具效用,也就是說【編輯者】(含)以上權限不受作者欄位的約束。
至于【設計師】權限就是多了使用Domino Designer來開發AP的權限。而管理員則是多了修改ACL的權限。
茲概略整理下表以供參考:
管理者 設計者 編輯者 作者 讀者 儲存者 沒有權利
ACL設定 V
建立修改設計組件 V V
編輯所有文件 V V V
編輯自已文件 V V V V
增加新文件 V V V V V
讀取所有文件 V V V V V
在資料庫建立時,會在ACL的使用者清單中看到-Default-這筆項目。-Default-的作用是,當使用者在ACL中找不到適用于自己的權限時,就套用-Default-的權限。也就是說,凡名稱未明列在ACL中或未包含在ACL的群組中,就套用-Default-的權限。在開發AP時若無特殊需求,-Default-通常都設定為編輯者。
您還會看到LocalDomainServers群組與OtherDomainServers群組。顧名思義,只要是與目前資料庫的所在服務器位在同一Domino網域的服務器都會自動包含在LocalDomainServers群組中,除非您去names.nsf中更改此群組文件,那又另當別論了Orz。所以此群組預設權限是管理員,主要是為了讓相同網域內的服務器可以進行抄寫作業。至于OtherDomainServers群組就是跟LocalDomainServers相反了,因為此群組的成員均為不同網域外的Domino服務器,而且預設是無權限。有些集團企業因為有一個以上的Domino網域,所以可能會利用此群組來達到某些跨網域存取的需求。不過,在達成此類需求時,請先手動把那些位于不同網域的服務器名稱加到names.nsf中的OtherDomainServers群組文件喔。
最后要談到Anonymous這個特殊項目,這是要手動新增給Web AP使用的。也就是當未透過Web ID & Password登入的使用者,均會被視為匿名者并套用Anonymous項目的權限。若Web AP未設定此項目時,當您使用瀏覽器開啟資料庫時,系統就會給您一個警告,要求您到ACL中新增此一項目喔。請特別注意,在開發Web AP時若無特殊需求,請將此項目設為無權限,否則您資料庫中的資料可能就會在網路上趴趴造了~~。
待續?
李建壹 Louis Lee(小路哥)
2006/3/8