Programmierschnittstellen

Slides:



Advertisements
Ähnliche Präsentationen
Cadastre for the 21st Century – The German Way
Advertisements

E-Solutions mySchoeller.com for Felix Schoeller Imaging
Transaction Synchronization for XML Data in Client Server Web Applications Stefan Böttcher & Adelhard Türling Universität Paderborn.
PL/SQL - Kurze Einführung -.
Kurt Rosenberg. C# für.NET oder.NET für C# is(C# == C++ && Java)? true : false ; reines C# Ausblick Überblick.
Microsoft Referenzarchitekturen- Infrastruktur für Connected Systems
Entwicklung und Einsatz von Smart Client-Anwendungen Jens Häupel Developer Evangelist Microsoft Deutschland GmbH Dirk Primbs.
Windows Vista für Entwickler
Neue Mobilität Frank Prengel Developer Evangelist Developer Platform & Strategy Group Microsoft Deutschland GmbH
1. 2 Microsoft.NET Überblick Dirk Primbs Technologieberater Developer Platform & Strategy Group Microsoft Deutschland GmbH.
Nano-World The interdisciplinary Virtual Laboratory on Nanoscience Ein Projekt des Virtuellen Campus T. Gyalog, M. Guggisberg, R. Schneider, Ch. Freiburghaus,
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Oracle interMedia Audio Vortrag für das Seminar Oracle Zusatzoptionen Chris Haußmann.
.NET – Quo Vadis? Dariusz Parys Developer Group Microsoft GmbH.
Uwe Habermann WPF Avalon Formulare aus VFP verwenden Venelina Jordanova
Visual Extend Features für Entwickler deutschsprachige FoxPro User Group Uwe Habermann VFX 05 D.
Status OCS Installation GSI DVEE Palaver 10/2/2004 Michael Dahlinger, DVEE, GSI.
WebCast: Managed Smart Tags mit VSTO Jens Häupel.NET Technologieberater Microsoft Deutschland GmbH
CTS2 based Terminology Server – Overview – Project eBPG
Divide and Conquer Eclipse RCP und Spring in verteilten Anwendungen Stefan Reichert | Lufthansa Systems Benjamin Pasero | IBM Rational.
USE2ANT Die Umstellung von Use Makefiles zu Ant & Junit Von Isaac, Maleen und Marc.
Proseminar Web Engineering PS07: Retrieving data from social networks: APIs and protocols.
Microsoft Office Forms Server
Entwickeln einer Windows 8 Modern UI Businessapplikation auf der Basis von Dynamics CRM/xRM Christian Haller Marc Sallin isolutions AG isolutions.
Servlet III Java Webanwendung Webcontainer Web.xml
Medien zwischen Technologie und Gesellschaft Dozent: Herr Prof. Dr. Manfred Thaller SS 13 Referent: Christian Braun.
Microsoft Security Tools Christian Thor Systems Engineer Microsoft GmbH.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Martin LöfflerMurat Yilmaz Labor Informationstechnologie.
Sanjay Patil Standards Architect – SAP AG April 2008
| DC-IAP/SVC3 | © Bosch Rexroth Pneumatics GmbH This document, as well as the data, specifications and other information set forth in.
BAS5SE | Fachhochschule Hagenberg | Daniel Khan | S SPR5 MVC Plugin Development SPR6P.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Projekt Alcatraz Java RMI / Spread - Gruppe A4.
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
The free XML Editor for Windows COOKTOP Semistrukturierte Daten 1 Vortrag Semistrukturierte Daten 1 COOKTOP The free XML-Editor for Windows
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Your name Bedeutung von Internet- Technologien Gruppe 1 Andreas Feuerstein Philipp Hochratner Christian Weinzinger.
Developer Day Webseiten auf Windows Azure hosten Britta Labud bbv Software Services AG Roland Krummenacher bbv Software Services AG.
Developer Day Office APPs entwicklen Simon Amrein Trivadis AG Die ersten Schritte in eine neue Office-Welt.
Jan Hentschel Microsoft Expert Student Partner Windows Azure Windows Azure Windows Azure Mobile Services.
Windows Azure Websites Roland Krummenacher Senior Software Engineer, bbv Software Services
| Basel Developing apps for SharePoint 2013 using Visual Studio 2013 René Modery, Office 365 MVP, 1stQuad Solutions.
Dariusz Parys Developer Evangelist Microsoft Deutschland GmbH.
Frank Fischer + Bernhard Frank Microsoft Deutschland GmbH.
Roger Boesch Developer Technical Specialist Developer and Platform Group.
Cooperation unlimited © Zühlke August 2008 Hansjörg Scherer Folie 1 Cooperation unlimited TFS als BackEnd für Visual Studio und Eclipse.
3/28/2017 8:11 PM Visual Studio Tools für Office { Rapid Application Development für Office } Jens Häupel Platform Strategy Manager Microsoft Deutschland.
MVVM in Windows 8 und Windows Phone 8
PresenterCompanyContact Windows Azure ASP.NET Web-Anwendungen schnell und zuverlässig bereitstellen.
XML IV: Cocoon 2.
Real Time Operating System
Template v5 October 12, Copyright © Infor. All Rights Reserved.
Univ.-Lektor Dipl.-Ing. Dr. Markus Schranz staatlich befugter und beeideter Ingenieurkonsulent für Informatik Web Application Engineering & Content Management.
SharePoint FIS HandsOn – out of the Box.
Was dir Trivialbeispiele in Async and Await nicht sagen! Marcus Kimpenhaus und Martin Möllenbeck.
Ein Projekt des Technischen Jugendfreizeit- und Bildungsvereins (tjfbv) e.V. kommunizieren.de Blended Learning for people with disabilities.
Office Business Anwendungen mit SharePoint 2010 Fabian Moritz SharePoint MVP.
Intranet + Messaging = Groupware
Oliver Spritzendorfer Thomas Fekete
Office Business Anwendungen mit SharePoint Fabian Moritz | MVP Office SharePoint Server.
© All rights reserved. Zend Technologies, Inc. Jenseits von var_dump(): Debugging in ZF Jan Burkl System Engineer.
Die nächste Generation von Microsoft Office System 2007 Microsoft Office System Gernot Kühn Technologieberater Office System Mittelstandsbetreuung.
Torque in Turbine Team 3 Alexander Mittermair Michael Wesinger.
3rd Review, Vienna, 16th of April 1999 SIT-MOON ESPRIT Project Nr Siemens AG Österreich Robotiker Technische Universität Wien Politecnico di Milano.
Ciiema CITEM - Dr. Siegl VU Dr. Manfred Siegl ENTWURF, ERRICHTUNG, BETRIEB VON DATENNETZEN VU Dr. Manfred Siegl
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
ITIXI Version 2.0 Architektur VersionDatumAuthorStatusKommentar Martin JonasseIn ArbeitInitial-Dokument Martin JonasseIn ArbeitFahrgast.
Azure Mobile Services Deep dive into node.js scripting
 Präsentation transkript:

