Exchange 2000 Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH Exchange 2000 Schnittstellen Extended MAPI Outlook Forms Simple MAPI CDO 3.0 Routing Objects Outlook Object Model CDONTS Active Messaging COM-Addins LDAP Event Scripting Workflow.

Download Report

Transcript Exchange 2000 Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH Exchange 2000 Schnittstellen Extended MAPI Outlook Forms Simple MAPI CDO 3.0 Routing Objects Outlook Object Model CDONTS Active Messaging COM-Addins LDAP Event Scripting Workflow.

Exchange 2000
Programmierschnittstellen
Michael Klopstock
Exchange System Engineer
Microsoft GmbH
Exchange 2000 Schnittstellen
Extended MAPI
Outlook Forms
Simple MAPI
CDO 3.0 Routing Objects
Outlook Object Model
CDONTS
Active Messaging COM-Addins
LDAP
Event Scripting
Workflow Engine
Exchange Server Interfaces
ADO
WEBFORMS
AVAPI
CDO 1.21
CDOSYS
DAPI
OLE Messaging
WEBDAV
Client Extensions
CDOEXM
CMC
OLEDB
EFD
ADSI
XML
Agenda



Exchange 5.x Schnittstellen
•
•
Store Schnittstellen
Directory Schnittstellen
Exchange 2000 Schnittstellen
•
•
Neue Store Schnittstellen
Neue Directory Schnittstellen
Exchange 2000 Future
•
•
Exchange 2000 SP1
Exchange und .NET
Exchange 5.x Store Schnittstellen
AVAPI
CDONTS
CMC
Active Messaging
MAPI
Store
CDO 1.21
OLE Messaging
Simple MAPI
Exchange Server Interfaces
Extended MAPI




Von über 100 Firmen und Microsoft
definierter Standard, welcher das
Zusammenspiel zwischen Komponenten und
deren Schnittstellen definiert
Sämtliche Bestandteile des Exchange
Servers kommunizieren u.a. über MAPI
(Store, Gateways, Addressbook, Transport,
etc.) und Clients (Exchange und Outlook)
OLE/COM basierend
Programmierung nur mit C/C++
Extended MAPI



MAPI ist ein offenes Konzept, nahezu alle
Komponenten können durch eigene
Implementierungen ersetzt oder erweitert
werden
MAPI definiert, welche Schnittstellen
Komponenten im Gesamtsystem haben
müssen, die Implementierung selbst ist
offen.
Realisiert über COM Interfaces (wie
abstrakte Basisklassen)
Extended MAPI
MAPIINIT_0 MapiInitStruct = {0, MAPI_NT_SERVICE};
hResult = MAPIInitialize(&MapiInitStruct);
// ...
hResult = MAPILogonEx(0,
GetMAPIProfileName(),
GetMAPIProfilePassword(),
MAPI_NEW_SESSION | MAPI_NO_MAIL,
&g_lpMAPISession);


Wichtig: MAPIInitialize ruft intern CoInitialize
(COINIT_APARTMENT..), um COM zu initialisieren,
funktioniert also nicht in free-threaded COM Servern.
Lsg: MAPI32.DLL von Exchange 5.5 SP1 unterstützt Flag
MAPI_NO_COINIT ( = 8)
DEMO: Extended MAPI
Erzeugen und Versenden einer Nachricht
MAPI Event Notifications (1)

