Implementing a Managed OnDelete Event Sink
Topic Last Modified: 2006-06-12
The following samples catch the OnDelete 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
Example
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 OnDelete(ByVal pEventInfo As Interop.Exoledb.IExStoreEventInfo, _
ByVal bstrURLItem As String, _
ByVal lFlags As Integer) _
Implements Interop.Exoledb.IExStoreAsyncEvents.OnDelete
' Variables.
Dim sr As StreamWriter
' Open the log file, append text to file.
sr = File.AppendText(LOGFILE)
Try
sr.WriteLine("[VB.NET Event Sink] OnDelete()")
' 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)
' Determine the cause of the OnDelete event.
If (2 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_IS_COLLECTION)) Then
' The item is a collection.
sr.WriteLine("The EVT_IS_COLLECTION bit is set.")
ElseIf (16 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_SOFTDELETE)) Then
' Soft delete of the item.
sr.WriteLine("The EVT_SOFTDELETE bit is set.")
ElseIf (32 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_HARDDELETE)) Then
' The item was deleted permanently.
sr.WriteLine("The EVT_HARDDELETE bit is set.")
ElseIf (256 = (lFlags And ExevtsnkLib.EVT_SINK_FLAGS.EVT_MOVE)) Then
' The item was deleted as part of a move.
sr.WriteLine("The EVT_MOVE 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()
End Sub
Public Sub OnSave(ByVal pEventInfo As Interop.Exoledb.IExStoreEventInfo, _
ByVal bstrURLItem As String, _
ByVal lFlags As Integer) _
Implements Interop.Exoledb.IExStoreAsyncEvents.OnSave
' Implement OnSave code here.
End Sub
End Class
End Namespace
C#
Example
using System;
using System.Reflection;
using System.Diagnostics;
using Exoledb = Interop.Exoledb;
using ADODB;
using System.EnterpriseServices;
using System.IO;
namespace ExchangeSDK.Snippets.CSharp
{
public class AsyncEvents : ServicedComponent, Exoledb.IExStoreAsyncEvents
{
// Logfile path.
private const string LOGFILE = "C:\\evtlog.txt";
public void OnDelete(Exoledb.IExStoreEventInfo pEventInfo, string bstrURLItem, int lFlags)
{
// Variables.
StreamWriter sr;
// Open the log file, append text to file.
sr = File.AppendText(LOGFILE);
try
{
sr.WriteLine ("[C# Event Sink] OnDelete()");
// Write the URL of the item.
sr.WriteLine("URL of item: " + bstrURLItem);
// Write the event flag.
sr.WriteLine("lFlags: " + lFlags);
sr.WriteLine("");
// Determine the cause of the OnDelete event.
if(2 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_IS_COLLECTION))
{
// The item is a collection.
sr.WriteLine("The EVT_IS_COLLECTION bit is set.");
}
if(16 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_SOFTDELETE))
{
// Soft delete of the item.
sr.WriteLine("The EVT_SOFTDELETE bit is set.");
}
if(32 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_HARDDELETE))
{
// The item was deleted permanently.
sr.WriteLine("The EVT_HARDDELETE bit is set.");
}
if(256 == (lFlags & (int)ExevtsnkLib.EVT_SINK_FLAGS.EVT_MOVE) )
{
// The item was deleted as part of a move.
sr.WriteLine("The EVT_Move bit is set");
}
sr.WriteLine("");
}
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 OnSave(Exoledb.IExStoreEventInfo pEventInfo, string bstrURLItem, int lFlags)
{
// Implement OnSave code here.
}
}
}