Einhaken auf Senden / Empfangen Sync Ereignisses von Outlook-Kontakten
Frage
Wie kann ich einen Event-Handler für SendAndReceive
Falle Kontakt Ordner / Kontaktobjekte in Outlook 2007 mit VSTO AddIn anhängen? Ich habe versucht, mit:
Application.ActiveExplorer().SyncObjects.ForEach
{
SyncObject.SyncEnd += \\Do something
}
Aber es funktioniert nicht.
Lösung
Ich habe versucht,
Application.ActiveExplorer().SyncObjects.AppFolders.SyncEnd += \\EventHandler
Diese Haken auf Senden / Empfangen aller Standard-Ordner ..
Andere Tipps
Eigentlich war mein Bedürfnis ein wenig anders, aber kann das gleiche sein: Ich wollte die Änderungen eines Ordners (Termine in meinem Fall) benachrichtigt wird, nach einem Senden / Empfangen. Mein erster Gedanke (und ich denke, Sie auf dem gleichen Weg sind) war für einen Sende zu überprüfen / Veranstaltung erhalten und vielleicht einige Sammlung von Gegenständen aus ihm heraus oder etwas ähnliches, aber nicht so etwas zur Verfügung steht. (Wie erläutert auch in dieses Forum als Beitrag )
Mein zweiter Weg kam aus dem folgenden Artikel : ich zum Item_Add
und Item_Change
(und sogar Item_Removed
) bei einem Ordner registrieren kann (der auch durch die Änderungen von einem Sende erhalten getan ausgelöst werden):
Einige Code:
// 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);
}
}
Sie können den Mail-Sende / Empfangs-Ereignis anschließen und dann prüfen, ob der Mail-Typ ein ContactItem ist. Hier ist ein Beispiel für das Senden Ereignis.
// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;
dann in Ihrem Ereignishandler überprüfen Sie die Postsendung Typ;
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
}