2017-10-17 9 views
0

Je travaille sur un Outlook Addin lié au rendez-vous du calendrier. Mon problème est que j'ai besoin de sauvegarder le titre du rendez-vous initial et ensuite vérifier lors de l'enregistrement s'il a été mis à jour pour déclencher des actions supplémentaires. J'ai compris qu'il n'y a qu'une seule instance de l'Addin/Ribbon. J'ai d'abord utilisé une variable statique, mais cela n'aide pas car lorsque plusieurs fenêtres sont ouvertes, le titre est mélangé. Mes questions sont: 1) Où stocker les variables liées à un rendez-vous? 2) Comment détecter quel objet appelle les méthodes write/save/send /?VSTO Addin variable liée à l'article et l'identification de l'élément appelant

Voici un extrait pertinent de mon code:

public partial class ThisAddIn 
{ 

    public static Outlook.AppointmentItem appointmentItem; 
    public static Addin_Ribbon ribbon; 
    Outlook.Inspectors inspectors; 

// Needs to be saved for each appointments 
public static string initialMeetingSubject = ""; 

    private void ThisAddIn_Startup(object sender, System.EventArgs e) 
    { 
     inspectors = this.Application.Inspectors; 
     inspectors.NewInspector += 
     new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector); 
    } 

    protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject() 
    { 
     ribbon = new MyAddin_Ribbon(); 
     return ribbon; 
    } 

    void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) 
    { 
     // Save current appointment reference 
     appointmentItem = Inspector.CurrentItem as Outlook.AppointmentItem; 

     if (appointmentItem != null) 
     { 
      (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Send += _appointment_Send; 
      (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).BeforeDelete += _appointment_Delete; 
      (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Write += _appointment_Write;  
      (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Open += _appointment_Open; 
      (appointmentItem as Microsoft.Office.Interop.Outlook.ItemEvents_10_Event).Close += _appointment_Close; 

      // Save initial value to compare during appointment save 
      ThisAddIn.initialMeetingSubject = appointmentItem.Subject; 

     } 
    } 

    private void _appointment_Write(ref bool Cancel) 
    { 
     Logger.WriteLine(LogLevel.Debug, "Appointment WRITE Initial Subject: " +initialMeetingSubject + “ Updated Subject: “ + ThisAddIn.appointmentItem.Subject); 
    } 
} 

Toute aide sera très appréciée.

+0

bien il semble que la bonne réponse sera de développer un wrapper: https://msdn.microsoft.com/fr-fr/library/ff973716(v=office.14).aspx Je ne sais toujours pas comment cela va aider. – Salim

Répondre

0

Ok Le tutoriel de Microsoft que j'ai posté dans mon commentaire précédent est en fait assez clair et efficace. Suite à l'instruction, j'ai créé une classe d'emballage pour les éléments de rendez-vous et cela a fonctionné comme un charme. Un projet de test peut être téléchargé here