Accrocher pour envoyer / recevoir un événement de synchronisation des contacts Outlook
Question
Comment attacher un gestionnaire d'événements pour l'événement SendAndReceive
de dossiers de contacts / éléments de contacts dans Outlook 2007 à l'aide de VSTO AddIn? J'ai essayé d'utiliser:
Application.ActiveExplorer().SyncObjects.ForEach
{
SyncObject.SyncEnd += \\Do something
}
Mais cela ne fonctionne pas.
La solution
j'ai essayé
Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
Ceci permet d’envoyer / recevoir tous les dossiers par défaut.
Autres conseils
En fait, mon besoin était un peu différent mais peut être le même: Je voulais être informé des modifications apportées à un dossier (rendez-vous dans mon cas) après un envoi / une réception. Ma première pensée (et je pense que vous êtes sur la même piste) était de rechercher un événement d'envoi / réception et peut-être d'obtenir une collection d'éléments ou quelque chose de similaire, mais rien de tel n'est disponible. (comme expliqué également dans ce message de forum )
Mon deuxième chemin venait de article suivant : Je peux m'inscrire à l'événement Item_Add
et Item_Change
(et même Item_Removed
) d'un dossier (qui est également déclenché par les modifications fait par un envoi recevoir):
Certains codes:
// 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);
}
}
Vous pouvez connecter l'événement d'envoi / réception de courrier et vérifier que le type de courrier est un élément de contact. Voici un exemple de l'événement Send.
// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;
puis dans votre gestionnaire d'événements, vous vérifiez le type d'élément de courrier;
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
}