|
theangrycoder
Guest
|
Hi,
I am adding some custom properties in my Outlook mail items. I want to know if there is a way to find mail items having that custom property?
thanks,
Sameers |
|
Posted 14 Mar, 2009 07:54:01
|
|
Top
|
|
Sergey Grischenko
Add-in Express team
Posts: 7233
Joined: 2004-07-05
|
|
Posted 16 Mar, 2009 11:38:25
|
|
Top
|
|
theangrycoder
Guest
|
Sergey,
I had seen that example before, but the problem with that example is that it is restricted to one folder only. Is there anyway to initiate global search (in all folders including inbox, sent items, any other user defined folders either under inbox or any other)?
thanks,
Sameers |
|
Posted 16 Mar, 2009 15:59:52
|
|
Top
|
|
Dmitry Kostochko
Add-in Express team
Posts: 2875
Joined: 2004-04-05
|
Hello Sameers,
You can try to use the AdvancedSearch method of the Application object.
|
|
Posted 17 Mar, 2009 11:19:16
|
|
Top
|
|
Dmitry Kostochko
Add-in Express team
Posts: 2875
Joined: 2004-04-05
|
Hello Sameers,
Sorry, I forgot to mention that the AdvancedSearch method is introduced in the Outlook 2002 Object Model.
|
|
Posted 17 Mar, 2009 11:22:49
|
|
Top
|
|
theangrycoder
Guest
|
I already had tried the AdvancedSearch folder, but I was not sure how to specify the CustomProperty field in search criteria. maybe, if I can get a sample, that will help.
there is one weird thing with Items.Find method, it does find the first match, but when I try FindNext, it always returns NULL (Nothing in VB). Of course, I am not changing any criteria, code is simple.
dim item as object = items.Find
If Item is Not Nothing
Item = Items.FindNext()
End If
But FindNext is always NULL (Nothing).
Any idea?
thanks,
Sameers |
|
Posted 18 Mar, 2009 11:30:30
|
|
Top
|
|
Eugene Astafiev
Guest
|
Hi Sameers,
Please note that you write your messages to the Delphi forum. I think a better place for your posts is the .Net forum.
there is one weird thing with Items.Find method, it does find the first match, but when I try FindNext, it always returns NULL (Nothing in VB). Of course, I am not changing any criteria, code is simple.
Did you try to use the GetFirst function instead? |
|
Posted 18 Mar, 2009 12:06:41
|
|
Top
|
|
theangrycoder
Guest
|
Hi,
For those, who may need to do the same (search based on custom properties), here is the example using both Items.Find and AdvancedSearch.
Private Sub SearchItemsIndividualFolder()
Dim oInBox As MAPIFolder = Mapi.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
Dim query As String = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/CustomPropertyName" & Chr(34) & " = FALSE"
Dim oItems As Items = oInBox.Items
Dim item As Object = oItems.Find(query)
Dim totalFound As Integer = 0
Dim subjects As String = ""
While item IsNot Nothing
totalFound += 1
subjects +=CType(item, MailItem).Subject & vbCrLf
item = oItems.FindNext
End While
MsgBox("total Found: " & totalFound & vbCrLf & subjects)
End Sub
And here is the Advanced Search method
Private Sub SearchUsingAdvancedSearch()
Try
_m_SearchComplete = False
Dim scope As String = "'" & OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox).FolderPath & "','" & OutlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).FolderPath & "'"
Dim query As String = Chr(34) & "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/CustomPrppertyName" & Chr(34) & " = FALSE"
Dim app As _Application = OutlookApp
Dim result As Search = app.AdvancedSearch(scope, query, True)
While Not _m_SearchComplete
System.Windows.Forms.Application.DoEvents()
End While
'Dim outMsg As String = ""
If result IsNot Nothing Then
'MsgBox(result.Results.Count)
For temp As Integer = 1 To result.Results.Count
If TypeOf result.Results.Item(temp) Is MailItem Then
outMsg +=CType(result.Results.Item(temp), MailItem).Subject & vbCrLf
End If
Next
MsgBox(outMsg)
End If
Catch ex As System.Exception
MsgBox("Failed in search: " & ex.Message)
End Try
End Sub
Private Sub adxOutlookEvents_AdvancedSearchComplete(ByVal sender As Object, ByVal hostObj As Object) Handles adxOutlookEvents.AdvancedSearchComplete
_m_SearchComplete = True
End Sub
Private _m_SearchComplete As Boolean = False
Hope that may help someone else here.
Sameers |
|
Posted 24 Mar, 2009 12:51:47
|
|
Top
|
|
Dmitry Kostochko
Add-in Express team
Posts: 2875
Joined: 2004-04-05
|
Hello Sameers,
Thanks a lot for publishing your code.
|
|
Posted 24 Mar, 2009 15:24:55
|
|
Top
|
|