Notes程序設計隨筆文章作者李建壹_第1頁
Notes程序設計隨筆文章作者李建壹_第2頁
Notes程序設計隨筆文章作者李建壹_第3頁
Notes程序設計隨筆文章作者李建壹_第4頁
Notes程序設計隨筆文章作者李建壹_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、.Notes程序設計隨筆 文章作者 李建壹Lotus Notes程序設計隨筆(一)文章作者:李建壹發(fā)布時間:文章來源:Lotus愛好者論壇一、前言許多初學Lotus Notes(Lotus Notes以下簡稱Notes)的朋友常常會因為Notes學習范圍太廣、教育訓練課程太貴、中文資料太少?等等因素,而不知該從何開始入門學習。不過因為這些因素而放棄的話,其實是非常之可惜的,畢竟Notes的功能及其整合性在群組軟件領域中,仍然是領先其它群組軟件的佼佼者。Louis為了讓許多初學Notes的朋友可以快速上手,所以決定著手撰寫此系列的文章,希望以最淺顯易懂的白話文來為初學者建立Notes程序設計最基

2、本的觀念(但會不會中斷不敢保證:p)。不過既然是隨筆,所以一些順序的編排就不會那么的有系統(tǒng)。另外,在章文中雖然偶爾會提到一些技術觀念,但并不屬于高深的技術文件,純粹只是觀念養(yǎng)成的文章。若您想進一步了解文中提及的觀念時,Louis強烈建議直接參考Notes程序設計說明資料庫。當然,本系列文章中若有訛誤還請各位前輩高手多多指教。二、Notes學習方向Notes的學習方向主要分為程序設計與系統(tǒng)管理兩部份,一般通稱為Notes AD(Application Development)與SA(System Administration),而這也是IBM官方的說法。不過,有時候AD也有人稱為AP,而SA則常

3、會與IT界常用的系統(tǒng)分析(System Analysis)搞混,所以在與其它朋友交流時可千萬不要雞同鴨講。但不論是Notes AD還是SA的知識,這兩者并無明確界線,而且兩者其實是相輔相成的。以ACL的設定來講,就無法明確歸納至AD或SA任一范疇,因為不管是在開發(fā)應用程序(應用程序以下簡稱AP)或是管理Domino系統(tǒng),ACL的設定都是必須的常識。另外,在開發(fā)Web AP時,為了讓瀏覽器使用者可以正常瀏覽存取Web AP的內容與資料,也須要先在服務器上做一些設定,而這也是開發(fā)人員所須要了解的。所以就Louis個人的觀點而言,千萬不要將自己的角色局限在程序設計師或系統(tǒng)管理員而排斥學習任何一方面的

4、知識。因為如此只會讓您在執(zhí)行一些任務時捉襟見肘罷了。接下來就讓我們進入的正題吧!三、Notes資料庫的分類與基礎結構在學習Notes AP開發(fā)的第一步驟,就是要先對Notes資料庫有所了解,如此才不會因為觀念不足或是錯誤而導致在開發(fā)過程中產生阻礙。所以Louis先整理一些觀念讓您稍微了解:(一)Notes資料庫的分類以目前市場上的資料庫產品而言,就資料型態(tài)、功能性或配置方式分成好幾類,例如最常聽到的就是關聯(lián)式資料庫(Relational Database),通常簡稱為RDBMS或是RDB,而最具代表性的就是Oracle、DB2、Informix、SQL?等等,不過這都是要付授權費,如果是免費的

5、,目前最紅的該屬MySQL了(Notes都可以跟這些資料庫整合喔)。就資料型態(tài)而言,Notes屬于文件式資料庫而非關聯(lián)式資料庫。很多初學Notes的朋友對文件式資料庫這名詞通常都會很疑惑,一是因為網路上很難找到相關信息,二是對Notes還不是很了解。不過在之后的內容中Louis會陸續(xù)說明文件的觀念。就資料庫的配置方式而言,Notes則被歸類在分布式資料庫,為什么呢?因為Notes的資料庫可以藉由抄寫機制,將各資料庫抄本分置到各服務器與客戶端中。分布式資料庫的理論在網路上有很多資料,若有興趣的話可以到各大搜尋引擎網站找找。(二)Notes資料庫的結構每一個Notes資料庫在windows OS下

6、是以檔案格式存在的,其擴展名通常是NSF,也就是Notes Storage Facility的簡寫,翻譯成中文就是Notes儲存設備。至于擴展名NTF也是Notes范本資料庫,全名是Notes Template Facility,是用來產生一般資料庫的范本。也就是說,您可以利用模板資料庫來新建一個資料庫,而此資料庫中的設計是與模板資料庫的設計一模一樣的。按照官方的說法,每個Notes資料庫是由四個基本組件所組成:1.ACL:就是Access Control List,一般翻譯成存取控制清單,或是權限控制清單,顧名思義就是讓資料庫管理員可以指定使用者對該資料庫執(zhí)行何種動作。2.設計組件:是指套表

