Conexión al evento de sincronización de envío / recepción de contactos de Outlook

StackOverflow https://stackoverflow.com/questions/1011655

  •  06-07-2019
  •  | 
  •  

Pregunta

¿Cómo puedo adjuntar un controlador de eventos para el evento SendAndReceive de carpetas de contactos / elementos de contacto en Outlook 2007 usando el complemento VSTO? Intenté usar:

Application.ActiveExplorer().SyncObjects.ForEach
{
   SyncObject.SyncEnd += \\Do something
}

Pero no está funcionando.

¿Fue útil?

Solución

Lo intenté

Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler

Esto se conecta para enviar / recibir todas las carpetas predeterminadas ...

Otros consejos

En realidad, mi necesidad era un poco diferente, pero puede ser la misma:     Quería recibir notificaciones de los cambios de una carpeta (citas en mi caso) después de un envío / recepción. Mi primer pensamiento (y creo que estás en la misma pista) fue buscar un evento de envío / recepción y tal vez obtener alguna colección de artículos o algo similar, pero no hay tal cosa disponible. (como también se explica en esta publicación del foro )

Mi segunda ruta vino del siguiente artículo : puedo registrarme en el evento Item_Add y Item_Change (e incluso Item_Removed ) de una carpeta (que también se activan por los cambios hecho por un envío recibe):

Algún código:

// Get the folder calendar folder and subscribe to the events.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemAdd += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemAddEventHandler(Items_ItemAdd);
    Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar).Items.ItemChange += new Microsoft.Office.Interop.Outlook.ItemsEvents_ItemChangeEventHandler(Items_ItemChange);
}

// Do something with it.
void Items_ItemAdd(object Item)
{
    logItem(Item, "Add");
}
void logItem(object Item, string Action)
{

    Outlook.AppointmentItem item = Item as Outlook.AppointmentItem;

    File.AppendAllText(@"e:\log.txt", string.Format("Item {0}: {1}", Action, Item));

    if (item != null)
    {
        File.AppendAllText(@"e:\log.txt", " - Appointment: " + item.Subject);
    }
}

Puede conectar el evento de envío / recepción de correo y luego verificar que el tipo de correo sea un ContactItem. Aquí hay un ejemplo del evento Enviar.

// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;

luego, en el controlador de eventos, verifica el tipo de elemento de correo;

internal void ThisApplication_SentMail(object item, ref bool cancel)
{
    Outlook.ContactItem contactItem = item as Outlook.ContactItem;

    // mail message is not a ContactItem, so exit.
    if (contactItem == null) return;

    // do  whatever you need to here

 }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top