/// <summary> /// Gets the free/busy status appointment information for User2 (as specified in ptfconfig) through testUserName's account. /// </summary> /// <param name="testUserName">The user who gets the free/busy status information.</param> /// <param name="password">The testUserName's password.</param> /// <returns> /// <para>"0": means "FreeBusy", which indicates brief information about the appointments on the calendar;</para> /// <para>"1": means "Detailed", which indicates detailed information about the appointments on the calendar;</para> /// <para>"2": means the appointment free/busy information can't be viewed or error occurs, which indicates the user has no permission to get information about the appointments on the calendar;</para> /// </returns> public string GetUserFreeBusyStatus(string testUserName, string password) { // Use the specified user for the web service client authentication string domain = Common.GetConfigurationPropertyValue("Domain", this.Site); this.availability.Credentials = new NetworkCredential(testUserName, password, domain); GetUserAvailabilityRequestType availabilityRequest = new GetUserAvailabilityRequestType(); SerializableTimeZone timezone = new SerializableTimeZone() { Bias = 480, StandardTime = new SerializableTimeZoneTime() { Bias = 0, Time = "02:00:00", DayOrder = 5, Month = 10, DayOfWeek = "Sunday" }, DaylightTime = new SerializableTimeZoneTime() { Bias = -60, Time = "02:00:00", DayOrder = 1, Month = 4, DayOfWeek = "Sunday" } }; availabilityRequest.TimeZone = timezone; // Specifies the mailbox to query for availability information. string user = Common.GetConfigurationPropertyValue("User2Name", this.Site); EmailAddress emailAddress = new EmailAddress() { Address = string.IsNullOrEmpty(user) ? string.Empty : user + "@" + domain }; MailboxData mailboxData = new MailboxData() { Email = emailAddress, AttendeeType = MeetingAttendeeType.Organizer, }; availabilityRequest.MailboxDataArray = new MailboxData[] { mailboxData }; // Identify the time to compare free/busy information. FreeBusyViewOptionsType freeBusyViewOptions = new FreeBusyViewOptionsType() { TimeWindow = new Duration() { StartTime = DateTime.Now, EndTime = DateTime.Now.AddHours(3) }, RequestedView = FreeBusyViewType.Detailed, RequestedViewSpecified = true }; availabilityRequest.FreeBusyViewOptions = freeBusyViewOptions; GetUserAvailabilityResponseType availabilityInfo = null; try { availabilityInfo = this.availability.GetUserAvailability(availabilityRequest); } catch (SoapException exception) { Site.Assert.Fail("Error occurs when getting free/busy status: {0}", exception.Message); } string freeBusyStatus = "3"; FreeBusyResponseType[] freeBusyArray = availabilityInfo.FreeBusyResponseArray; if (freeBusyArray != null) { foreach (FreeBusyResponseType freeBusy in freeBusyArray) { ResponseClassType responseClass = freeBusy.ResponseMessage.ResponseClass; if (responseClass == ResponseClassType.Success) { // If the response FreeBusyViewType value is FreeBusy or Detailed, the freeBusyStatus is Detailed. // If all the response FreeBusyViewType values are FreeBusy, the freeBusyStatus is FreeBusy; if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.Detailed) { freeBusyStatus = "1"; } else if (freeBusy.FreeBusyView.FreeBusyViewType == FreeBusyViewType.FreeBusy) { if (freeBusyStatus != "1") { freeBusyStatus = "0"; } } } else if (responseClass == ResponseClassType.Error) { if (freeBusy.ResponseMessage.ResponseCode == ResponseCodeType.ErrorNoFreeBusyAccess) { return("2"); } else { Site.Assert.Fail("Error occurs when getting free/busy status. ErrorCode: {0}; ErrorMessage: {1}.", freeBusy.ResponseMessage.ResponseCode, freeBusy.ResponseMessage.MessageText); } } } } return(freeBusyStatus); }
public static List <CalendarObject> GetCalendarData(DateTime lookupDate) { List <CalendarObject> calendarObjects = new List <CalendarObject>(); //umdemo.dnsalias.com explicit credentials ExchangeServiceBinding exchangeServer = new ExchangeServiceBinding(); ICredentials creds = new NetworkCredential(user, password, "um.test.com"); exchangeServer.Credentials = creds; exchangeServer.Url = @"http://um.test.com/ews/exchange.asmx"; GetUserAvailabilityRequestType request = new GetUserAvailabilityRequestType(); MailboxData[] mailboxes = new MailboxData[1]; mailboxes[0] = new MailboxData(); // Identify the user mailbox to review their Free/Busy data EmailAddress emailAddress = new EmailAddress(); emailAddress.Address = "*****@*****.**"; emailAddress.Name = String.Empty; mailboxes[0].Email = emailAddress; request.MailboxDataArray = mailboxes; //Set TimeZone request.TimeZone = new SerializableTimeZone(); request.TimeZone.Bias = 480; request.TimeZone.StandardTime = new SerializableTimeZoneTime(); request.TimeZone.StandardTime.Bias = 0; request.TimeZone.StandardTime.DayOfWeek = DayOfWeekType.Sunday.ToString(); request.TimeZone.StandardTime.DayOrder = 1; request.TimeZone.StandardTime.Month = 11; request.TimeZone.StandardTime.Time = "02:00:00"; request.TimeZone.DaylightTime = new SerializableTimeZoneTime(); request.TimeZone.DaylightTime.Bias = -60; request.TimeZone.DaylightTime.DayOfWeek = DayOfWeekType.Sunday.ToString(); request.TimeZone.DaylightTime.DayOrder = 2; request.TimeZone.DaylightTime.Month = 3; request.TimeZone.DaylightTime.Time = "02:00:00"; // Identify the time to compare if the user is Free/Busy Duration duration = new Duration(); duration.StartTime = lookupDate; duration.EndTime = lookupDate.AddDays(1); // Identify the options for comparing F/B FreeBusyViewOptionsType viewOptions = new FreeBusyViewOptionsType(); viewOptions.TimeWindow = duration; viewOptions.RequestedView = FreeBusyViewType.Detailed; viewOptions.RequestedViewSpecified = true; request.FreeBusyViewOptions = viewOptions; GetUserAvailabilityResponseType response = exchangeServer.GetUserAvailability(request); foreach (FreeBusyResponseType responseType in response.FreeBusyResponseArray) { if (responseType.FreeBusyView.CalendarEventArray.Length > 0) { foreach (CalendarEvent calendar in responseType.FreeBusyView.CalendarEventArray) { CalendarObject calendarObject = new CalendarObject(); calendarObject.Location = calendar.CalendarEventDetails.Location; calendarObject.Subject = calendar.CalendarEventDetails.Subject; calendarObject.StartDate = calendar.StartTime; calendarObject.EndDate = calendar.EndTime; calendarObject.IsMeeting = calendar.CalendarEventDetails.IsMeeting; calendarObjects.Add(calendarObject); } } } return(calendarObjects); }