2015-12-29 18 views
6

Ho un componente aggiuntivo prospettiva VSTO e io sono in grado di recuperare un elenco di appuntamenti del calendario utilizzando questo codice:In Outlook C# VSTO, come posso ottenere un riferimento a un AppointmentItem dato un EntryID, ecc

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

e posso scorrere questo appuntamento e ottenere l'ID di accesso che mi viene detto è l'identificativo univoco per quella serie.

Ora sto cercando di capire, dato un EntryID, qual è il codice giusto per ottenere un riferimento diretto alla serie AppointmentItem (senza dover fare una ricerca di tutto e filtro sul "lato client"

questo è possibile in prospettiva VSTO?

+0

È necessario memorizzare il EntryID in un database e utilizzarlo in un secondo momento? O ne hai bisogno solo durante la sessione? –

+0

@YacoubMassad - Sto memorizzando il EntryId (ma per essere onesti, non vedo come ciò darebbe una risposta diversa alla mia domanda) – leora

+0

Ci sono diversi tipi di EntryID, alcuni di loro possono occupare diverse sessioni e alcuni di essi può spaziare solo una singola sessione –

risposta

2

Se volete ottiene elementi (MailItem, FolderItem, AppoinmentItem, ...) per EntryID, è necessario utilizzare GetItemFromID(), questo metodo restituisce un Articolo Microsoft Outlook identificato dal ID voce specificato (se valido)

Questa funzione è disponibile in NameSpace oggetti, si può ottenere usando Application.Session proprietà o app.GetNamespace("MAPI") chiamata:

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; 

Ma si raccomanda che fornisce Id della cartella:

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

Essere consapevoli EntryID maggio cambia se hai spostato l'articolo in un altro negozio.

Futhermore, Microsoft consiglia che le soluzioni non dovrebbero dipendono dalla proprietà EntryID di essere unico a meno che non verranno spostati gli elementi, ad esempio se si chiama Respond() metodo con olMeetingAccepted o olMeetingTentative viene creato un nuovo elemento appuntamento con differenti EntryID e l'originale è rimosso.

-1

si desidera utilizzare il metodo GetItemFromID dell'oggetto NameSpace (intuitivamente, questo si può accedere tramite la proprietà Application.Session)

sarà necessario il Codice del negozio del negozio MAPI da cui si desidera recuperare il articolo.

Problemi correlati