Implementing an OnSave Event Sink

Implementing an 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 code receives the OnSave event and returns information about it. See Store Event Sink Bit Flags for more information.

Visual Basic

Private Sub IExStoreAsyncEvents_OnSave(ByVal pEventInfo As Exoledb.IExStoreEventInfo, ByVal bstrURLItem As String, ByVal lFlags As Long)

    Dim FSO         As Object
    Dim EvtLog      As String
    Dim EvtFile
    Dim ADODBRec    As New ADODB.Record

'log file
    EvtLog = Environ("SystemDrive") & "\OnSave.log"

'Creates new log file %SystemDrive%\OnSave.log or opens it if exists
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set EvtFile = FSO.OpenTextFile(EvtLog, 8, True)

'Append incoming event info into log file
    EvtFile.WriteLine ("[VB Event Sink]          OnSave()")
    EvtFile.WriteLine ("  URL Item:              " & bstrURLItem)
    EvtFile.WriteLine ("  lFlags:                " & "0x" & Hex(lFlags))

'Small sample that shows how to use ADO Record Object and Fields inside events
    ADODBRec.Open bstrURLItem, , adModeRead, adFailIfNotExists
    If Err.Number <> 0 Then
        EvtFile.WriteLine "Failed to open Target URL: " & bstrURLItem & vbCrLf & "Error: " & Err.Description
    Else
        EvtFile.WriteLine ("  DAV:Displayname Value: " & ADODBRec.Fields("DAV:displayname").Value)
    End If

'To determine cause of OnSyncSave

    'Case 1: EVT_IS_DELIVERED
    If lFlags And EVT_IS_DELIVERED Then
        'Perform your tasks
        'OnSave for delivered mail item
        EvtFile.WriteLine ("  Flag contains EVT_IS_DELIVERED bit set")

    'Case 2: EVT_MOVE
    ElseIf lFlags And EVT_MOVE Then
        'Perform your tasks
        'OnSave for moved item
        EvtFile.WriteLine ("  Flag contains EVT_MOVE bit set")

    'Case 3: EVT_COPY
    ElseIf lFlags And EVT_COPY Then
        'Perform your tasks
        'OnSave for copied item
        EvtFile.WriteLine ("  Flag contains EVT_COPY bit set")

    End If

    'Check if it is a folder notification
    If lFlags And &H2 Then
        'Perform your tasks
        'OnSave for a folder
        EvtFile.WriteLine ("  Flag contains EVT_IS_COLLECTION bit set")
    End If

    EvtFile.WriteBlankLines (1)

    'Use the sink context (custom contextual info saved in the registration item)
    Dim case_switch As Integer
    Dim notify_group As String

    Const customnamespace = "mycustomnamespace:eventsinks/notifyingevents/"
    Dim propname As String

    propname = customnamespace + "caseswitch"
    case_switch = ADODBRec.Fields(propname)

    propname = customnamespace + "notifygroup"
    notify_group = ADODBRec.Fields(propname)

    'Call some program here to use the custom data to notify people of an event
    'Something like: handle_notifyevent(case_switch, notify_group)

'Before Quit
    EvtFile.Close
    Set FSO = Nothing

End Sub

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.