2015-12-29 12 views
6

Mam Addin Outlook VSTO i jestem w stanie pobrać listę terminów kalendarza za pomocą tego kodu:W Outlook C# VSTO, w jaki sposób można uzyskać odwołanie do appointmentItem punktację EntryId itp

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

i mogę przechodzić przez to spotkanie i uzyskać identyfikator wejścia, który, jak mi powiedziano, jest unikalnym identyfikatorem dla tej serii.

Jestem teraz próbuje dowiedzieć się, podać EntryId, co jest właściwym kod, aby uzyskać bezpośrednie odniesienie do serii appointmentItem (bez konieczności wykonywania poszukiwania wszystkiego i filtra na „stronie klienta”

Czy jest to możliwe w programie Outlook VSTO?

+0

Czy chcesz przechowywać EntryID w bazie danych i użyć go później? A może potrzebujesz go w trakcie sesji? –

+0

@YacoubMassad - Przechowuję EntryId (ale szczerze mówiąc, nie widzę, jak dałoby to inną odpowiedź na moje pytanie) – leora

+0

Istnieją różne typy identyfikatorów EntryID, niektóre z nich mogą obejmować różne sesje, a niektóre z nich może obejmować tylko jedną sesję –

Odpowiedz

2

Jeśli chcesz dostaje elementy (MailItem, FolderItem, AppoinmentItem ...) przez EntryID, trzeba użyć GetItemFromID(), metoda ta zwraca produkt Microsoft Outlook zidentyfikowany przez określony ID wpisu (jeśli jest prawidłowy)

Funkcja ta jest dostępna w NameSpace obiektów, można je dostać za pomocą Application.Session własności lub app.GetNamespace("MAPI") połączenia:

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; 

Jednak zaleca się, zapewnia folderu za Id:

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

Należy pamiętać EntryID może zmiany, jeśli przeniosłeś przedmiot do innego sklepu.

Futhermore, Microsoft zaleca, aby rozwiązania nie powinny zależeć od własności EntryID być unikalne chyba nie będą przenoszone przedmioty, na przykład jeśli zadzwonisz Respond() metodę z olMeetingAccepted lub olMeetingTentative nowa pozycja spotkanie z innym EntryID jest tworzony i oryginału jest usunięty.

-1

chcesz użyć metody GetItemFromID obiektu przestrzeni nazw (intuicyjnie, to można uzyskać dostęp za pośrednictwem właściwości Application.Session)

trzeba będzie sklepie identyfikator sklepu MAPI, z którego chcesz odzyskać pozycja.

Powiązane problemy