7、、視界、外框、圖文框、領航員?等等組件,而這些都是Notes資料庫最最基礎的組件,也是用來讓資料庫可以與使用者互動的基本組件,沒有這些組件,資料庫即無法運作。3.所謂邏輯:是指程序設計師在資料庫中所撰寫的程序語言,Lotus Script、公式、代理程序都是。主要是要運算處理資料庫中的資料,或者達成某些自動化的作業(yè)。4.資料:是指儲存在文件中的文字、數字、日期時間、附加檔案?等等信息。四、資料的安全控管若要簡單描述Domino對資料的安全控管,基本上由外而內可以分成幾關:服務器è資料庫è文件è隱藏公式。以服務器這一關來說,是在服務器文件中控管的,例如允許或不允許哪

8、些使用者存取此服務器、允許或不允許哪些使用者可以在服務器上建立或刪除資料庫等等。若是使用者被賦予存取服務器的權限,就會進入到資料庫安全控管這關,而這關的安全控管就是由資料庫ACL來決定的。再來是文件的安全性控管,這是經由套表屬性之安全卷標下的選項,以及讀者與作者欄位來處理的。最后就是隱藏公式,其實,隱藏公式根本就不算是安全性控管的方法,這只能說是開發(fā)技巧。因為即使透過隱藏公式把套表中的特定欄位隱藏起來,使用者仍然可以透過文件屬性方塊看到各欄位中的資料。五、ACL既然我們在前面多次談到ACL,不稍微跟他交個朋友好像說不過去,所以在這兒就為大伙兒引薦他吧,呵呵。在ACL中主要有幾種組件設定:使用者

9、類型、權限類型、執(zhí)行動作。設定使用者類型是為了避免ID被誤用。舉例來說,通常服務器在資料庫ACL中都是管理員權限,假設服務器ID被有心人士盜用,可能就會造成極大的破壞。所以為了防范有心人士進行這種破壞行動,就必須在ACL中正確設定為服務器類型,如此該人士即使拿到服務器ID也沒辦法使用Notes client來對資料庫執(zhí)行任何活動。因為,服務器不是人,所以不會使用Notes client(不過在系統(tǒng)管理中,Louis強烈建議把服務器當作是人,這樣有助于管理概念的建立)。但相對的,如果未設定適當的類型,也會導致某些動作無法執(zhí)行。再來是權限類型,依權限低高依序有七層-沒有權限、儲存者、讀者、作者、編

10、輯者、設計師、管理員?!緵]有權限】當然就不能對資料庫執(zhí)行任何動作,因為連進去的權利都沒有。Louis常戲稱【儲存者】為工讀生權限,儲存者僅能輸入資料到資料庫中,輸入完畢后,就無法再看到這些資料。感覺就像找了一位工讀生來key in大量資料到資料庫中,但又不想讓工讀生記起這些資料或是看到其它資料。先假設文件或套表中沒有讀者欄位,當使用者被賦予【讀者】權限時,使用者就只能閱讀文件,而不能編輯文件,當然更不可能建立文件(可執(zhí)行動作之建立文件選項被強制disable了)。不過,一但文件中有讀者欄位,若使用者的名稱未在讀者欄位的名稱清單之中,則即使有再高的ACL權限還是無法閱讀該文件。至于【作者】權限就

11、必須跟【作者】欄位配合使用才具效用,當使用者被賦予【作者】權限,但作者欄位中的使用者名稱卻是別位使用者時,這時即使該份文件是目前使用者所建立,但因為其名稱未列于作者欄位中,所以無法編輯該文件,僅能閱讀而已。順帶一提,如果使用者被賦予【編輯者】(含)以上權限,但文件中的作者欄位中并沒有這位使用者名稱,使用者還是可以編輯文件,因為【作者】權限必須跟【作者】欄位配合使用才具效用,也就是說【編輯者】(含)以上權限不受作者欄位的約束。至于【設計師】權限就是多了使用Domino Designer來開發(fā)AP的權限。而管理員則是多了修改ACL的權限。茲概略整理下表以供參考:管理者設計者編輯者作者讀者儲存者沒有

12、權利ACL設定V建立修改設計組件V V編輯所有文件V VV編輯自已文件V VV V增加新文件V VV VV讀取所有文件V VV VV在資料庫建立時,會在ACL的使用者清單中看到-Default-這筆項目。-Default-的作用是,當使用者在ACL中找不到適用于自己的權限時,就套用-Default-的權限。也就是說,凡名稱未明列在ACL中或未包含在ACL的群組中,就套用-Default-的權限。在開發(fā)AP時若無特殊需求,-Default-通常都設定為編輯者。您還會看到LocalDomainServers群組與OtherDomainServers群組。顧名思義,只要是與目前資料庫的所在服務器位在

