2017-10-17 1 views
0

Ich arbeite an einem Outlook-Addin im Zusammenhang mit Kalendertermin. Mein Problem ist, dass ich den ursprünglichen Termintitel speichern und dann überprüfen muss, wenn es aktualisiert wurde, um zusätzliche Aktionen auszulösen. Ich habe verstanden, dass es nur eine einzige Instanz des Addin/Ribbon gibt. Ich habe zunächst statische Variable verwendet, aber es hilft nicht, wenn mehrere Fenster geöffnet sind, dann Titel vermischt werden. Meine Fragen sind: 1) Wo Variablen zu einem Termin zu speichern? 2) Wie erkennt man, welches Objekt die write/save/send/Methoden aufgerufen hat?VSTO Addin Artikel verwandte Variable & Calling Item Identifikation

Hier ist ein entsprechender Auszug aus meinem 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); 
    } 
} 

Jede mögliche Hilfe sehr geschätzt werden.

+0

Nun scheint es, dass die richtige Antwort sein wird, einen Wrapper zu entwickeln: https://msdn.microsoft.com/en-us/library/ff973716(v=office.14).aspx Ich bin mir immer noch nicht sicher, wie das helfen wird. – Salim

Antwort

0

Ok Microsoft Tutorial, das ich in meinem vorherigen Kommentar gepostet habe, ist eigentlich ziemlich klar und effizient. Im Anschluss an die Anweisung habe ich eine Wrapper-Klasse für Terminartikel erstellt, und es funktionierte wie ein Zauber. Ein Testprojekt kann heruntergeladen werden here

Verwandte Themen