2009-06-18 2 views
1

Как подключить обработчик событий для события SendAndReceive событий контактов/контактов в Outlook 2007 с использованием VSTO AddIn? Я попытался использовать:Подключение к событию синхронизации отправки и получения Outlook Контакты

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

Но он не работает.

ответ

2

Я попытался

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

Это зацепляет для отправки/получения всех папок по умолчанию ..

0

На самом деле моя потребность была немного иной, но может быть такой же: Я хотел получать уведомления об изменениях в папке (встречи в моем случае) после отправки/получения. Моя первая мысль (и я думаю, что вы на том же треке) должна была проверить событие отправки/получения и, возможно, получить какую-то коллекцию предметов или что-то подобное, но такой вещи нет. (Как это также объясняется в this forum post)

Мой второй путь пришел из following article: я могу зарегистрироваться на 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); 
    } 
} 
0

Вы можете подключить почтовый отправить/получить событие, а затем проверить, что тип почты является ContactItem. Ниже приведен пример события «Отправить».

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

}