Enganchando para Enviar / Receber evento de sincronização de contatos do Outlook

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Como posso anexar um manipulador de eventos para o evento SendAndReceive de Contact pastas / itens de contato no Outlook 2007 usando o VSTO suplemento? Eu tentei usar:

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

Mas ele não está funcionando.

Foi útil?

Solução

Eu tentei

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

Este ganchos para enviar / receber de todas as pastas padrão ..

Outras dicas

Na verdade a minha necessidade era um pouco diferente, mas pode ser o mesmo: Eu queria ser notificado das mudanças de uma pasta (compromissos no meu caso) após um envio / recebimento. Meu primeiro pensamento (e eu acho que você está na mesma posição) foi para verificar se há um envio / recepção de eventos e talvez obter alguma coleção de itens fora dele ou algo semelhante, mas existe tal coisa está disponível. (Como é também explicado em este fórum pós )

O meu segundo caminho veio do seguinte artigo : posso inscrever para o evento Item_Add e Item_Change (e mesmo Item_Removed) de uma pasta (que também são acionados pelas alterações feitas por um send receber):

Alguns 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);
    }
}

Você pode ligar o envio de correio / receber evento e, em seguida, verificar se o tipo de correio é um ContactItem. Aqui está um exemplo da Enviar evento.

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

, em seguida, em seu manipulador de eventos que você verifique o tipo de item de correio;

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top