国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

Exchange開發(fā)中CDO對象的使用基礎(chǔ)(1)

2024-07-21 02:08:38
字體:
供稿:網(wǎng)友

商業(yè)源碼熱門下載www.html.org.cn


                       exchange的cdo對象集合

一:關(guān)于cdo對象集合的說明

cdo對象集合是建立協(xié)作是應(yīng)用程序的可靠的api,ado可以用來存取web存儲系統(tǒng),但是他缺少協(xié)同作業(yè)最基本的功能,而cdo卻可以處理一般的應(yīng)用程序和高級的工作流應(yīng)用程序解決方案,cdo甚至可以提供我們管理exchange的能力,以及與windows 2000的ad通訊。

cdo:collaboration data objects,是一項可以用來建立用途廣泛的協(xié)同作業(yè)應(yīng)用程序的技術(shù),能完成如:接受傳送電子郵件、日程安排、聯(lián)絡(luò)人管理、工作流程以及exchange管理的應(yīng)用程序。

cdo并不是被封裝成為一個單獨的對象模塊,相反的,它包含了3個不同的對象模塊,每一個都有其特定的用途。可以同時或者單獨使用這些物件模塊。

三個對象模塊的dll文件信息:

cdo for exchange 2000 server               cdo.dll

cdo for exchange management             cdoexm.dll

cdo workflow for exchange                cdowf.dll

 

二:三個對象模塊的基本功能

1.  cdo for exchange 2000 server

最常用的cdo對象模塊,該物件模塊包括了一些協(xié)同作業(yè)應(yīng)用程序中最常見的核心組件與接口。也可以使用該對象模塊來建立與設(shè)定web存儲系統(tǒng)中的文件夾,其中最上層的cdo對象常用來建立以下幾種解決方案:

文件夾:(folder)在信箱存放區(qū)或公用存放區(qū)的容器。

人員:(person)web存儲系統(tǒng)文件夾中的聯(lián)絡(luò)人類型的資料,或者是ad中的使用者或聯(lián)絡(luò)人對象。

郵件:(message)電子郵件

約會:(appointment)已經(jīng)安排的約會或會議

日歷信息(日程安排):(calendar message)會議邀請

收件者:(addressee)任何形式的電子郵件收件者或會議邀請的收件者

出席者:(attendee)包含于約會或者會議中的人員

所有最上層的對象都有兩個重要的共同接口(interface)

iconfiguration:用來定義可以應(yīng)用于多個對象的行為模塊,

idatasource:每個cdo對象都公開idatasource接口,用來管理、存放與存儲資料。

2.  cdo for exchange management objects

該對象模塊是用來建立以及管理exchange信箱與exchange服務(wù)器組件的類別和接口所組成。當(dāng)編寫用來管理exchange收件者和信箱的程序代碼時,會常用到。使用的對象是:

imailrecipient:針對使用者指定電子郵件如何傳送與管理,此對象也可以使聯(lián)絡(luò)人與文件夾不需要信箱便可以接收電子郵件。

imailboxstore:指定如何建立、移動、刪除exchange信箱,以及如何管理可使用信箱的收件者其可用來管理的屬性。如果開發(fā)web架構(gòu)的服務(wù)器管理工具,該對象模塊提供讓我們可以整體的管理服務(wù)器的對象,這些狀況可用的最上層的對象有:

exchangeserver:管理exchange2000服務(wù)器與傳回基本信息,如服務(wù)器類型與版本。

foldertree:管理服務(wù)其中的文件夾樹狀結(jié)構(gòu),包含任何副本。

storagegroup:管理儲存群組,用來組織信箱存放區(qū)和公用存放區(qū)。

mailboxstoredb:管理單一使用者的信箱存放區(qū)可以使用此對象來連接、移動或中斷連接信箱存放區(qū),并傳回有關(guān)存放區(qū)數(shù)據(jù)庫的基本信息。

publicstoredb:建立、管理與刪除公用存放區(qū),并傳回有關(guān)存放區(qū)數(shù)據(jù)庫的基本信息。

3.  cdo workflow for exchange

該對象模塊是由用來建立以及執(zhí)行工作流程與路由應(yīng)用程序的類別和接口所組成。建立工作流應(yīng)用程序有兩種方式:

方式一:使用workflow designer for microsoft exchange 2000 server

方式二:使用自行建立工作流程事件流程與事件接受的方式。

