Ошибка, когда я пытаюсь читать/обновлять.Body Задачи через EWS Управляемый API - “Вы, должна загрузить или присвоить это свойство, прежде чем можно будет считать его значение”.

Я использую веб-сервисы Exchange Управляемый API для работы с Задачами (Exchange 2007 SP1). Я могу создать их прекрасный. Однако, когда я пытаюсь сделать обновления, это работает на все поля за исключением.Body поля. Каждый раз, когда я пытаюсь получить доступ (чтение/обновление), что поле, это дает следующую ошибку:

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

Код, который я использую, похож на это:

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

Странная вещь состоит в том, что, осматривая набор свойств показывает, что объект содержит 33 свойства, но {Тело} не является одним из них. То свойство, кажется, наследовано от базового класса.Item или чего-то.

Так, я должен перезагрузить объект как Объект типа? Или перезагрузите его через.Bind или что-то? Следует иметь в виду, что я должен сделать это с тысячами объектов, таким образом, эффективность действительно имеет значение для меня.

34
задан JasonMArcher 10 July 2014 в 21:16
поделиться

1 ответ

У меня была такая же проблема при использовании EWS. Мой код запрашивает события (Назначения) из

календаря Outlook, в конце я не смог добраться до тела самого события.

Недостающим моментом в моей ситуации было следующее "простите, если есть опечатки":

После сбора Назначений, которые также являются производными от класса EWS Item, я сделал следующее:

1- Создал список с типом Item:

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

2- Добавил все назначения в список элементов:

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

3- Использовал обмененный сервис "я уже создал и использовал":

oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);

теперь, если вы попытаетесь использовать app.Body.Text, он вернет его успешно.

Приятного кодинга и удачи

Я забыл упомянуть ресурс:

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

Он упомянул использование Linq для сохранения промежуточного шага, это поможет вам избежать использования элементов списка и сэкономить немного памяти!

RockmanX

39
ответ дан 27 November 2019 в 16:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: