Implementing an OnSave Event Sink
Topic Last Modified: 2006-06-12
The following code receives the OnSave event and returns information about it. See Store Event Sink Bit Flags for more information.
Example
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