抱歉问题标题不好
我试图从我的交换服务器获取所有免费房间(不是预订的房间)。问题是我也得到了我预订的房间,但没有人接受。
我想在预订房间后将它们从列表中排除。
这是我用来预订房间
的代码ExchangeService service;
//...code to new-up and config service
var request = new Appointment(service)
{
Subject = booking.Subject,
Start = booking.Start,
End = booking.End,
Location = booking.Room
};
request.RequiredAttendees.Add(booking.Person);
request.RequiredAttendees.Add(booking.Room);
request.Save(SendInvitationsMode.SendOnlyToAll);
要注意我已经尝试在Save()之后直接调用request.Accept()但没有那个“真正预订”房间。在Outlook中按“接受”是唯一的“修复”。不用说,我已经尝试了我能找到的关于这个问题的所有内容(我不定期与Exchange合作)。
然后代码获得免费房间
var rooms = service.GetRooms(locationAddress);
// all the meeting rooms at location
var rooms= rooms.Select(i => new AttendeeInfo { SmtpAddress = i.Address, AttendeeType = MeetingAttendeeType.Room });
// Get all availabilites from all rooms at given locations
var availability = service.GetUserAvailability(rooms, timeframe, AvailabilityData.FreeBusy);
foreach (var a in availability.AttendeesAvailability)
{
// Here we always get all the free rooms
// including the ones we booked earlier
// UNTIL somebody clicks accept in Outlook and then it does not appear here!?
}
我无法看到房间在Outlook被接受之前有不同的标记,因此我无法区分它们并将它们拉出我不想要的。
我也真的认为那些房间不应该有空,所以我必须在预订前把它放在房间里,但是我完全错过了它。
修改
我真的不明白为什么在GetUserAvailability方法的枚举中没有OptionData。 Free 的选项(只有FreeBusy,FreeBusyAndSuggestions和Suggestions但是没有Free!?)
答案 0 :(得分:2)
好的,这是相当愚蠢的...代码(我继承)没有包含实际删除房间的代码(忙碌)。我只是注意到了......
解决此问题的代码就是这个
var busyRoomToRemove = a.CalendarEvents.ToList().Find(x => x.FreeBusyStatus == LegacyFreeBusyStatus.Busy);
a.CalendarEvents.Remove(busyRoomToRemove);
很抱歉给您带来不便:-)