Programmierschnittstellen Exchange 2000 Programmierschnittstellen Michael Klopstock Exchange System Engineer Microsoft GmbH

ADO OLEDB CDO 3.0 CDO 1.21 DAPI Extended MAPI Simple MAPI LDAP CDOEXM Exchange 2000 Schnittstellen Extended MAPI Outlook Forms Simple MAPI Outlook Object Model CDONTS CDO 3.0 Routing Objects Workflow Engine Active Messaging COM-Addins LDAP Event Scripting Exchange Server Interfaces WEBDAV ADO CDO 1.21 Client Extensions CDOSYS CDOEXM EFD WEBFORMS DAPI CMC ADSI AVAPI OLEDB OLE Messaging XML

Agenda Exchange 5.x Schnittstellen Exchange 2000 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 Store Active Messaging MAPI 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 Object verschoben (fnevObjectMoved) Ein MAPI Objekt wurde verschoben 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: MAPI Bücher: 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 cmc_send cmc_send_documents cmc_act_on cmc_list cmc_read cmc_lookup cmc_logon cmc_logoff cmc_free cmc_queryconfiguration Ruft Cmc_logon CMC CMC.DLL Extended MAPI Mapi32.dll

Ruft lpfnMapiSendMail(...) Simple MAPI 12 simple Funktionen um Email-Funktionalität in Client- Anwendungen zu integrieren MAPIAddress MAPIDeleteMail MAPIDetails MAPIFindNext MAPIFreeBuffer MAPILogoff MAPILogon MAPIReadMail MAPIResolveName MAPISaveMail MAPISendDocuments MAPISendMail Anwendung Ruft lpfnMapiSendMail(...) MapiSendMail(...) Extended MAPI Mapi32.dll

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

ExtendedMAPI (MAPI32.DLL) 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 Anwendung CDO (CDO.DLL) ExtendedMAPI (MAPI32.DLL) CDO::CDO() // Konstruktor { MapiInitialize(...., ..., ....); } CDO::Logon(LPSTR lpstrProfile,....) { MAPILogonEx(lpstrProfile,....); }

CDO Object Model 1.x Session InfoStores RootFolder Attachments Messages Fields MessageFilter Recipients Fields Fields Fields Folders… AddressLists AddressEntries Objekt und Collection Fields Nur Objekt AddressEntryFilter Fields