13、同一Domino網域的服務器都會自動包含在LocalDomainServers群組中,除非您去names.nsf中更改此群組文件,那又另當別論了Orz。所以此群組預設權限是管理員,主要是為了讓相同網域內的服務器可以進行抄寫作業(yè)。至于OtherDomainServers群組就是跟LocalDomainServers相反了,因為此群組的成員均為不同網域外的Domino服務器,而且預設是無權限。有些集團企業(yè)因為有一個以上的Domino網域,所以可能會利用此群組來達到某些跨網域存取的需求。不過,在達成此類需求時,請先手動把那些位于不同網域的服務器名稱加到names.nsf中的OtherDomainSe

14、rvers群組文件喔。最后要談到Anonymous這個特殊項目,這是要手動新增給Web AP使用的。也就是當未透過Web ID&Password登入的使用者,均會被視為匿名者并套用Anonymous項目的權限。若Web AP未設定此項目時,當您使用瀏覽器開啟資料庫時,系統(tǒng)就會給您一個警告,要求您到ACL中新增此一項目喔。請?zhí)貏e注意,在開發(fā)Web AP時若無特殊需求,請將此項目設為無權限,否則您資料庫中的資料可能就會在網路上趴趴造了。Lotus Notes程序設計隨筆(二)文章作者:李建壹發(fā)布時間:2008年3月25日文章來源:Lotus愛好者論壇七、Notes應用系統(tǒng)在進入開發(fā)組件的正

15、題之前,我們先來聊聊什么是Notes應用系統(tǒng)。通常Notes應用系統(tǒng)也稱為Notes應用程序、Notes AP等等。盡管這些名詞都不同,但其實都是指使用Domino Designer這個設計接口所開發(fā)出來的系統(tǒng),像是請假系統(tǒng)、加班申報系統(tǒng)、請采購系統(tǒng)、文具申購系統(tǒng)、ISO文件管理系統(tǒng),甚至是ECN系統(tǒng)、NBR系統(tǒng)等等都屬之。我想稍微列出這些系統(tǒng)名稱,應該就可以稍微明了Notes不是只能用來當作電子郵件系統(tǒng)了吧。一般初學者在還沒開始真正了解Notes應用系統(tǒng)時,通常會認為一個資料庫就是一支Notes應用系統(tǒng)。其實不盡然如此,絕大部分的Notes應用系統(tǒng)都是由一個以上的資料庫所組成。舉例來說好了,

16、就Louis的經驗,建議剛導入Notes而且要開始開發(fā)系統(tǒng)時,第一優(yōu)先開發(fā)的應該是人員組織資料庫,這個資料庫主要在儲存企業(yè)人員組織信息,像是部門文件與人員文件。為什么要先開發(fā)建置這資料庫呢?因為使用者在許多系統(tǒng)的窗體中,都有申請人的姓名、部門、工號等等基本信息欄位,而這些欄位值強烈建議不要讓使用者輸入,而是由程序去人員組織資料庫中自動搜尋并帶出的(通常是利用UserName取得的Notes名稱來當作關鍵值)。所以,拿請假系統(tǒng)來說好了,既然請假系統(tǒng)會跨資料庫到人員組織資料庫取值,這就算是由兩個資料庫來組成一個請假系統(tǒng)了。當然,上述的例子是比較小型的例子,若要說又大型又比較有名的例子就屬Lotus

17、 Workflow了,因為其每一支系統(tǒng)都至少要有三個資料庫所組成-應用程序資料庫、人員組織資料庫、過程定義資料庫、設計儲存資料庫(選擇性)。所以總結來說,一支Notes應用系統(tǒng)可以由一個或一個以上的Notes資料庫所組成。注:若您對人員組織資料庫沒有什么觀念的話,可以參考DominoClub網站的SnowMan專欄中的簡易員工資料庫。雖然SnowMan兄謙虛的說那是簡易員工資料庫,不過其實該有的基本組件都已經有了,可說是麻雀雖小五臟俱全。各位只要依據各公司自己的需求再添加欄位就可以很完整了。網址如下:八、欄位-Item與Field應該會有朋友覺得奇怪,為何Louis不是先介紹文件或是套表,反而

18、是先介紹欄位呢?其實我在下筆時也有考慮過這問題,之后一方面認為如果先講文件與套表,可能要花比較多的時間與篇幅寫;另一方面覺得欄位是最基礎的觀念,而且在說明欄位觀念時也會稍微補充套表與文件的觀念,所以決定先說明欄位。Item與Field的中文翻譯通常都是欄位,所以常被搞混,但兩者其實是完全不同的。嚴格來說,Item是要透過文件屬性方塊才可以看到的后端欄位;Field則是在套表上才能看到的前端欄位。以下是針對兩者的特性期之間的關連性加以說明:(一)Item Notes資料在儲存上最基本的容器就是item。它可以儲存文字、數字、日期時間、附加檔案?等等資料。也由于是儲存容器,所以要在文件儲存后才會產

