Как я могу прикрепить обработчик событий для события SendAndReceive папок контактов/элементов контактов в Outlook 2007 с помощью надстройки VSTO? Я пытался использовать:
Application.ActiveExplorer().SyncObjects.ForEach
{
SyncObject.SyncEnd += \\Do something
}
Но это не работает.
Ответ 1 · рейтинг 2 · Deepak N
Я пытался
Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
Это подключается к отправке/получению всех папок по умолчанию.
Ответ 2 · Cohen
На самом деле моя потребность была немного другой, но может быть такой же: я хотел получать уведомления об изменениях папки (назначения в моем случае) после отправки/получения. Моя первая мысль (и я думаю, что вы на том же пути) состояла в том, чтобы проверить событие отправки/получения и, возможно, получить из него какую-то коллекцию элементов или что-то подобное, но такая вещь недоступна. (как также объясняется в этот пост на форуме)
Мой второй путь пришел из следующей статьи : я могу зарегистрироваться на событие Item_Add и Item_Change (и даже Item_Removed) папки (которое также вызывается изменениями, сделанными при отправке-получении):
Некоторый код:
// 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);
}
}
Ответ 3 · squig
Вы можете подключить событие отправки/получения почты, а затем проверить, что тип почты является ContactItem. Вот пример события Send.
// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;
затем в обработчике событий вы проверяете тип почтового отправления;
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
}