开发者

Error when I try to read/update the .Body of a Task via EWS Managed API - "You must load or assign this property before you can read its value."

I am using the Exchange Web Services Managed API to work with Tasks (Exchange 2007 SP1). I can create them fine. However, when I try to do updates, it works for all of the fields except for the .Body field. Whenever I try to access (read/update) that field, it gives the following error:

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

The code I am using looks like this:

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

   //build the search filter
   Exch开发者_JAVA百科ange.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

The strange thing is that, inspecting the property bag shows that the object contains 33 properties, but {Body} is not one of them. That property seems to be inherited from the base class .Item, or something.

So, do I need to re-load the object as type Item? Or reload it via .Bind or something? Keep in mind that I need to do this with thousands of items, so efficiency does matter to me.


Calling the Load method solved my problem :)

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


I had the same problem when using the EWS. My Code is requesting the events(Appointments) from the

Outlook calendar, at the end I couldn't reach to the body of the Event itself.

The missing point in my situation was the following "forgive me if there is any typo errors":

After gathering the Appointments, which are also derived from EWS Item Class, I did the following:

1- Create a List with the type Item:

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

2- Added all appointments to items list:

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

3- Used the exchanged service "I have already created and used":

oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);

now if you try to use app.Body.Text, it will return it successfully.

Enjoy Coding and Best Luck

I forgot to mention the resource:

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

He mentioned the use of Linq to save the intermediate step, it will help you avoid using the List items and save some memory!

RockmanX


You can load properties using a custom property set. Some properties are Extended properties instead of FirstClassProperties.

Little example:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