19、生,若文件還沒儲存是不會有Item存在的,您可以試著開啟一份新文件,然后打開文件屬性方塊看看就知道了。所以簡而言之,文件其實就是由item所組成的。Item本身也有其屬性,例如儲存在item中的資料長度、資料類型?等等。而這些也可以從文件屬性方塊看到。(二)Field至于Field,簡單來說,在新文件上是要讓使用者輸入資料;而在已存在的文件上,則是用來顯示及編輯已儲存于Item中的資料,所以稱之為前端欄位,也就是說Field是用來與使用者互動的一個設計組件。既然是與使用者互動的設計組件,那就一定有某些方法可以達成此目的,就是透過field的程序,像是默認值公式、轉譯公式、驗證公式、數個事件都可

20、以讓程序設計師撰寫程序以達到上述的互動目的。(三)Item與Field的連結既然item是后端欄位,field是前端欄位,那就一定有方法將兩者連結起來。舉例來說,在一般狀況下,若在套表上有一個名為X1的field,當文件儲存時,在此欄位中的數值就會儲存到名為X1的item中。再假設一種狀況,假設套表上有一個名為X1的field,在文件中另有一個名為Y1的item,若要將Y1的數值顯示在X1 field的話,只要在X1 field的默認值公式或是計算公式填入Y1這個item名稱即可。(四)LotusScript的Item與Field因為這種前后端結構的觀念,所以在LotusScript中的Not

21、esDocument類別下提供幾個方法來操作處理item,像是GetFirstItem、GetItemValue等等。如果程序設計師想要進一步處理item,則可以使用NotesItem的類別。這類后端的類別與方法通常是用來處理item中的數值。至于操作處理Field的相關方法則被放在NotesUIDocument前端類別中,像是FieldGetText、FieldSetText?等等。這類前端的類別與方法通常是用來與使用者達到互動。九、套表就官方的定義而言,套表是用來顯示動態(tài)信息的。既然是顯示動態(tài)信息,就表示其中的信息是要讓使用者可以看的到,更深入一點,就是讓使用者可以透過套表來跟資料庫中的資

22、料作互動。所以套表在Notes中真的占有很重要的地位,而且應用層面甚廣,例如,單純顯示文件中的信息、讓使用者輸入資料以建立文件、編輯文件中的資料以更新信息、在套表事件或是其它組件加入程序以運算處理文件中的資料等等。在ND6中則可以直接查詢RDB中的資料。ND7開始更可以和DB2資料庫做資料交易。但是,回到原點,沒有任何其它設計組件存在的空套表是沒有實質意義的。所以當套表中存在field、按鈕、動作按鈕、小節(jié)、焦點信息、有程序的事件等等設計組件,才能發(fā)揮出套表的功效。相對于文件是許多item的容器,套表則是許多設計組件的容器。例如在Web上可以在套表中嵌入視界來美化視界在Web上的呈現。再回到套

23、表最主要的功能-建立與編輯文件。就建立新文件而言,當使用者在各field中輸入數值并儲存以后就會產生一份文件,而field中的數值則會儲存到該文件中的各item中。另一方面,當使用者利用套表開啟已經存在的文件時,套表的field通常就是用來顯示或編輯item的數值。十、文件其實在上述中差不多已經把欄位、套表、文件的關系解釋的差不多了。所以在這兒我們就只稍做補充。由于Item無法自行存在,而是必須存在于文件中,所以換言之,Notes文件可以說是包含一個以上Item的集合,這可說是一個抽象的觀念。其實有些人會認為視界有顯示出來或是套表可以打開的才算是文件,但其實不然,因為文件也有可能是隱藏在資料庫

24、中而不顯示的。這就是常有人會看到工作區(qū)的資料庫顯示有未閱讀文件,但又在視界中找不到的原因。另外,也有些人會認為文件跟套表是一體的,事實上也不然,套表與文件是分開的,就如同先前曾經提到,套表是為了讓使用者可以新增、編輯、顯示文件的。但也有例外,如果在套表屬性中有勾選文件與套表一起儲存的屬性時,文件與套表就會儲存在一起,但通常不建議如此做。因為把套表中的所有設計組件與文件合并儲存在一起,就會讓文件的體積變大,進而占用硬盤空間。就像是本來只有55公斤的Louis穿上幾件衣服后,可能就增加到57公斤了。另外,在Notes中還有一種特殊文件,就是設計文件,也就是開發(fā)者開發(fā)出來的設計組件,像是套表、視界等

