exchange server - office - Error al intentar leer/actualizar el.Body de una tarea a través de la API administrada de EWS: "Debe cargar o asignar esta propiedad antes de poder leer su valor".
exchange web services api (3)
Estoy utilizando la API administrada de servicios web de Exchange para trabajar con tareas (Exchange 2007 SP1). Puedo crearlos bien. Sin embargo, cuando trato de hacer actualizaciones, funciona para todos los campos excepto para el campo .Body. Cada vez que intento acceder (leer / actualizar) ese campo, da el siguiente error:
"You must load or assign this property before you can read its value."
El código que estoy usando se ve así:
//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
Lo extraño es que, al inspeccionar la bolsa de propiedades, se muestra que el objeto contiene 33 propiedades, pero {Cuerpo} no es una de ellas. Esa propiedad parece ser heredada de la clase base .Item, o algo así.
Entonces, ¿necesito volver a cargar el objeto como tipo de elemento? ¿O recargarlo a través de .Bind o algo? Tenga en cuenta que debo hacer esto con miles de elementos, por lo que la eficiencia es importante para mí.
Llamando al método de carga resolví mi problema :)
foreach (Item item in findResults.Items)
{
item.Load();
string subject = item.Subject;
string mailMessage = item.Body;
}
Puede cargar propiedades utilizando un conjunto de propiedades personalizadas. Algunas propiedades son propiedades extendidas en lugar de FirstClassProperties.
Pequeño ejemplo
_customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.MyResponseType, AppointmentSchema.IsMeeting, AppointmentSchema.ICalUid); _customPropertySet.RequestedBodyType = BodyType.Text; appointment.Load(_customPropertySet);
Tuve el mismo problema al usar el EWS. Mi Código está solicitando los eventos (Citas) de la
Calendario de Outlook, al final no pude llegar al cuerpo del Evento en sí.
El punto faltante en mi situación fue el siguiente "perdóneme si hay errores tipográficos":
Después de reunir las citas, que también se derivan de la clase de elementos de EWS, hice lo siguiente:
1- Crear una lista con el tipo de artículo:
List<Item> items = new List<Item>();
2- Agregado todas las citas a la lista de artículos:
if(oAppointmentList.Items.Count > 0) // Prevent the exception
{
foreach( Appointment app in oAppointmentList)
{
items.Add(app);
}
}
3- Usé el servicio intercambiado "Ya he creado y usado":
oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);
Ahora, si intenta utilizar app.Body.Text, lo devolverá correctamente.
Disfruta de la codificación y la mejor suerte
Olvidé mencionar el recurso:
Mencionó el uso de Linq para guardar el paso intermedio, ¡lo ayudará a evitar el uso de los elementos de la Lista y ahorrar algo de memoria!
RockmanX