2015-01-23 6 views
0

Я использую управляемый API EWS для загрузки встреч для определенного ресурса комнаты и публикации его через WCF, который будет потребляться планшетным устройством.EWS Нет ресурсов в Appointment.Resources после Appointment.Bind

Я хочу отменить бронирование конференц-зала, если организатор не выполнит конкретные действия после 15 минут, которые планируется начать.

Поскольку планшетное устройство имеет только свойство StoreID идентифицировать событие из, я осуществил следующий код:

public bool CancelMeeting(string appointmentId, string roomEmail) 
    { 
     try 
     { 
      var service = GetExchangeService(); 
      var ai = new AlternateId[1]; 
      ai[0] = new AlternateId(); 
      ai[0].UniqueId = appointmentId; 
      ai[0].Format = IdFormat.HexEntryId; 
      ai[0].Mailbox = roomEmail; 
      ServiceResponseCollection<ConvertIdResponse> cvtresp = service.ConvertIds(ai, IdFormat.EwsId); 
      var appointment = Appointment.Bind(service, ((AlternateId)cvtresp[0].ConvertedId).UniqueId); 

      if (appointment.Resources.Count != 0) 
       appointment.Resources.RemoveAt(0); 

      appointment.Location = string.Empty; 

      appointment.Save(SendInvitationsMode.SendOnlyToAll); 
      return true; 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
    } 

Однако

if (appointment.Resources.Count != 0) 
    appointment.Resources.RemoveAt(0); 

в этом коде appointment.Resources.Count является всегда 0. В соответствии с этим сообщением (Can't Retrieve Resources (rooms) from Exchange Web Services) вам нужно указать EWS, чтобы конкретно включить Ресурсы. Как вы указываете, чтобы включать ресурсы при использовании Appointment.Bind?

ответ

2

Точно так же, как и сообщение, которое вы связали. Создайте набор свойств с свойством AppointmentSchema.Resources и передайте его методу Bind.

PropertySet includeResources = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.Resources); 
var appointment = Appointment.Bind(service, ((AlternateId)cvtresp[0].ConvertedId).UniqueId, includeResources); 

UPDATE:

Похоже, вы открываете календарь комнаты, а не организатор. В календаре комнаты вы не увидите ресурсов. Ресурсы видны только в календаре организатора. Это происходит потому, что они реализованы как получатели BCC. Также имейте в виду, что удаление чего-либо из копии комнаты назначения не удалит ее из назначения в чужом почтовом ящике, так что это, вероятно, не лучший подход. Вместо этого вы хотели бы отказаться от собрания, которое отправит уведомление об отказе организатору и удалит встречу из календаря комнаты.

+0

Назначение возвращается (как и код, который я разместил в исходном сообщении) и перечисление ресурсов по-прежнему заявляет: «Перечисление не дало никаких результатов» – grimstoner

+0

Я также пробовал (как предлагается в этом сообщении: http: // stackoverflow. com/questions/8904741/finditems-and-bindtoitems-give-inconsistent-results-for-emailmessage-sender): service.LoadPropertiesForItems (новый список {назначение}, includeResources); – grimstoner

+0

Какую версию Exchange Server вы используете, и какую версию вы указываете при создании объекта ExchangeService? –

 Смежные вопросы

  • Нет связанных вопросов^_^