25、等,也是以文件型態(tài)存在的,這些文件統(tǒng)稱為Design Notes,不過當然也可以稱為Design Document。在Domino Designer的設計組件清單中,使用滑鼠右鍵單擊任一組件,都可以看到該設計組件的文件屬性。順帶一提,在早期Notes文件并不稱為Document,而是稱為note,所以才有Lotus Notes這名字出現。但是把話說回來,因為Notes文件的資料并無法像關聯(lián)式資料庫可以利用key值把各資料做互相關聯(lián),所以產生一些資料處理上的不便。不過這類問題通常還是可以經由技術上來解決的。而且也因為如此,Notes才能成為各種關聯(lián)式資料庫的整合接口,不是嗎?Lotus Note

26、s程序設計隨筆(三)作者?建壹Louis Lee(小?哥)文章作者:李建壹發(fā)布時間:2008年3月25日文章來源:Lotus愛好者論壇十一、自我提升當我寫下這個標題時感覺有點心虛,因為好像在灌水,呵呵。?過相信接下?Louis所?的,絕對是讓各位初學者非常受用的。一般剛開始開發(fā)Notes AP時,相信大部分使用者提出的需求都是主管去談的,而您絕對是傷透腦筋在想功能寫程序的那個人。雖然這是很一般的程序,但對于您的未?其實?得是好處。雖然可以寫出一支?使用者滿意的AP絕對是一件很?起的事,但是當您完成這支AP以后除?學到很多程序技巧與成就感以外,您還獲得?么?這是非常值得思考的一件事。Notes的

27、精髓在于簽核?程的開發(fā),而簽核?程的精髓則是各產業(yè)的Domain Know How,也就是各產業(yè)的專業(yè)知?。所以當您接下主管交付的需求后,并非一味的埋頭苦思程序該怎寫、功能該怎開發(fā),?重要的是去了解此系統(tǒng)的真正目的是?么、?程為?么要這么跑、使用者在簽核底下的作業(yè)是?么。所以您應該再找機會去跟提出需求的使用者了解他們的作業(yè)程序,進而從他們的腦袋?學習他們?域的專業(yè)知?。其實,我常常在跟使用者談需求的時候,即使懂也裝?懂,很有?貌的請使用者重頭講一次,反正被罵笨也無所謂,因為目的已經達到,大?晚上抱著枕頭哭一下就好?,隔天又是好漢一條,哈哈。當您在各產業(yè)待過以后,這些知?就會逐月逐?積成為您的寶

28、藏。而這些寶藏將會在以后成為您闖蕩江湖的寶刀。因為往后當您在與使用者談需求時,由于您的寶藏取之?絕用之?盡,頻頻點頭稱是的將?再是您而會是使用者。我相信應該很少朋友希望自己永遠靠寫程序維生,尤其到?一定?紀以后,寫程序反而是一種負擔。所以接下?賴以維生的將會是您的Domain Know How,幫您賺錢的絕對是您的腦袋與口才,而?是寫程序的技術。這時應該要很高興您?是修計算機的信息人員,而是寫Notes的人員。所以,趁現在趕快?積您未?的財富吧!加油!加油!Go!Go!Go!嗯.還沒結尾.請繼續(xù)閱?.感恩Orz十二、視界在隨筆(二)中,Louis跟各位討?到文件與套表的關系,所以接下?,我們就

29、?談談視界吧。視界這個設計組件,很多人都會把它拿?跟RDB(關?式資?庫)的table作比較。其實是有那么點像,所以在ND7才會改?出SQL Query視界這玩意兒。?過,撇開視界與table的比較,視界的主要功能是為?有系統(tǒng)的整?資?庫中的一大堆文件,將這些文件中的關鍵信息分門別?的顯示出?,好讓使用者可以快速找到他們所需要的信息。所以您要?視界是由一大堆文件所組成也?為過。但因為是給使用者使用的,所以在設計一個視界的時候,最好可以先與使用者討?清楚,否則被要求重排視界的可能性非常的大。?過,?從設計面?看,視界應該?是由直?所組成,畢竟沒有直?的視界是沒有任何用處的。在前面,我曾經把顯示這

30、?個字特別標出?的原因是,直?除?可以直接顯示文件的?位值以外,您也可以透過直?公式?處?多個?位值后再將其顯示出?。也就是?,處?過后的直?值并非儲存在文件中,而僅供顯示。優(yōu)點在于,您?用在文件中放一大堆計算?位?儲存一些只為?顯示用的?值。但缺點是,?直?中有太多的計算公式,則視界的負擔就會加重,因為它必須要計算每份文件的?位值。當文件?很多時,其負擔是可想而知的。我想大部份的初學朋友都知道視界選擇這玩意兒吧,這玩意兒講明白一點就是透過您指定的條件?篩選要顯示在此視界的文件。最?嚴謹的條件當屬【selectall】,因為它會將資?庫中所有的文件通通顯示在此視界中。最??吹降臈l件應該是【se

