Accrocher pour envoyer / recevoir un événement de synchronisation des contacts Outlook

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

  •  06-07-2019
  •  | 
  •  

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.

Était-ce utile?

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

 }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top