CDO 1.21 Object Modell (Neu) Session GetDefaultFolder Objekt und Collection GetAddressList Nur Objekt InfoStores Methode RootFolder Messages Message Recipients Recipient AppointmentItem RecurrencePattern GetFreeBusy MeetingItem GroupHeader

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: OnMessageCreated OnMessageChanged OnMessageDeleted OnTimer (Min 15 min) Vorsicht: 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 A B C Start=> Technische Routen Ansicht Hub sends item to A who advances route by replying to hub A User instantiates process by submitting item to hub folder Start=> 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

Exchange Routing Objects Routing objects (ExRtObj.dll) RouteDetails ProcInstance Map Row Log Participant VoteTable WorkItem Map Row VoteTable = 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

ADO OLEDB CDO 3.0 CDO 1.21 DAPI Extended MAPI Simple MAPI LDAP CDOEXM Exchange 2000 Schnittstellen Extended MAPI Outlook Forms Simple MAPI Outlook Object Model CDONTS CDO 3.0 Routing Objects Workflow Engine Active Messaging COM-Addins LDAP Event Scripting Exchange Server Interfaces WEBDAV ADO CDO 1.21 Client Extensions CDOSYS CDOEXM EFD WEBFORMS DAPI CMC ADSI AVAPI OLEDB OLE Messaging XML

Exchange 5.x Directory Schnittstellen Directory API (DAPI) Directory EMSABP.DLL MAPI 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 Via LDAP/ADSI 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 (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 CDONTS DAPI ADSI Script LDAP Provider Routing Engine Gateways Exchange Store Directory Exchange ICS Event Script Agent Event Svc LDAP MTA MAPI System Att. DAPI Server Client MAPI/RPC Store P. Trans. P. Addrb. P. MAPI Spooler MAPI LDAP Provider CDO 1.21 S. MAPI CMC DAPI ADSI Client Extension/ COM-Addin DLL Client(s) wie z.B. Outlook, eigene Anwendungen, etc.

ADO OLEDB CDO 3.0 CDO 1.21 DAPI Extended MAPI Simple MAPI LDAP CDOEXM Exchange 2000 Schnittstellen Extended MAPI Outlook Forms Simple MAPI Outlook Object Model CDONTS CDO 3.0 Routing Objects Workflow Engine Active Messaging COM-Addins LDAP Event Scripting Exchange Server Interfaces WEBDAV ADO CDO 1.21 Client Extensions CDOSYS CDOEXM EFD WEBFORMS DAPI CMC ADSI AVAPI OLEDB OLE Messaging 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 Parameters Connection Recordset Fields Record Stream

ADO 2.5 Connection Implizit Explizit URL an die Open Methode des Record Objekts übergeben Explizit Connection Objekt öffnen Transaktionen Errors collection SQL Select queries

Connection via ADO Implizit: Explizit: 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 = “spam@spam.de” .To = "mikeklop@microsoft.com” .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 Genehmigt In Bearbeitung

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 Workspace Template PUBLIC FOLDER APP SCR = “/APP RESOURCES” BaseSchema = “” NON_IPM_SUBTREE Workspace Template APP TEMPLATE SCHEMA SCR = “” BaseSchema = “-EXSCHEMA V1-” APP TEMPLATE SCR = “/APP TEMPLATE SCHEMA” BaseSchema = “” APP RESOURCES SCR = “” BaseSchema = “-EXSCHEMA V1-” GLOBAL SCHEMA “-EXSCHEMA V1-” APP SCHEMA SCR = “” BaseSchema = /APP TEMPLATE/APP TEMPLATE SCHEMA APP FOLDER (from template) SCR = “/APP SCHEMA” BaseSchema = “”

Überblick Exchange 2000 Architektur Internet SMTP, Pop3, etc. Eigene Apps,Services, Gateways ADO CDO 3.0 CDO 1.21 CDOSYS CDOEXM ADSI Script LDAP Provider Event Script Agent Internet Information Server OWA OLEDB Store(s) ICS Active Directory Event Svc X400 GW LDAP DAV Engine MTA MAPI System Att. Server Client MAPI/RPC Store P. Trans. P. Addrb. P. MAPI Spooler MSDAIPP MAPI LDAP Provider Client Extension/ COM-Addin DLL CDO 3.0 ADO CDO 1.21 S. MAPI CMC CDOSYS CDOEXM ADSI Client(s) wie z.B. Outlook, eigene Anwendungen, etc.

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)

Visual Studio Webstorage System Server Explorer Extension 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 Client 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#exchange 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 msdn quickie msdn TechTalk-Newsgroup 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... MIKEKLOP@microsoft.com