2010-07-21 5 views
26

Ich verwende die verwaltete Exchange-Webdienste-API, um mit Aufgaben (Exchange 2007 SP1) zu arbeiten. Ich kann sie gut machen. Wenn ich versuche, Aktualisierungen vorzunehmen, funktioniert es jedoch für alle Felder mit Ausnahme des Felds .Body. Jedes Mal, wenn ich versuchen, zuzugreifen (Lesen/Update) das Feld, es gibt den folgenden Fehler:Fehler beim Versuch, den .Body einer Aufgabe über EWS Managed API zu lesen/zu aktualisieren - "Sie müssen diese Eigenschaft laden oder zuweisen, bevor Sie ihren Wert lesen können."

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

Der Code Ich benutze sieht wie folgt aus:

//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 

Das Merkwürdige ist, dass, die Kontrolle der Eigenschaftstasche zeigt an, dass das Objekt 33 Eigenschaften enthält, aber {Body} gehört nicht dazu. Diese Eigenschaft scheint von der Basisklasse .Item oder etwas geerbt zu sein.

Also muss ich das Objekt als Typ Item neu laden? Oder laden Sie es neu über .Bind oder etwas? Denken Sie daran, dass ich dies mit Tausenden von Elementen tun muss, so dass Effizienz mir wichtig ist.

Antwort

34

Ich hatte das gleiche Problem bei der Verwendung der EWS. Mein Code fragt nach den Terminen (Termine) aus dem Outlook-Kalender, am Ende konnte ich den Hauptteil des Events selbst nicht erreichen.

Die fehlenden Punkt in meiner Situation war die folgende „verzeiht mir, wenn es irgendwelche Tippfehler ist“:

Nachdem die Termine zu sammeln, die auch von EWS Item Class abgeleitet sind, habe ich die folgenden:

erstellen

1- eine Liste mit dem Typ Item:

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

2- Hinzugefügt alle Termine zu Artikel-Liste:

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

3- den ausgetauschten Service Used „Ich habe bereits erstellt und verwendet“:

oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties); 

jetzt, wenn Sie versuchen, app.Body.Text zu verwenden, wird es erfolgreich zurück.

Genießen Codierung und beste Luck

ich die Ressource zu erwähnen vergaß:

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

Er erwähnt die Verwendung von Linq den Zwischenschritt zu speichern, es wird Ihnen helfen, die Listenelemente vermeiden, mit und etwas Speicher sparen!

RockmanX

4

Sie können Eigenschaften legen Sie eine benutzerdefinierte Eigenschaft Satz verwenden. Einige Eigenschaften sind erweiterte Eigenschaften anstelle von FirstClassProperties.

Kleines Beispiel:

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

die Load-Methode aufrufen mein Problem gelöst :)

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

arbeitete wie ein Charme! – NoReceipt4Panda

Verwandte Themen