31、lect form="套表名"】,視界會根據您所指定的套表名?搜尋并顯示使用此套表建?的文件。當然您也可以搭配?多的條件設定?進一步篩選文件,像是某個?位等于、大于,或小于某個值。有人可能會發(fā)現在視界選擇下面有個套表公式,Louis曾經遇到一位我覺得還?錯的程序設計師,但他卻從?沒用過套表公式。這真的是很重要的功能,但我要在此賣個關子,之后會搭配其它功能?明。另外,如果您已經熟悉公式與Lotus Script的話,相信您一定常用到DBLookup、DBColumn、GetDocumentByKey、GetEntryByKey等等搜尋?函式與方法。使用這?程序的第一要件當然就

32、是要把視界中的第一直?設定為排序。?過,Louis要講的重點?是這個,我要講的是忘記要講啥?果然?紀到?就是會這樣.(一分鐘后)對?!我要講的是當您在設計視界時,請盡?將程序用的視界與使用者用的視界分開,因為當資?庫中有很多視界時,?您共享這?種視界又沒特別注明的話,哪天使用者要求您重排視界,結果運氣?好的您移動到程序用視界的第一直?,那就糗大?,因為一定會有程序找?到符合的關鍵詞資?,而這很有可能讓您花上大半天去找蟲蟲何在。至于要怎標示,把視界名稱括號起?就好?,要?就在視界屬性的注明?位注明。?過Louis偏好前者,因為前者可以把視界隱藏起?,也就是?,當使用者按下【檢視】【移至】也看?到

33、那個視界,除非他們知道按下Ctrl+Shift+【檢視】【移至】(又學一招?吧,呵呵)。既然剛剛提到GetDocumentByKey與GetEntryByKey這?個method,就順?提一下這?者的差別。如果您曾使用偵錯器觀察的話,就會發(fā)現前者是傳回文件對象,所以?所當然會把文件中的所有?位值還有一堆屬性通通抓出?,而后者就只會抓到視界中直?值。這有?么影響嗎?當然有影響啰!使用GetDocumentByKey與GetEntryByKey可能還察覺?出?,當您使用GetAllDocumentsByKey與GetAllEntriesByKey?傳回上百筆的資?,相信您就可以察覺到Server

34、Loading的?同?。十三、資?夾既然談到視界,就?得?談資?夾。這?的資?夾當然?是指Windows的資?夾,Louis要?的是Notes的設計組件之一的那個資?夾。資?夾跟視界非常之像,我們可以?它們是?鳳胎也?為過,因為最明顯的差別在于"視界選擇"。.沒有視界選擇那怎篩選文件?。?既然沒有視界選擇當然就是有其它的方法可以篩選啰。資?夾篩選文件的方式可以透過程序或使用者手動篩選(復制或剪下,然后貼上)。換?話?,資?夾內的文件主要是由程序或使用者手動置入的。資?夾應用的最徹底的當屬郵件資?庫?,收件匣各位應該很熟悉吧,它?兄就是資?夾而?是視界,從R5的郵件資?庫可能

35、還看?太出?哪些是資?夾,哪些是視界,但從R6的郵件資?庫就比較容?分辨?,因為它多?一個視界的展開項目,在?面的全部都是視界。?過在視界的展開項目以外還是有視界的。?要真正去辨別的話,還是要從Notes Designer比較明確一點。先來解釋手動放文件到數據夾的觀念吧。假設A視界與B視界的視界選擇條件一樣,其所篩選出?的文件其實都是同一份文件。但是,當您在C資?夾與D資?夾中各看到一份幾乎是一模一樣的文件,在資?庫中它們可能?是同一份文件,而是?份文件,原因在于資?夾是獨?的個體,所以手動個別貼上的話就會是兩份文件。簡單?,資?夾的文件是被放進去的,視界的文件是被篩選出?的。這樣您應該就懂?

36、吧,再?懂,那就請您去郵件資?庫多玩幾次復制或剪下,然后到處貼上的游戲啰。好吧,再雞婆舉?明一下:1.當您從A視界中復制一份文件,然后貼到C資?夾,此時C資?夾有一份文件,D資?夾會是空的,A視界則變成?份文件。2.再到D資?夾貼上那份文件,這時C資?夾還是只有一份文件,D資?夾當然也只有一份文件。但是,回過頭?看原?的A視界,您會發(fā)現A視界中會變成三份文件。3.這三份文件=原?的文件+C資?夾的文件+D資?夾的文件。其實從文件屬性中可以看到這三份文件的UNID其實是通通?一樣的。以上都是手動放文件到數據夾的觀念,接下來就是程序放文件到數據夾的觀念了,使用NotesDocumentCollec