我們使用前者,使用workflow designer我們就不需要大部分的工作流程對象,只有當(dāng)編寫回應(yīng)各式各樣工作流程動作的script時,才需要使用這些對象,在我們的script中最可能用到的對象如下:

iworkflowsession:提供工作流程引擎、動作的script與所處理的工作流程項目(processinstance)之間的執(zhí)行期(run-time)通訊。

iworkflowmessage:建立工作流程處理中要傳送給收件者的通知郵件。

audittraileventlog:于應(yīng)用程序記錄檔(log)中,建立有關(guān)工作流程事件動態(tài)的項目(entries)。

   如果使用workflow designer無法提供完成要設(shè)計的功能,那就要自行建立事件接受,如果自行建立事件接受還需要熟悉下列對象:

processdefinition:定義工作流程中的邏輯,包含狀態(tài)與動作。

processinstance:控制、記錄與監(jiān)視移動于工作流程處理之間、個別獨立的工作流程項目的狀態(tài)。

三:開始使用cdo

1.  由類別建立對象

cdo由多種com的類別所組成,是用來建立新對象的基礎(chǔ),當(dāng)一個對象被建立的時候,這些類別會決定對象標(biāo)準(zhǔn)的預(yù)設(shè)功能。如:cdo的message類別是用來定義新的message對象,每個message對象都有相同的標(biāo)準(zhǔn)功能,允許對象被傳送與接受。

使用vb創(chuàng)建一個message對象的例子:

dim msg as cdo.message

set msg=new cdo.message

使用vbcript創(chuàng)建一個message對象:

dim msg

set msg=server.createobject(“cdo.message”)

這樣我們就可以存取此類別預(yù)設(shè)接口中的屬性與方法,以及任何該類別公開的其它接口。

使用完對象變量之后應(yīng)該釋放對象變量占有的內(nèi)存:set msg=nothing

2.  使用介面(接口)

界面定義了一個由屬性和方法封裝在一起的集合。

類別通常有多個與其相關(guān)聯(lián)的介面,包含一個預(yù)設(shè)(default)的介面,此預(yù)設(shè)介面擁有類別既定的預(yù)設(shè)功能。預(yù)設(shè)介面與該對象呈現(xiàn)的名稱相似,只是在對象名稱前多了一個字母i,表示這是一個相對于類別對象的介面,如person類別有一個管理所有屬性與方法的iperson介面,特別用來定義與管理聯(lián)絡(luò)人類型的信息。這個預(yù)設(shè)的介面是由其所屬對象直接公開,也就是我們可以由對象直接呼叫屬性和方法。我們可以直接調(diào)用person對象的e-mail屬性,程序代碼如下:

dim prs as cdo.person

set prs=new cdo.person

[email protected]

除了默認(rèn)介面以外,大部分的類別至少使用一個以上的其他介面,這些預(yù)設(shè)介面也會被其他類別所使用。參照介面以后才能夠存取其屬性和方法,可以輕易的經(jīng)由調(diào)用相關(guān)屬性來實現(xiàn)。如;idatasource介面經(jīng)由datasource被存取,代碼如下;(vb)

dim dsrc as idatasource

set dsrc = prs.datasource

有些介面沒有用以參照的相關(guān)屬性,這時因該分情況采取不同措施,如果使用vb,則先宣告一個對象變量作為適當(dāng)?shù)慕槊妫缓笸ㄟ^將介面對象變量指向?qū)ο蠊_的介面,自動完成參照介面的動作,如cdoexm的imailrecipient介面

vb:dim fld as cdo.folder

dim rcp as cdoexm.imailrecipient

set rcp=fld

vbscript,不能為變量預(yù)先設(shè)定數(shù)據(jù)類型,必須使用getinterface方法存取介面,幾乎每個cdo對象都公開用以存取介面的getinterface方法,范例如下:

set rcp = fld.getinterface(“imailrecipient”)

四:存取結(jié)構(gòu)描述屬性

ado需要使用fields對象集合才能存取結(jié)構(gòu)描述屬性,而cdo提供一種更簡單的方式,許多比較一般的結(jié)構(gòu)描述屬性都可經(jīng)由cdo屬性來存取。如:我們可以存取person對象中的urn:schema:contacts:homephone結(jié)構(gòu)描述屬性,代碼如下:

prs.homephone=”555-555-0101”

