2010-03-07 21 views
5

Tengo una aplicación escrita en Delphi que agrega/actualiza contactos en outlook. El problema que tengo es que si el contacto se ha eliminado en Outlook, el código aún encuentra el contacto y lo actualiza, y el contacto aún permanece eliminado. ¿Hay alguna manera de determinar si el contacto se borra o recuperar el contacto?Recuperar un contacto en Outlook

Aproximadamente el código es algo como:

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

Respuesta

3

Cuando se eliminan los contactos que se ponen en la carpeta Elementos eliminados. No hay otro estado "eliminado" que no sea estar en esa carpeta. "Desactivar" es tan simple como moverlo nuevamente.

Hay un método Move en el objeto ContactItem que puede usar para volver a moverlo a la carpeta de contactos predeterminada que puede obtener con el método NameSpace.GetDefaultFolder.

EDITAR Para determinar si el contacto está en la carpeta de elementos eliminados se puede ver en la propiedad Parent que debe devolver un objeto MAPIFolder. Luego puede comparar su EntryID con el que devuelve GetDefaultFolder (olFolderDeletedItems).

+0

Si el contacto se elimina de los elementos eliminados, todavía tengo el mismo problema, pero me consigue la mitad del camino - I Veré si puedo averiguar cómo determinar si el contacto está en elementos eliminados; si lo están, los moveré de vuelta a la carpeta de contacto predeterminada. – Alister

+0

Si el contacto se elimina realmente de la carpeta de elementos eliminados, no se me ocurre ninguna forma de acceder a él desde la API de Outlook. Tal vez está siendo almacenado en caché de alguna manera. – Josh

+0

Actualicé mi respuesta con un consejo para determinar si un elemento está en la carpeta Elementos eliminados. – Josh

1

Tenga en cuenta que esto es específico de PST: el proveedor de PST no cambia la identificación de entrada cuando los elementos se mueven a diferentes carpetas.

Dmitry Streblechenko (MVP) http://www.dimastr.com/ OutlookSpy - Outlook, CDO y MAPI desarrollador de herramientas

Cuestiones relacionadas