Мне записали приложение в Delphi, который добавляет / контакты обновлений в перспективе. Проблема, которую я имею, состоит в том, что, если контакт был удален в Outlook, код все еще находит контакт и обновляет его - и контакт все еще остается удаленным. Существует ли способ, которым я могу определить, удален ли контакт, или восстановите контакт после удаления?
Примерно код смотрит что-то как:
OutlookApp := CreateOleObject('Outlook.Application');
Mapi := OutlookApp.GetNameSpace('MAPI');
//.....
try
if ContactOutlookEntryID.AsString <> '' then
aContact := Mapi.GetItemFromID(ContactOutlookEntryID.AsString);
except
end;
//try to locate the contact if they have been synchro'd before
if VarIsEmpty(aContact) then //if not found
aContact := Contacts.Items.Add(2); //add a new contact to outlook
aContact.LastName := ContactSurname.AsString;
//.....
Когда контакты удаляются, они помещаются в папку «Удаленные». Нет другого состояния «удалено», кроме нахождения в этой папке. «Восстановить» так же просто, как вернуть его обратно.
В объекте ContactItem есть метод Move , который можно использовать, чтобы переместить его обратно в папку контактов по умолчанию, которую можно получить с помощью метода NameSpace.GetDefaultFolder .
ИЗМЕНИТЬ Чтобы определить, находится ли контакт в папке удаленных элементов, вы можете посмотреть свойство Parent, которое должно возвращать объект MAPIFolder. Затем вы можете сравнить его EntryID с тем, который возвращается GetDefaultFolder (olFolderDeletedItems).
Имейте в виду, что это зависит от PST - провайдер PST не меняет идентификатор записи, когда элементы перемещаются в разные папки.
Дмитрий Стреблеченко (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO и инструмент разработчика MAPI