Hooking per inviare / ricevere l'evento di sincronizzazione dei contatti di Outlook

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

  •  06-07-2019
  •  | 
  •  

Domanda

Come posso allegare un gestore di eventi per SendAndReceive evento di cartelle di contatto / elementi di contatto in Outlook 2007 utilizzando VSTO AddIn? Ho provato a usare:

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

Ma non funziona.

È stato utile?

Soluzione

Ho provato

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

Si collega per inviare / ricevere tutte le cartelle predefinite ..

Altri suggerimenti

In realtà il mio bisogno era un po 'diverso ma potrebbe essere lo stesso:     Volevo essere informato delle modifiche di una cartella (appuntamenti nel mio caso) dopo un invio / ricezione. Il mio primo pensiero (e penso che tu sia sulla stessa traccia) è stato quello di verificare la presenza di un evento di invio / ricezione e magari ricavarne qualche raccolta o qualcosa di simile, ma nulla di simile è disponibile. (come spiegato anche in questo post sul forum )

Il mio secondo percorso è venuto dal seguente articolo : posso registrarmi all'evento Item_Add e Item_Change (e persino Item_Removed ) di una cartella (che sono anche attivati ??dalle modifiche fatto da una ricezione di invio):

Alcuni codici:

// 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);
    }
}

È possibile collegare l'evento di invio / ricezione della posta e quindi verificare che il tipo di posta sia un ContactItem. Ecco un esempio dell'evento Invia.

// hook up the event
this.Application.ItemSend += ThisApplication_SentMail;

quindi nel gestore dell'evento controlli il tipo di elemento di posta;

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

 }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top