Nice Feature:
•
•
•
Mapi unterstützt Notifications zwischen
MAPI Objekten (Store und Addressbook)
Bietet Client oder Serveranwendung die
Möglichkeit, auf Änderungen wie Message
angekommen, verschoben, geändert,
gelöscht, Addressbucheintrag erzeugt,
verändert, gelöscht etc. zu reagieren
Implementiert über AdviseSinks
(IMAPIAdviseSink::OnNotify)
MAPI Event Notifications (2)
Event Typ
Beschreibung
Advise source Objekt
Neue Nachricht
(fnevNewMail)
Eine Nachricht wurde zugestellt und
wartet auf Abarbeitung
Message Store, Ordner
Object kopiert
(fnevObjectCopied)
Ein MAPI Objekt wurde kopiert
Ordner, Nachrichten, alle
Typen von Addrb. Objekten
Object modifiziert
(fnevObjectModified)
Ein MAPI Objekt wurde verändert
Ordner, Nachrichten, alle
Typen von Addrb. Objekten
Object erzeugt
(fnevObjectCreated
Ein MAPI Objekt wurde erzeugt
Ordner, Nachrichten, alle
Typen von Addrb. Objekten
Object verschoben
(fnevObjectMoved)
Ein MAPI Objekt wurde verschoben
Ordner, Nachrichten, alle
Typen von Addrb. Objekten
Object gelöscht
(fnevObjectDeleted)
Ein MAPI Objekt wurde gelöscht
Ordner, Nachrichten, alle
Typen von Addrb. Objekten
Critical error
(fnevCriticalError)
Globaler Fehler oder Event wie Session
Shutdown
Alle Store und Adressbuch
Objekte, Tabellen, Status
Erweiterter event
(fnevExtended)
Ein interner Event, von einem
spezifischen Provider ausgelöst
Jedes Advise Source Objekt
Suche fertig
(fnevSearchComplete)
Eine Suchoperation ist beendet und die
Ergebnisse liegen bereit
Ordner
Tabelle modifiziert
(fnevTableModified)
Information in einem MAPI Tabellen
Objekt haben sich geändert
Tabellen
DEMO: MAPI Event Notification
MDB Viewer (MDBVU32) Demo
MAPI Resources
 MAPI
Links:
• http://msdn.microsoft.com/exchange
•
Exchange Server 2000 Documentation / Messaging API (MAPI)
• http://peach.ease.lsoft.com/archives/mapi-l.html
 MAPI
Bücher:
• "Inside MAPI", Les Thaler (http://www.insidemapi.com)
• Ben Götter, "Developing Applications for Microsoft
•
Exchange with C++"
Nik Okuntsev, "Programming MS Exchange Server",
http://www.wrconsulting.com/Software/Publications/Exchange/Contents.htm
Exchange Server Interfaces




Microsoft Exchange Server hat eigene Interfaces
(11 St.), zugehörige Methoden und Runtime
Functions (317 St.)
Exchange Dienste benutzen sowohl MAPI als
auch Exchange Server Interfaces, deren
Methoden und Runtime functions
Exchange Server Interfaces sind hauptsächlich
für das Managen des Stores gedacht. (Rules
erzeugen, ACL’s auf Folder, Synchronisation, ..)
Eigene Anwendungen können diese Interfaces
und Methoden ebenfalls nutzen
Exchange Server Interfaces











IExchangeExportChanges (EDKMDB.H)
IExchangeFavorites (EDKMDB.H)
IExchangeFolderACLs (ACLCLS.H)
IExchangeFolderRules (RULECLS.H)
IExchangeImportContentsChanges (EDKMDB.H)
IExchangeImportHierarchyChanges (EDKMDB.H)
IExchangeManageStore (EDKMDB.H)
IExchangeModifyTable (EDKMDB.H)
IExchangeRuleAction (EDKMDB.H)
IExchangeRuleExt (EXCHCLI.H)
IExchangeRuleExtCallback (EXCHCLI.H)
Exchange Server Interfaces

Die Exchange Server Runtime Functions
(317 Stück) werden in zwei Gruppen
unterteilt:
•
•
Core functions
•
Dazu gehören Functionen für Directory
Zugriff (DAPI), Proxy Address Generation,
Routing Table (SAD_xx), Admin Extension,
Tracing, Installation, Rules, MAPI helper und
Gateways
Non Core functions
•
Dazu gehören Funktionen für Gateways,
Service, Event, Logging, Konfiguration und
Konvertierung
Exchange Server Interfaces (ICS)




Incremental Change Synchronization (ICS) ist
Teil der Exchange Server Interfaces
Wird verwendet, um Änderungen in der
Storestruktur und Storeinhalt mitzuprotokollieren,
abzufragen und um Änderungen zu
synchronisieren.
Der Exchange Server 5.5 Event Service benutzt
dieses Interface.
Interfaces des ICS:
•
IExchangeExportChanges
IExchangeImportHierarchyChanges
IExchangeImportContentsChanges
Incremental Change Synchronisation
 Interface,
um Store Inhalte/Hierachie
zu synchronisieren
 Exchange Private Store (Mailboxen)
 Exchange Public Store (Öffentliche
Ordner)
 nicht verfügbar für PST oder OST
Stores
 Zugriff via MAPI, sind aber spezifisch
für Microsoft Exchange
Beispiel: Platform SDK April99: ICSAGENTWIZARD
Incremental Change Synchronisation

Schnittstellen
•
•
Synchronizer interface
•
IExchangeExportChanges
Collector interfaces
• IExchangeImportHierarchyChanges
• IExchangeImportContentsChanges
 Zwei verschiedene Synchronizer für
Hierarchietabelle und Inhalttabelle
• PR_HIERARCHY_SYNCHRONIZER
• PR_CONTENTS_SYNCHRONIZER
 Realisiert über ein IStream Objekt, welches den
aktuellen Status der Synchronisation enthält
 Das Format des Synchronisations Status
Objekts wird vom Collector/Synchronizer
definiert
 Enthält Informationen über alle importierten
und exportierten Daten
Anti Virus API


Ab 5.5 SP3 (scannt nur Attachments)
Anti-Viren Hersteller implementiert DLL
mit 3 exportierten Funktionen:
•
•
•


VirusScanInit
VirusScanTerm
VirusScanAndClean
Infos für Admin's: Q263949
Ab Exchange 2000 SP1 AVAPI 2.0
•
scannt alle Properties
Common Messaging Calls (CMC)

Definiert von der X-Open Application Program Interface
Association (XAPIA).
•
•

10 simple Funktionen um Email-Funktionalität in Anwendungen
zu integrieren

Senden, Empfangen und Adressenauflösung
Plattformunabhängig (Win Implementation verwendet MAPI)
Sample im Platform SDK: CMC.CLI
Anwendung
Ruft Cmc_logon
CMC
Mapi32.dll
Extended MAPI
CMC.DLL
cmc_send
cmc_send_documents
cmc_act_on
cmc_list
cmc_read
cmc_lookup
cmc_logon
cmc_logoff
cmc_free
cmc_queryconfiguration
Simple MAPI
 12
simple Funktionen um EmailFunktionalität in Client- Anwendungen
zu integrieren
Anwendung
Ruft lpfnMapiSendMail(...)
MapiSendMail(...)
Extended MAPI
Mapi32.dll
MAPIAddress
MAPIDeleteMail
MAPIDetails
MAPIFindNext
MAPIFreeBuffer
MAPILogoff
MAPILogon
MAPIReadMail
MAPIResolveName
MAPISaveMail
MAPISendDocuments
MAPISendMail
OLE/Active Messaging (1)




Ab Exchange 4.0 mitgeliefert (MDISP32.DLL)
Nur für Client-side Messaging Apps
• Programmierbar
mit Visual Basic,
Visual Basic® for Applications,
C, C++, etc
Bietet mehr Funktionalität als Simple MAPI
oder CMC
• Folder Zugriff, mehr Adressbuch
Properties, mehr Message Properties,
Custom Properties, etc.
Wesentlich einfacher zu programmieren als
Extended MAPI
OLE/Active Messaging (2)
'Create the Session Object
Set objSession = CreateObject("mapi.session")
'Logon using the session object
objSession.Logon profileName:=“Michael Klopstock"
'Add a new message object to the OutBox
Set objMessage = objSession.Outbox.Messages.Add
objMessage.subject = "This is a test.”
objMessage.Text = "This is the message text.”
'Add a recipient object to the objMessage.Recipients collection
Set objRecipient = objMessage.Recipients.Add
'Set the properties of the recipient object
objRecipient.Name = ”Michael Klopstock”
objRecipient.Type = mapiTo
objRecipient.Resolve
'Send the message
objMessage.Send showDialog:=False
'Logoff using the session object
objSession.Logoff
CDO 1.x






COM Server basierend auf MAPI
Nachfolger von Active Messaging
Mitgeliefert mit Microsoft Exchange 5.x und
Outlook
Support für Server-seitige und Client- seitige
Anwendungen
Support für Web Anwendungen
Kompatibel mit Active Messaging 1.0
CDO 1.21
Set objSession = CreateObject("MAPI.Session")
objSession.Logon 'profileName:=”M. Klopstock”..
Set objMessage = objSession.Outbox.Messages.Add
objMessage.Subject = "Sample Message"
objMessage.Text = ”Test."
Set objOneRecip = objMessage.Recipients.Add
objOneRecip.Name = ”Sepp Meier"
objOneRecip.Type = CdoTo
objOneRecip.Resolve
objMessage.Update
objMessage.Send showDialog:=False
objSession.Logoff
CDO::CDO() // Konstruktor
{
MapiInitialize(...., ..., ....);
}
CDO::Logon(LPSTR lpstrProfile,....)
{
MAPILogonEx(lpstrProfile,....);
}
Anwendung
CDO
(CDO.DLL)
ExtendedMAPI
(MAPI32.DLL)
CDO Object Model 1.x
Session
InfoStores
RootFolder
Messages
Attachments
Fields
MessageFilter
Fields
Recipients
Fields
Fields
Folders…
AddressLists
AddressEntries
Fields
AddressEntryFilter
Fields
Objekt und Collection
Nur Objekt
CDO 1.21 Object Modell (Neu)
Session
GetDefaultFolder
Objekt und Collection
GetAddressList
Nur Objekt
InfoStores
Methode
RootFolder
Messages
Message
Recipients
AppointmentItem
RecurrencePattern
MeetingItem
GroupHeader
Recipient
GetFreeBusy
DEMO: CDO 1.21
Anzeige von Kalendereinträgen eines Zeitraums
Exchange Event Service




Ab Exchange Version 5.5
Der Exchange Server Event Service registriert
sich bei MAPI, um Folder Notifications vom Store
zu bekommen
Nach Erhalt einer Notification stösst der Event
Service den ICS an, um die Art der Veränderung
festzustellen
Daraus konstruiert der Event Service einen
Event, der an die installierten Agents (Default =
Event Scripting Agent) weitergereicht wird.
Exchange Event Service
Event Handler Agent:
 Man kann beim Exchange Server Event Service
eigene Agents (siehe Event Scripting Agent)
registrieren, um folgende Events abzufangen:
Erzeugen einer Nachricht in einem Ordner
Änderung einer Nachricht in einem Ordner
Löschen einer Nachricht in einem Ordner

Ein Event Handler Agent ist ein Standard COM
Object
• IExchangeEventHandler Interface muss implementiert werden
• ExecuteEvent() Funktion muss implementiert werden:

Infos in MSDN unter:
Platform SDK/Database und Messaging Service/Microsoft Exchange Server/
Exchange Server Programmer’s Reference/Guide/ Exchange Server
Scripting Agent/Advance Topics:Custom Agents
Exchange Scripting Agent


Mögliche Events:
•
•
•
•
Vorsicht:
•
•

OnMessageCreated
OnMessageChanged
OnMessageDeleted
OnTimer (Min 15 min)
Asynchrones Processing
•
wenn z.B.: auf Outbox angewandt, dann kann Message
schon wieder gelöscht sein, bis der Agent darauf zugreift.
Single Threaded => Skalierung !
Mögliche Anwendungsbereiche:
•
•
Periodisches Archivieren von Nachrichten und/oder
Attachments
Workflow Anwendungen (Post in Public Folder, etc.)
Demo: Exchange Scripting Agent
Einrichten eines Scripting agents
Exchange Routing Objects


Basiert auf Exchange Event Service
Erweitert Exchange 5.5 Server Scripting:
•
•


Ziel: Vereinfachung der Erstellung von Routing und
Tracking Anwendungen mit Scripting
Nicht-Ziel: Volle Workflow Funktionalität bieten
Ab Exchange 5.5 Service Pack 1
Zielgruppe sind "Corporate Developers" und
"Solution Providers"
Exchange Routing Objects


"Hub and Spoke" Architektur
•
Hub = Nabe = Ordner, Spoke = Speiche = Stationen
"Hub" Ordner enthält:
•
•
•
Custom agent (event handler)
•
Exchange routing engine (ExRtEng.dll)
Eine Prozessdefinition
•
•
•
Routing map Objekt
Maps sind eine sequentielle Liste von Aktionen
Satz der zur Verfügung stehenden VB Script
Funktionen
Die gesamte Logik verbleibt auf dem Server
Exchange Routing Objects
Logische Routen Ansicht
Start=>
A
B
C
Technische Routen Ansicht
Start=>
User instantiates
process by
submitting item to
hub folder
Hub sends item to A
who advances route
by replying to hub
A
Hub containing
Process Definition
Hub sends item to C
completes process by
C replying to hub
B
Hub sends item to B
who advances route
by replying to hub
C
Exchange Routing Objects

Routing MAP
•
•
•
•
Sequentielle Liste von Aktionen
Aktionen können interne sein (Flags=0),
oder externe im Skript (Flags=2)
Aktionen haben 0 oder mehr Parameter
Jeder Parameter entspricht 1 Spalte
ActivityID
1000
1010
1020
1030
1040
1050
1060
5000
10000
Activity
Flags
Parameter 1
Send
2
Bob Smith
W ait
0
10080
ORSplit
0
IsTimeout
Goto
0
5000
Receive
2
FALSE
Consolidate
2
FALSE
goto
0
10000
CustomExpiry 2
Manager
Terminate
0
Parameter 2
IPM.Note
IPM.Alert
Exchange Routing Objects
Routing
objects (ExRtObj.dll)
RouteDetails
ProcInstance
Map
Row
Log
Participant
VoteTable
WorkItem
Map
VoteTable
Row
= given to script at runtime
= objects you (typically) create
Exchange Client Extensions



DLLs um die Funktionalität von
Exchange oder Outlook zu erweitern
COM-basiert
Installation
•
•
Registry unter HKLM\Software\Microsoft
\Exchange\Client\Extension
Outlook benutzt ECF Files oder Registry
Infos auf MSDN unter: Platform SDK/Database and messaging
services/Extending the Microsoft Exchange Client
Samples im Platform SDK:
Event Extension:
EVENTS.EXT
Command extension:
COMMAND.EXT
Property Sheet Extension:
PROPSH.EXT
Exchange Client Extensions






Event Extension
• IExchExtSessionEvents (Neue Message eingetroffen,etc.)
IExchExtUserEvents (Selektiertes Item (Listbox, Text, ...))
IExchExtMessageEvents (Message Read, Write, Submit, ...)
IExchExtAttachedFileEvents (Attachment open, - Verhalten,.)
Command Extensions
• IExchExtCommands (Menu, Toolbar, Delete Command, ...)
IExchExtUserEvents (Selektiertes Item (Listbox, Text, ...))
Propertysheet Extension
• IExchExtPropertySheets (Eigene Prop-sheets für Msg, Props)
Adanced Criteria Extension
• IExchExtAdvancedCriteria (Advanced Search Dlg modifizieren)
Task and Session Extensions
• IExchExt (Client Start/Shutdown/Logon/Logoff)
Modal and modeless Extension Windows
• IExchExtModeless ( Eigene Fenster, mit Callback Routine)
CDONTS






Standard SMTP Mailer für Server
Anwendungen
SMTP send & receive message handling
Wird mit IIS 4.0 and Exchange 5.5
installiert
Nicht authentiziertes “anonymous”
Versenden von Nachrichten
Plain text, HTML, und MHTML Message
UUEncoded or Base64 content
encoding
DEMO: CDONTS
Versenden von Email mit 4 Zeilen Code
Exchange 2000 Schnittstellen
Extended MAPI
Outlook Forms
Simple MAPI
CDO 3.0 Routing Objects
Outlook Object Model
CDONTS
Active Messaging COM-Addins
LDAP
Event Scripting
Workflow Engine
Exchange Server Interfaces
ADO
WEBFORMS
AVAPI
CDO 1.21
CDOSYS
DAPI
OLE Messaging
WEBDAV
Client Extensions
CDOEXM
CMC
OLEDB
EFD
ADSI
XML
Exchange 5.x Directory Schnittstellen
Directory API (DAPI)
EMSABP.DLL
MAPI
Directory
LDAP
ADSI
Exchange Directory verwaltet Informationen über
sämtliche installierten Objekte ( Mailboxen, Ordner,
etc..) deren Struktur und Attribute (=Schema)
Directory Zugriff


Via MAPI address book provider
•
Via LDAP/ADSI
•
•
•

OK für read-only, Schreibzugriff
eingeschränkt
Microsoft Exchange 5.0 unterstützt LDAP
v2 read
Microsoft Exchange 5.5 unterstützt voll
read/write LDAP v3
ADSI benutzt den LDAP provider
Via Directory access functions (DAPI)
•
Nicht vorhanden in Exchange 2000 !
Directory Zugriff LDAP/ADSI
LDAP/ADSI



LDAP (Lightweight Directory Access Protocol) bildet
das Zugriffsprotokoll auf Objekte im AD
Jedes Objekt ist über einen eindeutigen LDAP-Pfad
adressierbar
ADSI (Active Directory Service Interface) ist die
Abstraktionsschicht für Zugriffe auf das AD (via LDAP)
•


Anwendungen können entweder die LDAP API benutzen oder
das Active Directory Service Interface (ADSI) benutzen
Vorteil von LDAP:
•
IETF Standard
Vorteil von ADSI:
•
•
Einfacher zu programmieren,
Unabhängig vom darunterliegenden Directory Service
LDAP Konventionen



Ein LDAP Pfad (URL) besteht aus
•
•
DC = Domain Context
CN = Common Name
LDAP://CN=Michael
Klopstock,CN=Users,DC=seldom,DC=de
Wird von hinten nach vorne gelesen:
In der Domäne seldom.de im Container
Users der Benutzer Michael Klopstock
ADSI Object Modell






IADs
IADsUser
IDispatch
IADsContainer
IADsPropertyList, IADsPropertyEntry,
IADsPropertyValue
IADsSecurityDescriptor,
IADsAccessControlList,
IADsAccessControlEntry
ADSI Bind and Enumerate
Dim MyContainer As IADsContainer
‘Bind to container object
Set MyContainer =
GetObject("LDAP://MyLdapSvr/O=Internet/DC
=Redmond")
‘Enumerate child objects
for each Object in MyContainer
Debug.Print Object.ADsPath
Next
DEMO: Directory Zugriff ADSI
Setzen des Extension-Data-Attributes1
eines Exchange Users via ADSI
Directory Zugriff
Via DAPI (Directory API)



Proprietäre API für den Zugriff auf das
Exchange Directory (10 Funktionen, 6
Callback Funktionen)
Wird vorrangig benutzt um Attribute eines
“Containers” (Mailbox, Gateways, etc. ) aus
dem Directory zu lesen/schreiben sowie für
Installation und Konfiguration von Gateways
Samples im Platform SDK
•
•
•
DIRSYNC: Importing and Exporting Mailboxes
DSEXPORT: Exporting Directory Objects
DSIMPORT: Importing Directory Objects
Directory Zugriff via DAPI (1)
#include <dapi.h>
int main( void )
{
DAPI_PARMS prms = {0};
prms.dwDAPISignature = DAPI_SIGNATURE;
prms.dwFlags = DAPI_CREATE_NT_ACCOUNT;
// Initialize base point and container
prms.pszBasePoint = "/o=REORG/ou=THEFARSITE ";
prms.pszContainer = "/cn=Recipients";
PDAPI_EVENT pDAPIEvent = NULL;
DAPI_HANDLE hDAPISession = NULL;
pDAPIEvent = DAPIStart(&hDAPISession, &prms);
ATT_NAME avAttrName [4];
// Initialize
avAttrName[0].DapiType = DAPI_STRING8;
avAttrName[0].Value.pszA = "Obj-Class";
avAttrName[0].size = 9;
avAttrName[0].pNextValue = NULL;
avAttrName[1].DapiType = DAPI_STRING8;
avAttrName[1].Value.pszA = "Directory Name";
avAttrName[1].size = 14;
avAttrName[1].pNextValue = NULL;
Directory Zugriff via DAPI (2)
avAttrName[2].DapiType = DAPI_STRING8;
avAttrName[2].Value.pszA = "Home-Server";
avAttrName[2].size = 11;
avAttrName[2].pNextValue = NULL;
ZeroMemory( &avAttrName[3], sizeof(ATT_VALUE) );
ATT_VALUE avAttrValue[4];
avAttrValue[0].DapiType = DAPI_STRING8;
avAttrValue[0].Value.pszA = "Mailbox";
avAttrValue[0].size = 8;
avAttrValue[0].pNextValue = NULL;
avAttrValue[1].DapiType = DAPI_STRING8;
avAttrValue[1].Value.pszA = "NewAccount";
avAttrValue[1].size = 10;
avAttrValue[1].pNextValue = NULL;
avAttrValue[2].DapiType = DAPI_STRING8;
avAttrValue[2].Value.pszA = ”NTMIKEKLOP";
avAttrValue[2].size = 7;
avAttrValue[2].pNextValue = NULL;
ZeroMemory( &avAttrValue[3], sizeof(ATT_VALUE) );
Directory Zugriff via DAPI (3)
DAPI_ENTRY deAttr;
DAPI_ENTRY deValues;
deAttr.unAttributes = 3;
deAttr.ulEvalTag = TEXT_VALUE_ARRAY;
deAttr.rgEntryValues = &avAttrName[0];
deValues.unAttributes = 3;
deValues.ulEvalTag = VALUE_ARRAY;
deValues.rgEntryValues = &avAttrValue[0];
char * pAccount = NULL;
char * pPassword = NULL;
ULONG ulUSN = 0;
pDAPIEvent = DAPIWrite( hDAPISession, DAPI_WRITE_CREATE,
&deAttr, &deValues, &ulUSN,
&pAccount, &pPassword );
Directory Zugriff via DAPI (4)
if ( pDAPIEvent )
{
LPVOID lpMsgBuf;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_HMODULE |
FORMAT_MESSAGE_IGNORE_INSERTS,
pDAPIEvent->hinstDAPI,
pDAPIEvent->dwDAPIError,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL );
MessageBox( NULL, (char *) lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION );
// Free the buffer.
LocalFree( lpMsgBuf );
}
// Terminate DAPI session
DAPIEnd( &hDAPISession );
return ( 0 );
}
Überblick Exchange 5.x Schnittstellen
Eigene Apps,Services, Gateways
Internet
SMTP,
Pop3, etc.
CDO 1.21
Script
CDONTS
Routing
Engine
ICS
LDAP Provider
Event Script
Agent
MTA
MAPI
Server
Client
System Att.
LDAP
Event Svc
Exchange Store
ADSI
Exchange
Directory
Gateways
DAPI
DAPI
MAPI/RPC
Store P.
Trans. P. Addrb. P.
MAPI
CDO 1.21
MAPI
Spooler
S. MAPI CMC
LDAP Provider
DAPI ADSI
Client(s) wie z.B. Outlook, eigene Anwendungen, etc.
Client
Extension/
COM-Addin
DLL
Exchange 2000 Schnittstellen
Extended MAPI
Outlook Forms
Simple MAPI
CDO 3.0 Routing Objects
Outlook Object Model
CDONTS
Active Messaging COM-Addins
LDAP
Event Scripting
Workflow Engine
Exchange Server Interfaces
ADO
WEBFORMS
AVAPI
CDO 1.21
CDOSYS
DAPI
OLE Messaging
WEBDAV
Client Extensions
CDOEXM
CMC
OLEDB
EFD
ADSI
XML
Neue Exch. 2000 Schnittstellen







ADO/OLEDB
CDO 3.0
Workflow Engine
CDOSYS
XML
WEBDAV
WEBFORMS
WARUM ?????
Neue Exch. 2000 Schnittstellen





Universeller Datenzugriff auf alle
Datenbanken via ADO/OLEDB
CDO 3.0 zum Erzeugen von ADO
Records
Neue synchrone Events = neue
Workflow Engine
CDONTS nur auf Server, CDOSYS
Server und Client
WEB, WEB, WEB
• => Einheitliches Transportprotokoll
• = HTTP (WEBDAV) und XML
Exchange 2000 Architektur
OLEDB

Zwei verschiedene Provider:
•
•
Remote: Client OLE/DB provider über DAV
•
•
•
Outlook
CDO
Office
Lokal: Client OLE/DB provider über COM
•
•
•
Virenscanner
Dokumentenmanagement
Workflow
ADO 2.5 – Object Model
Errors
Command
Connection
Recordset
Record
Parameters
Fields
Stream
ADO 2.5

Connection
•
•
Implizit
•
URL an die Open Methode des Record Objekts
übergeben
Explizit
•
•
•
•
Connection Objekt öffnen
Transaktionen
Errors collection
SQL Select queries
Connection via ADO

Implizit:
dim Rec as New ADODB.Record
strURL = "file://./backofficestorage/" & DomainName &
"/" & strLocalPath
Rec.Open strURL

Explizit:
Dim Rec As New ADODB.Record
Dim Conn as New ADODB.Connection
Dim Stm as ADODB.Stream
Conn.Provider = "ExOLEDB.DataSource"
Conn.Open "http://server/folder"
Rec.Open "http://server/folder/item.txt", Conn
Set Stm = Rec.Fields(adDefaultStream).Value
CDO 3.0

Ersetzt und erweitert CDO for Windows
2000 (CDOSYS)
•



Abwärtkompatibel
Zugriff auf public und private Stores
Erweiterbar mit eigenen Komponenten
Aggregation mit ADO
CDO 3.0
Dim conn as New Connection
Dim rs as New Recordset
Dim msg as New Message
fldr = “file://./backofficestorage/domain
/MBX/user/inbox”
conn.open fldr,”fred”,”whatever”,adRunAsync
Set rs = conn.execute “Select * from scope(‘shallow traversal of
“ & fldr & ”’) where urn:schemas:mailheader:subject = ‘hello’”
msg.DataSource.Open rs(“DAV:href”),conn
msg.Attachments(1).SaveToFile “C:\temp\file.doc”
msg.DataSource.Save
CDO 3.0
Public Sub SimpleMeetingRequest()
Dim objAppt As New Appointment
Dim objReq As New CalendarMessage
objAppt.Subject = "Termin"
objAppt.StartTime = "10/4/99 1:00PM"
objAppt.EndTime = "10/4/99 2:00PM"
objAppt.Attendees.Add ("user2@domain")
Set objReq = objAppt.CreateRequest
objReq.Message.Send
End Sub
CDO 3.0
Dim aPerson as new Person
Dim rs as RecordSet
Rs.open “file://./backofficestorage/dom/MBX/user/contacts”
rs.MoveFirst
While NOT rs.EOF
aPerson.DataSource.Open rs.Fields(
“DAV:HREF”)
Debug.Print aPerson.FirstName
Debug.Print aPerson.LastName
Debug.Print aPerson.MailingAddress
rs.MoveNext
Wend
CDOSYS

Objektbibliothek basierend auf SMTP und
NNTP Protokoll Standard
•
•


Wird mit Windows 2000 mitgeliefert
CDOSYS = CDO 2.0
Features:
•
•
•
•
•
Programmatische Auswahl des SMTP Hosts
Unterstützt Transport und Protokoll Events
Erzeugen von MIME/MHTML Nachrichten
ADO/OLEDB Unterstützung (Streams)
Dual Interface
Mögliche Anwendungen:
•
•
•
•
•
•
Bulk Mail
Mail basierte Replikation (z.b: Win2000 AD replication)
Viren Checker (Mail und News), Auto forward, Admin Alert
Spam Mail Erkennung (Sender, Scannen)
Senden von Webseiten (Graphic, Links)
Anhängen von Text an ausgehende Nachrichten (Transport)
CDOSYS
Erzeugen und Versenden einer Nachricht
mit einer Webseite als Body:
Private Sub SimpleSend_Click()
Dim myMailItem As New Message
With myMailItem
.From = “[email protected]”
.To = "[email protected]”
.Subject = ”Here is the MS home page."
. CreateMHTMLBody(“http://www.microsoft.com”,1)
.Send
End With
End Sub
DEMO: CDOSYS
„I Love you“ Email Scanner
Exchange 2000 Events

Store Events
•
•
•
•
Innerhalb einer Operation (Syncron):
•
open, save, create, delete, move
Benachrichtigung einer Operation
(Asynchron):
•
save, create, delete, move, timer
Systemzustände
•
Startup/Shutdow
Workflow basieren auf Events
DEMO: Exchange 2000 Store Events
Abfangen eines Speichervorgangs in einem
öffentlichen Ordner und Setzen von Rechten
Workflow Engine

Besteht aus 2 Komponenten
•
•
Workflow Engine
•
•
Evaluiert Bedingungen
Führt Aktionen bei Statusübergangen aus
Workflow Event Sink
•
•
•
•
Wird angesprungen, wenn Änderungen an
einem Item in einem Ordner auftreten
Benutzt OnSyncSave, OnSyncDelete,
OnTimer Store Events
Validatiert Benutzer/Author Security
Ruft die Workflow Engine
Workflow Engine

Workflow Process Definition
•
Process Definition Elemente:
•
•
•
•
AuditTrailProvider
CommonScriptURL
Action Table
Mode (security)
Workflow Engine

Workflow Action Table
•
•
•
•
Tabelle von Status-Übergängen
Bedingungen und Aktionen sind VB Scripts
Workflow Engine evaluiert die Bedingungen
Workflow Engine führt Aktionen aus
Ablehnen
Absenden
Genehmigen
In Bearbeitung
Genehmigt
Workflow Engine

Workflow Engine Security
•
•
Restricted Mode
•
Aktionen nur mit VB Script, “sandboxed”, kein
CreateObject(), Nur WorkflowSession Objekt
kann benutzt werden
Was kann im Restricted Mode gemacht
werden ?
•
•
•
•
Properties des auslösenden Items modifizieren
Mails versenden (WorkflowMessage)
ACL auf das auslösende Item schreiben
In AuditTrail (Logging) schreiben
Workflow Engine

Workflow Engine Security
•
Privileged Mode
•
•
•
•
Aktionen können Script oder eigene COM
Objekte sein,
Script Engine erlaubt CreateObject()
Aktionen werden unter einem privilegierten NT
account ausgeführt (in der Exchange Servers
Gruppe)
Was kann im Privileged Mode gemacht
werden ?
•
Alles
DEMO: Workflow Designer
XML in Exchange 2000

Alles wird über XML definiert
•
•
•
•
•
Schema
Security
Registrations
Formular und Ansichten Rendering
Datentypen
WEBDAV / HTTPDAV Protokoll
•
•
•
HTTP 1.0 "read-only" Zugriff auf Dateien
(GET Methode)
HTTP 1.1 Einfaches Schreiben
(PUT und DELETE Methode)
HTTP-DAV ist eine Erweiterung des
HTTP/1.1 Protokolls (RFC2518)
•
•
•
•
Dateisystem Operationen: MKCOL, COPY, MOVE,
LOCK, UNLOCK
Manipulation von Properties: PROPFIND,
PROPPATCH
Suchen auf Resourcen: SEARCH
(Die Exchange DAV-Engine implementiert ausserdem
Replikation, Notifications, und Versioning)
WEBDAV / HTTPDAV Protokoll

Generelle Struktur von WEBDAV
Anfragen
•
•
•
Methode
•
Beschreibt Methode, die ausgeführt werden
soll
Header
•
Beschreibt, wie die Aufgabe zu erledigen ist
Body (optional)
•
•
Definiert die Daten, die in der Methode benutzt
werden, oder zusätzliche Anweisungen, wie die
Methode ausgeführt werden soll
Im Body wird XML verwendet.
WEBDAV / HTTPDAV Protokoll

Auslesen der Security eines Dokuments
Client sendet:
PROPFIND http://myserver/mymessage.doc HTTP/1.1
Host: myserver
Content-type: text/xml; charset="utf-8“
Content-Length: xxxx
<?xml version="1.0" encoding="utf-8" ?>
<D:propfind xmlns:D="DAV:">
<D:prop xmlns:E=”http:/schemas.microsoft.com/exchange/”/>
<E:ntsecuritydescriptor/>
</D:prop>
</D:propfind>
DEMO: WEBDAV
Setzen von Security auf Nachrichten via WEBDAV
und XML verpackt in XMLHTTP Object
CDOEXM


CDO für Exchange Management
CDOEXM erweitert CDO und ADSI mit
Management Interfaces
•
•
IMailRecipient
•
•
Properties: Proxy addresses, Send/Deliver
Limits, Forwarding properties
Methoden: Mail enable, mail disable
IMailBoxStore
•
•
Properties: Store Quotas, Mailbox location,
Delegates
Methoden: Create, delete and move mailbox
DEMO: CDOEXM
Setzen der Mailbox Quotas einer
Exchange Mailbox
Exchange Schema
Application TLH
PUBLIC FOLDER APP
SCR = “/APP RESOURCES”
BaseSchema = “”
APP RESOURCES
SCR = “”
BaseSchema = “-EXSCHEMA V1-”
NON_IPM_SUBTREE
GLOBAL SCHEMA
“-EXSCHEMA V1-”
APP TEMPLATE
SCR = “/APP TEMPLATE SCHEMA”
BaseSchema = “”
Workspace Template
APP TEMPLATE SCHEMA
SCR = “”
BaseSchema = “-EXSCHEMA V1-”
APP FOLDER (from template)
SCR = “/APP SCHEMA”
BaseSchema = “”
APP SCHEMA
SCR = “”
BaseSchema = /APP TEMPLATE/APP TEMPLATE SCHEMA
Überblick Exchange 2000 Architektur
Eigene Apps,Services, Gateways
Internet
SMTP,
Pop3, etc.
ADO CDO 3.0 CDO 1.21
Script
CDOSYS CDOEXM ADSI
ICS
LDAP Provider
Event Svc
MTA
MAPI
LDAP
X400 GW
Store(s)
Active
Directory
OLEDB
DAV Engine
Internet
Information
Server
OWA
Event Script
Agent
System Att.
Server
MAPI/RPC
Client
Store P.
MSDAIPP
Trans. P.
MAPI
Addrb. P. MAPI
Spooler
LDAP Provider
CDO 3.0 ADO CDO 1.21 S. MAPI CMC CDOSYS CDOEXM ADSI
Client(s) wie z.B. Outlook, eigene Anwendungen, etc.
Client
Extension
COM-Addi
DLL
Exchange Futures

Exchange 2000 SP1
•
•
Visual Studio Server Explorer für Web
Storage System
•
•
•
•
•
Navigation
Schema Editor
Formular Registrierungen
Event Registrierungen
“Drag and drop” von Exchange Ordnern in den Designer
Managed OLEDB Provider
•
•
Remotable
Läuft im DTC Umfeld (Distributed Transaction)
Demo Visual Studio
Visual Studio Webstorage System
Server Explorer Extension
Exchange Futures

Exchange 2000 und .NET
•
•
•
•
CDO.NET Klassen
Managed Provider
•
•
•
Remotable
Transaktionsfähig
In DTC integriert
ADO DataSet
XmlDataDocument
Zusammenfassung

Server
•
•

Strategie geht Richtung einheitlichen
Datenzugriff auf alle Datenbanken via
ADO/OLEDB
Server Management = Directory Zugriff via
ADSI/LDAP
Client
•
•
•
Strategie geht Richtung XML/HTTP-DAV
WebForms rendern HMTL, je nach
Fähigkeit des Clients
Ziel ist es alle Arten von Devices zu
unterstützen
Weitere Info’s?



Exchange 2000 Resources:
•
•
•
•
msdn.microsoft.com/exchange
www.microsoft.com/exchange/trainevents/MEC00.htm
msdn.microsoft.com/library/techart/buildingsolutions.htm
msdn.microsoft.com/training/seminars/WebDev.asp#exc
hange
Externe Exchange Infos, Tools, etc.:
•
•
www.exchangestuff.com/
www.slipstick.com/index.htm
RFC’s:
•
www.gt.ed.net/mailmen/technical/
Weitere Info’s?

Bücher
•
•


Programming Microsoft® Outlook® and Microsoft
Exchange, Thomas Rizzo, MSPress
Programming WebStore Applications with Microsoft
Exchange 2000 Server, Mindy Martin, MSPress
msdn quickie
•
www.microsoft.com/germany/msdn/quickie
msdn TechTalk-Newsgroup
•
news://msnews.microsoft.com/microsoft.public.de.german.techtalk
Fragen!?
Uff...
[email protected]