對結(jié)構(gòu)描述屬性而言并沒有相等的cdo屬性,必須使用adofields對象集合,它具有相同的屬性與方法。要存取對象集合中的特定屬性,就要傳送完整并且合格的結(jié)構(gòu)描述屬性名稱,若有相同的cdo相關(guān)常數(shù)(constant)也要一起傳遞,這些常數(shù)以cdo開頭且包含于cdo函數(shù)庫中,可以使用這些常數(shù)以省去傳送完整屬性名稱的麻煩,使用cdo常數(shù)來傳送時,其名稱并不需要加上引號,如下例存取urn:schemas:contacts:ftpsite的屬性:

prs.fields(cdoftpsite)=”somearchive.edu”

如果要存取的結(jié)構(gòu)描述屬性沒有可用的cdo屬性或常數(shù),就必須傳遞完整且合格的結(jié)構(gòu)描述屬性名稱給fields對象集合。下面的例子和上面的程序代碼效果相同:

prs.fields(urn:schemas:contacts:ftpsite)=”somearchive.edu”

為了使程序更容易讀懂,當(dāng)程序中使用的屬性不存在cdo屬性或沒有建立結(jié)構(gòu)描述常數(shù),我們應(yīng)該為應(yīng)用程序定義自己的常數(shù)。

五:使用url

與ado一樣,cdo也是依賴于url以及exoledb provider來存取web存儲系統(tǒng)中的資源,所要被存取的資源必須以完整的文件夾路徑與顯示名稱(displayname)建構(gòu)正確的url地址,如果文件夾路徑或項目的顯示名稱中有空格字符,那在url中也必須保留名稱中的任何空格字符。

cdo也支持相對的url用法.

六:了解并使用idatasource介面

idatasource介面是使用cdo存取web存儲系統(tǒng)中資源的關(guān)鍵,所有的cdo對象經(jīng)由datasource屬性公開idatasource介面,datasource屬性可以用來在web存儲系統(tǒng)中開啟資源、偵測與儲存資源的變更,以及建立新資源。

idatasource介面的屬性與方法,下面是idatasource介面公開的屬性和方法





七:idatasource介面的運作

使用cdo開啟一個資源時,并非動態(tài)的連線到web存儲系統(tǒng),而是將資料由web存儲系統(tǒng)中復(fù)制一個副本到本機的cdo對象,所以實質(zhì)上您會有兩份資料,一份再web存儲系統(tǒng)中,另一份再cdo對象中,使用cdo對象的屬性方法對資料所作的任何改變都是本機上的資料副本,而不是web存儲系統(tǒng)中的資料,直到使用idatasource的儲存方法明確地指定要對資料作變更web存儲系統(tǒng)中的資料才會被變更。如不調(diào)用一個儲存方法,則變更的資料副本就會丟失。

  建立一個新的資源也是同樣的道理。

八:使用cdo開啟一項資源

使用cdo對象中的datasource.open方法,它是以record.open方法為基礎(chǔ)的開啟資源的方法。cdo使用的open方法語法如下:

open ( source url as string [,activeconnection as object]  [,mode as connectmodeenum指定record如何被開啟])默認(rèn)以只讀方式打開。

判斷資料來源是否在本機被修改過:idatasource介面的datasource.isdirty屬性(boolean值)

可以使用該屬性判斷本機的cdo對象是否被變更,如果變更,則使用datasource.save方法保存變更。

九:使用cdo建立新資源

先為新資源建立一個url,再將新資源的相關(guān)信息存儲到該url,datasource.saveto方法可以讓您指定所建立資源的url,url必須是資源的精確的實際位置,還必須包含資源的dav:displayname.

datasource.saveto方法的語法:

saveto(sourceurl as string [,activeconnevtion as object]  [,mode as connectmodeenum]  [,createoptions as recordcreateoptionsenum])

mode,指定record如何被開啟

createoptions,指定資源如何被建立,adcreateoverwrite將會覆蓋已經(jīng)在url上存在的相同名稱的資源項目,如果不設(shè)這個常數(shù),則如果url已經(jīng)存在此資源的話,將會返回一個錯誤。

datasource.savetocontainer方法語法,該方法語法和saveto方法相同

 

兩者的區(qū)別:saveto方法是具體知名資源項目的url和dav:displayname,然后將資源項目存放到指定的url,名稱為指定的dav:displayname,而savetocontainer方法則是將資源存放到指定的url,資源的dav:displayname時exchange自動產(chǎn)生的一個名稱。

該方法的用途:savetrocontainer方法在日程安排、建立約會時用得比較多,因為日程安排項目很多,時常有同名的約會名稱,我們可能會將前面已經(jīng)建立的越會覆蓋掉,為了防止這樣的事情發(fā)生,我們應(yīng)該采用savetocontainer方法。

