2010-03-07 12 views
5

Ho un'applicazione scritta in Delphi che aggiunge/aggiorna i contatti in Outlook. Il problema che sto avendo è che se il contatto è stato cancellato in Outlook, il codice trova ancora il contatto e lo aggiorna, e il contatto rimane comunque cancellato. C'è un modo per determinare se il contatto viene eliminato o ripristinato il contatto?Undelete un contatto in Outlook

Circa il codice sembra qualcosa di simile:

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; 
//..... 

risposta

3

Quando i contatti vengono eliminati sono messi nella cartella Posta eliminata. Non c'è altro stato "cancellato" diverso da quello in quella cartella. "Undeleting" è semplice come spostarlo indietro.

C'è un metodo Move sull'oggetto ContactItem che è possibile utilizzare per spostarlo nuovamente nella cartella dei contatti predefinita che è possibile ottenere con il metodo NameSpace.GetDefaultFolder.

EDIT Per determinare se il contatto è in cartella Posta eliminata si può guardare la proprietà Parent che dovrebbe restituire un oggetto MAPIFolder. È quindi possibile confrontare il suo EntryID con quello restituito da GetDefaultFolder (olFolderDeletedItems).

+0

Se il contatto viene rimosso da elementi eliminati, ho ancora lo stesso problema, ma mi viene a metà strada - I Vedrò se riesco a capire come determinare se il contatto è negli elementi eliminati, se lo sono, li sposterò nella cartella dei contatti predefinita. – Alister

+0

Se il contatto viene veramente eliminato dalla cartella degli elementi eliminati, non riesco a pensare ad alcun modo possibile per ottenerlo dall'API di Outlook. Forse è stato nascosto in qualche modo. – Josh

+0

Ho aggiornato la mia risposta con un consiglio per determinare se un elemento si trova nella cartella Posta eliminata. – Josh

1

Ricordare che questo è specifico per PST: il provider PST non modifica l'ID della voce quando gli elementi vengono spostati in cartelle diverse.

Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO e MAPI Developer Tool