37、tion.PutAllInFolder將文件放到數據夾中時,文件并沒有增加,因為PutAllInFolder并不是復制-貼上文件,而是幫助數據夾篩選出符合條件的文件再顯示出來。所以來源視界與數據庫中的文件是不會增加的。資?夾有一個很好用的功能-排序。當您使用GetAllDocumentsByKey從視界取得某些文件時(NotesDocumentCollection),這些文件并?會按照原視界的排序一份份排好,所以如果當您的需求是要依照某種順序?處?這些文件的話,您可以先建?一個資?夾,并將此資?夾的排序設定成您想要的,再用PutAllInFolder方法把文件通通顯示到里面進去,這樣您的文件就

38、會照順序排?。?過請記得,處?完請務必記得再使用RemoveAllFromFolder把那些文件從資?夾刪除。否則這資料夾中的文件會一直增加,這樣就會造成之后所處理的文件不是當次放進去的文件,而是累積已久雜七雜八的文件。Lotus Notes程序設計隨筆(四)文章作者:李建壹發(fā)布時間:2008年3月25日文章來源:Lotus愛好者論壇十四、隨處可得的文件這一篇是要響應某位匿名朋友的問題-何謂前端文件、后端文件、屏幕上看到的文件、內存中的文件、數據庫中的文件?其實在前面幾篇中,已經有談到文件的觀念,不過沒有以這幾個項目來做區(qū)分說明就是了,所以這部份我們就當作再次溫習文件的觀念吧!再者,路哥認為這

39、問題以一位初學朋友而言問得實在是很不錯。而這問題我相信也是眾多初學者的問題!1.后端文件后端文件的產生基本上可以分成兩種-透過套表產生與透過程序產生。前者當然是由使用者開啟套表,并在相關字段輸入數據后儲存產生的。后者則是透過Lotus Script或Java產生的,例如Set doc=New NotesDocument(NotesDatabase)Call doc.Save(True,True)。您看看,這兩者都有儲存的程序喔,如果沒有儲存的程序,文件就不會在數據庫中產生。當文件進入到數據庫中時,我們就可以稱它們?yōu)楹蠖宋募?。而在Lotus Script中是以NotesDocument類別來實

40、現的。所以,只要是已經經過儲存的文件,我們就可以統(tǒng)稱為數據庫中的文件。2.前端文件至于前端文件就很簡單了,不管是新文件或是原本就已存在于數據庫中的文件,只要是透過套表呈現到屏幕上的就都叫做前端文件。所以其實屏幕上看到的文件就等于前端文件,其主要的作用在與使用者達到互動。在Lotus Script中則是以NotesUIDocument類別來實現的。3.后端文件與前端文件的關系同一份文件會不會同時擁有前端文件跟后端文件呢?答案是不一定。在前面的隨筆中有提過,利用套表開啟一份新文件時(也就是前端文件),打開文件屬性方塊后是看不到什么較實際的信息的,因為還沒經過儲存程序,也就是說未儲存的新文件就只有前

41、端文件。但用套表開啟一份已存在于數據庫中的文件時,在屏幕上看到的就是前端文件,您在上面修修改改尚未儲存的數據均可視為前端文件的部分。但此時開啟文件屬性方塊,您可以看到此文件的相關屬性與各字段數據,這部份則是屬于已儲存之后端文件的部份。若您在此時按下儲存,前端文件的數據就會更新到后端文件中了。這就是前端文件與后端文件并存狀況。至于在Lotus Script中怎么透過前端文件來取得后端文件呢?只要使用NotesUIDocument.Document即可,因為NotesUIDocument代表目前開啟的前端文件,而Document則是指目前文件的后端文件。4.內存中的文件這部份麻,我想就跟Lotus

42、 Script或Java程序設計有關了,我盡量解釋您就盡量看看,能吸收多少算多少。在Lotus Script中有NotesDocument與NotesDocumentsCollection的物件。當您使用GetDocumentByKey方法取得NotesDocument對象,或是使用GetAllDocumentsByKey取得NotesDocumentsCollection的對象時,被取得之文件對象所包含的所有數據都會被儲存在內存中,等待您進一步的處理。在前面路哥也提到過,若文件中有很多數據,則太多的文件就會造成內存的負擔,所以,如果您只是很單純的處理少數資料,就請盡量使用NotesViewE

43、ntry或NotesViewEntries,因為內存只會儲存文件在此視界的直欄數據,而不會儲存文件的所有數據。5.結論文件是很抽象的觀念,我稍微將它具體化一下,但并非一模一樣。數據庫就類似公文柜,視界就有點像是公文夾,文件類似現實生活中的公文。如果沒有公文夾視界來將文件分門別類的保存起來,數據庫就會像是一個擺放了一大堆雜亂無章文件的公文柜。我建議您可以再回到前面幾篇溫習一下,相信會有不同的感覺的。十五、選擇開啟文件的套表回到咱們的進度上吧,在本篇隨筆中,這一節(jié)算是唯一在進度上的一節(jié)。路哥好像沒有談到有進度吧,因為進度在路哥的腦袋瓜子里,呵呵。相信各位在看過前三篇隨筆后,對文件跟套表的關系應該有

