2015-12-29 6 views
6

ich einen Ausblick VSTO Addin haben, und ich bin in der Lage mithilfe dieser Code eine Liste von Kalendertermine abrufen:In Outlook C# VSTO, wie kann ich erhalten einen Verweis auf ein AppointmentItem ein EntryId gegeben, etc

private Items GetAppointmentsInRange(Folder folder, DateTime startTime, DateTime endTime) 
    { 
     string filter = "[Start] >= '" 
         + startTime.ToString("g") 
         + "' AND [End] <= '" 
         + endTime.ToString("g") + "'"; 
     Debug.WriteLine(filter); 
     try 
     { 
      Items calItems = folder.Items; 
      calItems.IncludeRecurrences = true; 
      calItems.Sort("[Start]", Type.Missing); 
      Items restrictItems = calItems.Restrict(filter); 
      if (restrictItems.Count > 0) 
      { 
       return restrictItems; 
      } 
      else 
      { 
       return null; 
      } 
     } 
     catch 
     { 
      return null; 
     } 
    } 

und ich kann durch diese meancementitems durchlaufen und bekomme die entryId, die mir gesagt wird, ist die eindeutige Kennung für diese Serie.

ich jetzt versuchen, herauszufinden, da ein EntryId, was ist der richtige Code einen direkten Verweis auf die AppointmentItem Serie zu erhalten (ohne eine Suche nach allem und Filter auf der „Client-Seite“ zu tun haben

Ist das möglich in Aussicht vsto?

+0

Müssen Sie die EntryID in einer Datenbank speichern und später verwenden? Oder brauchst du es nur während der Sitzung? –

+0

@YacoubMassad - Ich speichere die EntryId (aber um ehrlich zu sein, ich sehe nicht, wie das eine andere Antwort auf meine Frage geben würde) – leora

+0

Es gibt verschiedene Arten von EntryIDs, einige von ihnen können verschiedene Sitzungen und einige von ihnen umfassen kann nur eine einzelne Sitzung umfassen –

Antwort

2

Wenn Sie möchten, um Elemente bekommen (MailItem, FolderItem, AppoinmentItem, ...) durch EntryID, müssen Sie diese Methode verwenden GetItemFromID(), gibt ein Microsoft Outlook-Element durch die identifizierten angegebene Eingabe-ID (falls gültig)

Diese Funktion ist in NameSpace Objekte zur Verfügung, können Sie es mit Application.Session Eigenschaft oder app.GetNamespace("MAPI") Anruf bekommen:

var app = new Microsoft.Office.Interop.Outlook.Application(); 
... 

var ns = app.Session; // or app.GetNamespace("MAPI"); 

var entryID = "<apppoinment entry id>"; 
var appoinment = ns.GetItemFromID(entryID) as AppointmentItem; 

Aber es wird empfohlen, dass die IDs bietet Ordner:

var entryID = "<apppoinment entry id>"; 
var storeID = "<folder store id>"; 
var appoinment = ns.GetItemFromID(entryID, store) as AppointmentItem; 

EntryID bewusst sein, ändert sich, wenn Sie den Artikel in einen anderen Shop verschoben haben.

Futhermore empfiehlt Microsoft, dass Lösungen nicht auf dem EntryID Eigenschaft abhängen sollte eindeutig sein, es sei denn Einzelteile werden nicht verschoben werden, wenn Sie zum Beispiel Respond() Methode mit olMeetingAccepted oder olMeetingTentative ein neues Terminelement mit verschiedenen EntryID rufen erstellt wird und das Original ist entfernt.

-1

Sie wollen die GetItemFromID Methode des Namens Objekt verwenden (intuitiv, kann dies über die Application.Session Eigenschaft zugegriffen werden)

Sie werden zum Shop-ID des MAPI-Speicher benötigen, von dem Sie die abgerufen werden soll Artikel.

Verwandte Themen