2016-12-12 4 views
0

В настоящее время я имею немного коды мы используем, чтобы получить календарь на адрес почтового ящика (в частности почтового ящик для контакта номера) на весь день:Обмен EWS API - Получить CalendarEvent от Назначения

 var attendees = new List<AttendeeInfo> { 
      new AttendeeInfo { 
       SmtpAddress = emailAddress, 
       AttendeeType = MeetingAttendeeType.Room 
      } 
     }; 

     var start = currentDate.Date.ToUniversalTime(); 
     var results = this._Service.GetUserAvailability(attendees, new TimeWindow(start, start.AddHours(24)), AvailabilityData.FreeBusy); 

     var availability = results.AttendeesAvailability[0].CalendarEvents; 
     // Do some manipulation across the events… 

Это все работает нормально, я сейчас подходит к точке, где мне нужно, чтобы иметь возможность добавлять встречи на почтовый ящик, используя следующее:

 var meeting = new Appointment(this._Service) { 
      Subject = subject, 
      Start = startDate, 
      End = endDate 
     }; 

     if (null != roomToUse) { 
      meeting.Location = roomToUse.Name; 
      meeting.Resources.Add(roomToUse.EmailAddress); 
     } 

     var organiser = meeting.RequiredAttendees.Add(this._User); 
     // Save the meeting to the Calendar folder and send the meeting request. 
     meeting.Save(
      new FolderId(WellKnownFolderName.Calendar, organiser.Address), 
      SendInvitationsMode.SendOnlyToAll 
     ); 

Который также работает хорошо, однако, что мне нужно теперь получаем CalendarEvent для нового Назначения, чтобы вернуть те же биты информация в той же структуре (потому что CalendarEvent делает некоторые вещи, как поворот предмета в [Organiser First Name] [Organiser Last Name] [Subject], который мы внутренне обрабатываем, разбираясь с именем и темой.

Я мог бы просто дублировать этот бит логики, но кажется немного ненадежным, в идеале я просто хотел бы повторно использовать тот же класс.

Итак, моя следующая мысль состояла в том, чтобы снова получить доступность для почтового ящика и просто закодировать его, чтобы найти правильный CalendarEvent, однако я не вижу надежного способа правильно определить, какой CalendarEvent такой же, как тот, который я только что сделано. Я мог уйти с даты начала и окончания/времени, проверять предмет, но это кажется немного хрупким.

Новая встреча имеет идентификатор сохранен против него, и так же CalendarEventDetails на каждом CalendarEvent, однако (после преобразования нового идентификатора IdFormat.EwsId в IdFormat.HexEntryId) два не совпадают, так что я предполагаю, что это не правильный путь для этого.

Есть ли лучший способ достичь этого? Либо перейдя от GetUserAvailability к чему-то, что возвращает Appointment, однако (и прошло некоторое время с тех пор, как я написал этот бит кода). Я помню, что это было не так просто, чтобы получить все встречи за данный день (но более чем счастливы иначе).

ответ

0

Новая встреча имеет идентификатор сохраненный против него, и так же CalendarEventDetails на каждый CalendarEvent, однако (после преобразования нового идентификатора IdFormat.EwsId в IdFormat.HexEntryId) два не совпадают, поэтому я предполагаю, что это не правильный путь.

EntryID, который возвращается в CalendarEventDetails является идентификация текущего назначения в почтовом ящике вы запрошены. Когда вы говорите, что это не соответствует, это не имеет смысла (например, он возвращает текущие данные из целевого почтового ящика, если у вас есть Id, который может быть устаревшим или ссылаться на другой объект или почтовый ящик, например, идентификатор, который вы получаете от Почтовый ящик конференц-зала не будет соответствовать назначению, созданному в почтовом ящике Organizer, вам необходимо использовать GOID встречи и выполнить поиск в этом экземпляре).

Есть ли лучший способ достичь этого? Либо, перейдя от GetUserAvailability к чему-то, что возвращает Appointments, однако (и прошло некоторое время с тех пор, как я написал этот бит кода), я помню, что не так просто получить все встречи за данный день (но более чем счастлив быть).

Ваших Выполнение запросы точно такие же данные, независимо от того, какой операции (например, с использованием FindItems для запроса календаря непосредственно) используются так же это не имеет логический смысл для меня.

Который также работает хорошо, однако, что мне нужно сейчас сделать, это получить CalendarEvent для нового назначения, вернуть те же биты информации в одной и той же структуре (потому что CalendarEvent делает некоторые вещи, как превращение предмета в [Организатора имя] [Организатор Фамилия] [Тема], который мы внутренне обработки разрыва обратно во имя и предмет.

что, не EWS это особенность собрания Комнатные почтовые ящики, которые заменят тему назначения с именем Организатора для secu . Это можно отключить в почтовом ящике собрания с помощью Set-CalendarProcessing -DOrganizerToSubject https://technet.microsoft.com/en-us/library/dd335046(v=exchg.160).aspx

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