44、一定程度的了解,所以接下來要為各位介紹的是,當您開啟一份文件時Notes是如何決定要用哪一張?zhí)妆韥盹@示文件。不懂路哥在說什么嗎?沒關系,我就再稍微解釋一下,Notes文件并非只能使用當初建立此文件的套表來開啟,也就是說一份文件可以使用不同的套表來開啟,而產生的結果就是在前端呈現的文件之排版與數據會不同。例如,有A與B兩張?zhí)妆?,A套表有兩個字段-AAA、BBB;B套表只有BBB字段。另外在數據庫中有一份文件儲存了AAA字段值111與BBB字段值222。這時使用A套表開啟甲文件時,您會看到屏幕上顯示111與222兩個字段值。接下來再用B套表開啟甲文件,此時您就只會看到222而已。也就是說同一份文件

45、會因為套表上的排版與字段不同而有不同的顯示。用最最最簡單的實際例子來說明好了,假設路哥有兩條牛仔褲,A牛仔褲的左邊褲管剪了一個洞,而B牛仔褲則是在右邊褲管剪了一個洞,當路哥穿A牛仔褲時就會露出左膝蓋,穿B牛仔褲時則是露出右膝蓋。即使你們會因為我穿不同的牛仔褲而看到不同的膝蓋,但其實路哥本身還是有兩個膝蓋,并不會因為穿哪件牛仔褲而真的少了哪個膝蓋。不過路媽要是看到我穿這種牛仔褲,一定又會念說,你是沒錢可以買褲子喔!好回到正題,Notes是如何決定要用哪張?zhí)妆韥黹_啟文件的。采用順序為,套表與文件合并儲存à視界的套表公式àForm字段值à數據庫的預設套表。說明如下:1.

46、套表與文件合并儲存:這在隨筆2中的第3頁的倒數第三段有解說過,請自行回頭參考。2.視界的套表公式:這個就要特別解釋了,因為曾經有兩位從軟件公司出身的朋友同時問過我一個問題就是,如何在視界中依不同的條件來選擇不同套表開啟文件。其實滿驚訝的,因為我覺得這是非?;A的功能,而且是必須知道的。所以在此特別說明,答案是視界的套表公式,在哪兒呢?就在寫視界選擇公式下面的那個套表公式。簡單來說,您可以寫一行程序,假設A字段值=1時就用A套表開啟,否則就用B套表開啟。所以當A字段值有所變動時就會使用不同的套表來開啟文件。個人覺得這功能雖然很少用,但是,卻是很好用的功能。3.Form字段值:在Notes中有個保

47、留字段叫做Form,而此字段值就是在儲存用來開啟文件之套表的名稱,所以強烈建議使用Lotus Script建立新文件時都要指定此字段值(語法:doc.Form="套表名稱")。4.數據庫的預設套表:在套表的設計屬性的基礎卷標下有一個預設的數據庫套表選項,若勾選此選項后,前面所說的條件若都不成立時,就會采用勾選此選項的套表來開啟文件。我想應該會有朋友問說,那要是有兩張?zhí)妆矶加泄丛蹀k?那您就勾勾看吧,呵呵。一個數據庫只能存在一張預設套表,所以后勾的贏,也就是說若A套表勾了以后,B套表又勾,那系統(tǒng)就會自動取消A套表的該選項。好,講到這邊整理一下,當您開啟一份文件時,Notes會先

48、參照文件當初儲存時的那張?zhí)妆硎欠裼泄催x套表與文件合并儲存屬性,若有則采用該套表開啟。若沒有就會參照視界的套表公式,所以若您有寫套表公式時就會依照該公式的條件來開啟文件。若沒有寫套表公式,那就會參照文件中的Form字段值,若文件中此字段值有指定套表名稱,就會使用該套表來開啟。若沒有則會參照最后的防線-數據庫的預設套表。若數據庫中沒有預設套表呢?如果路哥沒有記錯,系統(tǒng)好像會出現找不到套表之類的錯誤訊息。不過也有可能記錯喔,最近腦筋不太靈光呵呵。十六、Lotus Script超基礎觀念這是路哥突發(fā)奇想的主題,相信初學者的您在看完此節(jié)以后,一定會非常有收獲??!Lotus Script是以對象為基礎的程序語言,還談不上是完全對象導向的語言。市面上有很多書籍在談對象導向,好像一開始都是用車子或飛機來當例子,可是路哥

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論