一:关于CDO对象集合的说明
CDO对象集合是建立协作是应用程序的可靠的API,ADO可以用来存取WEB存储系统,但是他缺少协同作业最基本的功能,而CDO却可以处理一般的应用程序和高级的工作流应用程序解决方案,CDO甚至可以提供我们管理exchange的能力,以及与windows 2000的AD通讯。
CDO:collaboration data objects,是一项可以用来建立用途广泛的协同作业应用程序的技术,能完成如:接受传送电子邮件、日程安排、联络人管理、工作流程以及exchange管理的应用程序。 h t t p://w w w.cientx.com/hy/15DE99B
慈恩天下—牡丹江慈恩院张凤英院士
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对象模块,该物件模块包括了一些协同作业应用程序中最常见的核心组件与接口。也可以使用该对象模块来建立与设定web存储系统中的文件夹,其中最上层的cdo对象常用来建立以下几种解决方案:
文件夹:(folder)在信箱存放区或公用存放区的容器。
人员:(person)WEB存储系统文件夹中的联络人类型的资料,或者是AD中的使用者或联络人对象。
邮件:(message)电子邮件
约会:(appointment)已经安排的约会或会议
日历信息(日程安排):(calendar message)会议邀请
收件者:(addressee)任何形式的电子邮件收件者或会议邀请的收件者
出席者:(attendee)包含于约会或者会议中的人员
所有最上层的对象都有两个重要的共同接口(interface)
Iconfiguration:用来定义可以应用于多个对象的行为模块,
Idatasource:每个CDO对象都公开Idatasource接口,用来管理、存放与存储资料。
2. CDO for exchange management objects
该对象模块是用来建立以及管理exchange信箱与exchange服务器组件的类别和接口所组成。当编写用来管理exchange收件者和信箱的程序代码时,会常用到。使用的对象是:
IMailRecipient:针对使用者指定电子邮件如何传送与管理,此对象也可以使联络人与文件夹不需要信箱便可以接收电子邮件。
IMailboxStore:指定如何建立、移动、删除exchange信箱,以及如何管理可使用信箱的收件者其可用来管理的属性。如果开发WEB架构的服务器管理工具,该对象模块提供让我们可以整体的管理服务器的对象,这些状况可用的最上层的对象有:
ExchangeServer:管理exchange2000服务器与传回基本信息,如服务器类型与版本。
FolderTree:管理服务其中的文件夹树状结构,包含任何副本。
StorageGroup:管理储存群组,用来组织信箱存放区和公用存放区。
MailboxStoreDB:管理单一使用者的信箱存放区可以使用此对象来连接、移动或中断连接信箱存放区,并传回有关存放区数据库的基本信息。
PublicStoreDB:建立、管理与删除公用存放区,并传回有关存放区数据库的基本信息。
3. CDO Workflow for Exchange
该对象模块是由用来建立以及执行工作流程与路由应用程序的类别和接口所组成。建立工作流应用程序有两种方式:
方式一:使用Workflow designer for Microsoft Exchange 2000 Server
方式二:使用自行建立工作流程事件流程与事件接受的方式。
我们使用前者,使用WorkFlow Designer我们就不需要大部分的工作流程对象,只有当编写回应各式各样工作流程动作的Script时,才需要使用这些对象,在我们的Script中最可能用到的对象如下:
IWorkflowSession:提供工作流程引擎、动作的Script与所处理的工作流程项目(ProcessInstance)之间的执行期(run-time)通讯。
IworkflowMessage:建立工作流程处理中要传送给收件者的通知邮件。
AuditTrailEventLog:于应用程序记录档(log)中,建立有关工作流程事件动态的项目(entries)。
如果使用Workflow Designer无法提供完成要设计的功能,那就要自行建立事件接受,如果自行建立事件接受还需要熟悉下列对象:
ProcessDefinition:定义工作流程中的逻辑,包含状态与动作。
ProcessInstance:控制、记录与监视移动于工作流程处理之间、个别独立的工作流程项目的状态。
三:开始使用CDO
1. 由类别建立对象
CDO由多种COM的类别所组成,是用来建立新对象的基础,当一个对象被建立的时候,这些类别会决定对象标准的预设功能。如:CDO的message类别是用来定义新的Message对象,每个Message对象都有相同的标准功能,允许对象被传送与接受。
使用VB创建一个Message对象的例子:
dim msg as cdo.message
set msg=new cdo.message
使用Vbcript创建一个message对象:
dim msg
set msg=server.createobject(“cdo.message”)
这样我们就可以存取此类别预设接口中的属性与方法,以及任何该类别公开的其它接口。
使用完对象变量之后应该释放对象变量占有的内存:set msg=nothing
2. 使用介面(接口)
界面定义了一个由属性和方法封装在一起的集合。
类别通常有多个与其相关联的介面,包含一个预设(default)的介面,此预设介面拥有类别既定的预设功能。预设介面与该对象呈现的名称相似,只是在对象名称前多了一个字母I,表示这是一个相对于类别对象的介面,如person类别有一个管理所有属性与方法的IPerson介面,特别用来定义与管理联络人类型的信息。这个预设的介面是由其所属对象直接公开,也就是我们可以由对象直接呼叫属性和方法。我们可以直接调用Person对象的e-mail属性,程序代码如下:
dim prs as cdo.person
set prs=new cdo.person
prs.email=someone@domain.com
除了默认介面以外,大部分的类别至少使用一个以上的其他介面,这些预设介面也会被其他类别所使用。参照介面以后才能够存取其属性和方法,可以轻易的经由调用相关属性来实现。如;Idatasource介面经由Datasource被存取,代码如下;(VB)
dim dsrc as Idatasource
set dsrc = prs.datasource
有些介面没有用以参照的相关属性,这时因该分情况采取不同措施,如果使用VB,则先宣告一个对象变量作为适当的介面,然后通过将介面对象变量指向对象公开的介面,自动完成参照介面的动作,如CDOEXM的IMailRecipient介面
VB:dim fld as cdo.folder
Dim rcp as cdoexm.imailrecipient
Set rcp=fld
Vbscript,不能为变量预先设定数据类型,必须使用getinterface方法存取介面,几乎每个CDO对象都公开用以存取介面的GetInterface方法,范例如下:
Set rcp = fld.getinterface(“imailrecipient”)
四:存取结构描述属性
ADO需要使用fields对象集合才能存取结构描述属性,而CDO提供一种更简单的方式,许多比较一般的结构描述属性都可经由CDO属性来存取。如:我们可以存取Person对象中的urn:schema:contacts:HomePhone结构描述属性,代码如下:
prs.HomePhone=”555-555-0101”
对结构描述属性而言并没有相等的CDO属性,必须使用adofields对象集合,它具有相同的属性与方法。要存取对象集合中的特定属性,就要传送完整并且合格的结构描述属性名称,若有相同的CDO相关常数(constant)也要一起传递,这些常数以cdo开头且包含于CDO函数库中,可以使用这些常数以省去传送完整属性名称的麻烦,使用CDO常数来传送时,其名称并不需要加上引号,如下例存取urn:schemas:contacts:FTPSite的属性:
prs.fields(cdoFtpSite)=”somearchive.edu”
如果要存取的结构描述属性没有可用的CDO属性或常数,就必须传递完整且合格的结构描述属性名称给Fields对象集合。下面的例子和上面的程序代码效果相同:
prs.fields(urn:schemas:contacts:ftpsite)=”somearchive.edu”
为了使程序更容易读懂,当程序中使用的属性不存在CDO属性或没有建立结构描述常数,我们应该为应用程序定义自己的常数。
五:使用URL
与ADO一样,CDO也是依赖于URL以及ExOLEDB provider来存取Web存储系统中的资源,所要被存取的资源必须以完整的文件夹路径与显示名称(displayname)建构正确的URL地址,如果文件夹路径或项目的显示名称中有空格字符,那在URL中也必须保留名称