Enganchando para Enviar / Receber evento de sincronização de contatos do Outlook
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.
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
}