Implementing a Managed OnSave Event Sink
Implementing a Managed OnSave Event Sink
This content is no longer actively maintained. It is provided as is, for anyone who may still be using these technologies, with no warranties or claims of accuracy with regard to the most recent product version or service release.
The following samples catch the OnSave Method and write information to a log file. See Store Event Sink Bit Flags and Building Managed Event Sink DLLs for more information.
Visual Basic.NET
Option Explicit On Option Strict On ' Add project references to the System.EnterpriseServices, ADODB, ' Interop.Exoledb, and SignedExevtsnk .NET components. Imports System.IO Imports System.EnterpriseServices Imports Exoledb = Interop.Exoledb Imports ExevtsnkLib = SignedExevtsnk Imports ADODB Imports System.Reflection Namespace ExchangeSDK.Snippets.VBNet Public Class AsyncEvents Inherits ServicedComponent Implements Exoledb.IExStoreAsyncEvents ' Logfile path. Private Const LOGFILE As String = "C:\\evtlog.txt" Public Sub OnSave(ByVal pEventInfo As Interop.Exoledb.IExStoreEventInfo, _ ByVal bstrURLItem As String, _ ByVal lFlags As Integer) _ Implements Interop.Exoledb.IExStoreAsyncEvents.OnSave ' Variables. Dim sr As StreamWriter Dim rec As ADODB.Record Dim conn As ADODB.Connection ' Open the log file, append text to file. sr = File.AppendText(LOGFILE) Try sr.WriteLine("[VB.NET Event Sink] OnSave()") ' Write the URL of the item to the log. sr.WriteLine("URL of item: " + bstrURLItem) ' Write the event flag to the log. sr.WriteLine("lFlags: " & lFlags) ' Get the record object representing the item. rec = New ADODB.Record conn = New ADODB.Connection ' Open the connection conn.Provider = "EXOLEDB.DataSource" conn.Open(bstrURLItem, "", "", 0) ' Open the record. rec.Open(bstrURLItem, _ conn.ConnectionString, _ ADODB.ConnectModeEnum.adModeRead, _ ADODB.RecordCreateOptionsEnum.adFailIfNotExists, _ ADODB.RecordOpenOptionsEnum.adOpenSource, _ "", "") ' Write the DAV:href property value of the item to the log. sr.WriteLine("DAV:displayname value: " & CType(rec.Fields("DAV:displayname").Value, String)) sr.WriteLine("") ' Determine the cause of the OnSave event. If (8 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_IS_DELIVERED)) Then ' A mail item was delivered. sr.WriteLine("The EVT_IS_DELIVERED bit is set.") ElseIf (256 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_MOVE)) Then ' An item was saved because of a move. sr.WriteLine("The EVT_MOVE bit is set.") ElseIf (512 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_COPY)) Then ' An item was saved because of a copy. sr.WriteLine("The EVT_COPY bit is set.") End If sr.WriteLine("") Catch ex As Exception ' Write exception info to the log. sr.WriteLine("Exception message: " & ex.Message) sr.WriteLine("") End Try ' Clean up. sr.Close() rec.Close() conn.Close() End Sub Public Sub OnDelete(ByVal pEventInfo As Interop.Exoledb.IExStoreEventInfo, _ ByVal bstrURLItem As String, _ ByVal lFlags As Integer) _ Implements Interop.Exoledb.IExStoreAsyncEvents.OnDelete ' Implement OnDelete code here. End Sub End Class End Namespace
C#
using System; using System.Reflection; using System.Diagnostics; using Exoledb = Interop.Exoledb; using ADODB; using System.EnterpriseServices; using System.IO; namespace ExchangeSDK.Snippets.CSharp { class AsyncEvents : ServicedComponent, Exoledb.IExStoreAsyncEvents { // Logfile path. private const string LOGFILE = "C:\\evtlog.txt"; public void OnSave(Exoledb.IExStoreEventInfo pEventInfo, string bstrURLItem, int lFlags) { // Variables. StreamWriter sr; ADODB.Record rec; ADODB.Connection conn; // Open the log file, append text to file. sr = File.AppendText(LOGFILE); try { sr.WriteLine ("[C# Event Sink] OnSave()"); // Write the URL of the item. sr.WriteLine("URL of item: " + bstrURLItem); // Write the event flag. sr.WriteLine("lFlags: " + lFlags); sr.WriteLine(""); // Get the record object representing the item. rec = new ADODB.RecordClass(); conn = new ADODB.ConnectionClass(); // Open the connection. conn.Provider = "EXOLEDB.DataSource"; conn.Open(bstrURLItem, "", "", 0); // Open the record. rec.Open(bstrURLItem, conn.ConnectionString, ADODB.ConnectModeEnum.adModeRead, ADODB.RecordCreateOptionsEnum.adFailIfNotExists, ADODB.RecordOpenOptionsEnum.adOpenSource, "", ""); // Write the DAV:href property value of the item to the log. sr.WriteLine("DAV:displayname value: " + rec.Fields["DAV:displayname"].Value); sr.WriteLine(""); // Determine the cause of the OnSave event. if( 8 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_IS_DELIVERED)) { // A mail item was delivered. sr.WriteLine("The EVT_IS_DELIVERED bit is set."); } if(256 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_MOVE)) { // An item was saved because of a move. sr.WriteLine("The EVT_MOVE bit is set."); } if(512 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_COPY)) { // An item was saved because of a copy. sr.WriteLine("The EVT_COPY bit is set."); } sr.WriteLine(""); // Clean up. rec.Close(); conn.Close(); } catch(Exception ex) { // Write exception info to the log. sr.WriteLine("Exception message: " + ex.Message); sr.WriteLine(""); } // Close the stream writer. sr.Close(); } public void OnDelete(Exoledb.IExStoreEventInfo pEventInfo, string bstrURLItem, int lFlags) { // Implement OnDelete code here. } } }
Send us your feedback about the Microsoft Exchange Server 2003 SDK.
This topic last updated: September 2004
Build: June 2007 (2007.618.1)
© 2003-2006 Microsoft Corporation. All rights reserved. Terms of use.