十:使用其他對象開啟cdo對象

可以使用datasource.openobject方法由其他記憶體中的對象打開cdo對象,而記憶體中的對象可以是其他cdo對象或是其他函數(shù)庫的對象,比如ado2.5

openobject方法的語法如下:

openobject(soure as unknown,  interfacename as string)

source:被要打開的對象所參照的已打開對象,例如一個ado record或一個已開啟的電子郵件,通常是一個對象變量

interfacename:source所公開的介面名稱字串,例如,假使source是電子郵件的bodypart對象,則interfacename就是bodypart,這個參數(shù)區(qū)分大小寫。

為什么會使用該方法:

當(dāng)我們已經(jīng)使用recordset對象來瀏覽web存儲系統(tǒng)的時候,可能使用connection對象執(zhí)行sql查詢來篩選所需要的項目,有或是批次的建立新項目,但是可能需要使用cdo來設(shè)定對象指定的屬性,如果要修改使用openobject方法開啟的cdo對象,需要使用datasource.savetoobject方法將變更儲存回parent對象,儲存時傳遞openobject方法相同的參數(shù)給savetoobject方法。

檢查文件夾或項目是否存在:

使用ado record的open方法,打開欲檢查的url,若成功打開,說明此url已經(jīng)有相同的資源,若不能打開,則說明資源或項目不存在

十一:使用cdo建立文件夾

使用cdo建立新的文件夾的時候,要建立新的cdo folder物件,然后設(shè)定您希望其運作方式的相關(guān)屬性,假如知道你要設(shè)定文件夾保存特定形態(tài)的項目,便要設(shè)定contentclass屬性為其中一個事先定義的內(nèi)容類別,若要文件夾也可以被mapi的用戶端所使用,則要設(shè)定http://schemas.microsoft.com/exchange/outlookfolderclass屬性,假如有調(diào)用fields集合對象來設(shè)定屬性,要先調(diào)用update方法,再使用saveto方法保存。

如果要刪除一個文件夾或項目需要調(diào)用record的deletereocrd方法。  

十二:使用文件夾接收電子郵件

當(dāng)一個文件夾被建立時,預(yù)設(shè)并不能通過smtp接受郵件,必須要明確地開啟文件夾來接受電子郵件,cdo的imailrecipient介面的mailenable方法可以達(dá)到這個目的,exchange會自動指定一個電子郵件地址給文件夾.

如果在建立文件夾的同時就要開啟文件夾接收電子郵件的功能的話,要先儲存剛剛創(chuàng)建的文件夾,然后再調(diào)用mailenable方法,如果使用已存在的文件夾,則不需要再將其存儲一遍。

例程:

set fl=createobject(“cdo.folder”)

url=file://./backofficestorage/oaserver.exchange/

set rcp=fl.getinterface(“imailrecipient”)

fl.datasource.save

set fl=nothing set rcp=nothing

計算文件夾中的內(nèi)容:

使用ado計算文件夾中的資源的時候,必須要瀏覽整個文件夾,這種方式忽視資源的內(nèi)容是項目還是文件夾,而且當(dāng)資源數(shù)量龐大時,會給服務(wù)器帶來相當(dāng)大的負(fù)荷

使用cdo可以避免程序中有不明確的狀況發(fā)生,以及造成服務(wù)器負(fù)載過重,folder對象提供三種計算文件夾內(nèi)容的屬性:

itemcount:該屬性計算文件夾中所有不包含子文件夾的項目的數(shù)量。

unread itemcount:該屬性只計算未被標(biāo)記為已讀取的項目數(shù)量。

visablecount:該屬性只計算那些使用者可見并可存取的項目,忽略可能存儲于文件夾中的系統(tǒng)隱藏項目。

 

 

 

 
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚松县| 诏安县| 刚察县| 辉县市| 荔浦县| 蒙山县| 新乡市| 瑞金市| 碌曲县| 农安县| 宿州市| 永川市| 鄂州市| 沙坪坝区| 股票| 雅江县| 麦盖提县| 翁牛特旗| 呼玛县| 图木舒克市| 东海县| 北流市| 南雄市| 卫辉市| 博客| 达孜县| 凯里市| 集安市| 神木县| 大方县| 博罗县| 郑州市| 宁阳县| 南涧| 茂名市| 密云县| 革吉县| 太谷县| 莲花县| 达拉特旗| 长武县|