В настоящее время я имею немного коды мы используем, чтобы получить календарь на адрес почтового ящика (в частности почтового ящик для контакта номера) на весь день:Обмен 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
, однако (и прошло некоторое время с тех пор, как я написал этот бит кода). Я помню, что это было не так просто, чтобы получить все встречи за данный день (но более чем счастливы иначе).