Как создать SQL-запрос для RDOMail.Find в Delphi

Я пытаюсь использовать RDOMail.Find, чтобы проверить, существует ли электронное письмо в общей папке (я пишу код в Delphi).

У меня проблема в том, что я не могу получить даже самый простой запрос для возврата каких-либо элементов. Например, следующий запрос не возвращает никаких результатов, даже если я знаю, что в папке есть электронные письма с указанной темой: -

ExistingRDOItem := ExistingRDOFolderItems.Find('SELECT Subject FROM Folder WHERE Subject = ' + QuotedStr(NewRDOItem.Subject);

Может ли кто-нибудь объяснить мне, почему мой запрос не работает/что мне нужно сделать, чтобы исправить это?

Я, очевидно, хочу построить более сложный запрос, но сначала мне нужно разобраться с основами!

Спасибо,


person Andrew    schedule 21.05.2020    source источник


Ответы (1)


Последние версии Outlook больше не индексируют свойство PR_SUBJECT, нужно искать по PR_NORMALIZED_SUBJECT (то есть по теме без префикса). Кроме того, вам не нужно передавать предложение SELECT и оператор WHERE, достаточно только предложения поиска:

PR_NORMALIZED_SUBJECT = "http://schemas.microsoft.com/mapi/proptag/0x0E1D001F"
value = Application.ActiveExplorer.Selection(1).PropertyAccessor.GetProperty(PR_NORMALIZED_SUBJECT)

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set Inbox = Session.GetDefaultFolder(olFolderInbox)
  set Items = Inbox.Items
  set item = Items.Find("""" & PR_NORMALIZED_SUBJECT & """ = '" & value & "'")
  while Not (item Is Nothing)
    Debug.Print item.Subject
    set item = Items.FindNext
  wend
person Dmitry Streblechenko    schedule 21.05.2020
comment
Спасибо за ответ. Но можете ли вы перевести это в Delphi для меня? Там ужасно много кавычек! - person Andrew; 21.05.2020
comment
Конечно: query := ' "http://schemas.microsoft.com/mapi/proptag/0x0E1D001F" = ' + QuotedStr(somevar); - person Dmitry Streblechenko; 21.05.2020
comment
Великолепно! Спасибо большое. - person Andrew; 22.05.2020