2010-07-21 5 views
26

Sto utilizzando l'API gestita dai servizi Web di Exchange per lavorare con le attività (Exchange 2007 SP1). Posso crearli bene. Tuttavia, quando provo a fare aggiornamenti, funziona per tutti i campi tranne per il campo .Body. Ogni volta che cerco di accesso (lettura/aggiornamento) quel campo, dà il seguente errore:Errore quando si tenta di leggere/aggiornare il .Body di un'attività tramite EWS Managed API - "È necessario caricare o assegnare questa proprietà prima di poterne leggere il valore."

"You must load or assign this property before you can read its value." 

Il codice che sto usando ha questo aspetto:

//impersonate the person whose tasks you want to read 
    Me.Impersonate(userName); //home-made function to handle impersonation 

    //build the search filter 
    Exchange.SearchFilter.SearchFilterCollection filter = New Exchange.SearchFilter.SearchFilterCollection(); 
    filter.Add(New Exchange.SearchFilter.IsEqualTo(Exchange.TaskSchema.Categories, "Sales")); 

    //do the search 
    EWS.Task exTask = esb.FindItems(Exchange.WellKnownFolderName.Tasks, filter, New Exchange.ItemView(Integer.MaxValue)); 

    exTask.Subject = txtSubject.Text; //this works fine 
    exTask.Body = txtBody.Text; //This one gives the error implying that the object isn't loaded 

La cosa strana è che, ispezionando il il sacchetto di proprietà mostra che l'oggetto contiene 33 proprietà, ma {Corpo} non è uno di questi. Quella proprietà sembra essere ereditata dalla classe base .Item, o qualcosa del genere.

Quindi, devo ricaricare l'oggetto come tipo Elemento? Oppure ricaricalo tramite .Bind o qualcosa del genere? Tieni presente che ho bisogno di farlo con migliaia di articoli, quindi l'efficienza conta per me.

risposta

34

Ho avuto lo stesso problema quando utilizzo l'EWS. Il mio codice richiede gli eventi (Appuntamenti) dal

Calendario di Outlook, alla fine non sono riuscito a raggiungere il corpo dell'evento stesso.

Il punto mancante nella mia situazione era la seguente "mi perdoni se non v'è alcun errore di battitura":

Dopo aver raccolto le nomine, che sono anche derivati ​​da EWS classe Item, ho fatto la seguente:

1- creare una lista con il tipo di voce:

List<Item> items = new List<Item>(); 

2- Aggiunto tutti gli appuntamenti alla lista elementi:

if(oAppointmentList.Items.Count > 0) // Prevent the exception 
{ 
    foreach(Appointment app in oAppointmentList) 
    { 
     items.Add(app); 
    } 
} 

3- utilizzato il servizio scambiato "Ho già creato e usato":

oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties); 

ora se si tenta di utilizzare app.Body.Text, ritornerà con successo.

Godetevi Coding e Miglior fortuna

Ho dimenticato di citare la risorsa:

http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/ce1e0527-e2db-490d-817e-83f586fb1b44

Egli ha menzionato l'utilizzo di Linq per salvare la fase intermedia, che vi aiuterà a evitare di utilizzare l'elementi dell'elenco e salva un po 'di memoria!

RockmanX

4

È possibile caricare le proprietà utilizzando un set di proprietà personalizzate. Alcune proprietà sono estese invece di FirstClassProperties.

piccolo esempio:

 
     _customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.MyResponseType, AppointmentSchema.IsMeeting, AppointmentSchema.ICalUid); 
     _customPropertySet.RequestedBodyType = BodyType.Text; 
     appointment.Load(_customPropertySet); 
36

chiamata al metodo Load risolto il mio problema :)

foreach (Item item in findResults.Items) 
     {     
      item.Load(); 
      string subject = item.Subject; 
      string mailMessage = item.Body; 
     } 
+0

lavorato come un fascino! – NoReceipt4Panda

Problemi correlati