exchange-server


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
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
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.
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
Calling the Load method solved my problem :)
foreach (Item item in findResults.Items)
{
item.Load();
string subject = item.Subject;
string mailMessage = item.Body;
}
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);

Related Links

Create Folders and rules in exchange server 2003
How can I determine the “deleted on” date of an item in Exchange using EWS?
What is exchange web services better suited to do than office interop?
Creating usage log report from exchange server
javaMail send email over MSExchange
Query Exchange server using DirectoryServices
PowerShell script to get UTF8?
EWS-manged: Fetch required and optional attendees of appointments
Find item by original filename with Exchange Web Services
Use Exchange Web Services on Android
Generating ActiveSync sync/fetch commands load on an Exchange server
How can I get the Exchange Server programmatically from my App(C#)
Exchange 2010 Web Services - creation of an all day event appointment
Exchange2007 WebServices - AddDelegate
Exchange OWA Group Schedule
Microsoft Exchange + moving contact record into another folder

Categories

HOME
php
elasticsearch
lambda
freeradius
vagrant
focus
schema.org
mousemove
azure-mobile-services
ag-grid
graphql-js
responsive-design
log4j2
driver
stimulsoft
max-msp-jitter
corona
temperature
pinterest
uima
exe
fosuserbundle
cpu-usage
bazaar
adminlte
unity-container
candlestick-chart
websphere-portal
ipa
list-comprehension
android-cardview
django-import-export
cube
toad
vcenter
windows2012
memory-fences
quick-nimble
private-key
om-next
orchardcms-1.8
nppexec
jade4j
djcelery
forms-authentication
extbase
linq.js
oauth2-playground
hdiv
cloudera-sentry
haar-classifier
moinmoin
android-5.0-lollipop
spring.net
webvtt
word-2007
sesame
front-camera
bpms
ternary-operator
msbuild-4.0
cdo.message
qtcpsocket
mercurial-extension
currency-exchange-rates
outlook.com
google-maps-api-2
ibm-was
screen-orientation
green-threads
tree-structure
fiware-bosun
sunos
dos2unix
dnsjava
flurry-analytics
nesper
lmax
android-2.3-gingerbread
forceclose
hyperloglog
hyphen
quickgraph
node.js-stream
jacob
chartfx
dynamic-rdlc-generation
blobstorage
asp.net-mvc-3-areas
cyrillic
popup-blocker
telerik-ajax
affinetransform
multidrop-bus
radscheduler
botnet
database-deadlocks
fork-join
photo-management
pyjamas
gaelyk
tessellation
pinax
dm
google-translator-toolkit
ning
community-server

Resources

Mobile Apps Dev
Database Users
javascript
java
csharp
php
android
MS Developer
developer works
python
ios
c
html
jquery
RDBMS discuss
Cloud Virtualization
Database Dev&Adm
javascript
java
csharp
php
python
android
jquery
ruby
ios
html
Mobile App
Mobile App
Mobile App