/// <remarks/>
 public void GetUserAvailabilityAsync(GetUserAvailabilityRequestType GetUserAvailabilityRequest, object userState)
 {
     if ((this.GetUserAvailabilityOperationCompleted == null))
     {
         this.GetUserAvailabilityOperationCompleted = new System.Threading.SendOrPostCallback(this.OnGetUserAvailabilityOperationCompleted);
     }
     this.InvokeAsync("GetUserAvailability", new object[] {
                 GetUserAvailabilityRequest}, this.GetUserAvailabilityOperationCompleted, userState);
 }
 /// <remarks/>
 public void GetUserAvailabilityAsync(GetUserAvailabilityRequestType GetUserAvailabilityRequest)
 {
     this.GetUserAvailabilityAsync(GetUserAvailabilityRequest, null);
 }
        /// <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);
        }
 /// <remarks/>
 public System.IAsyncResult BeginGetUserAvailability(GetUserAvailabilityRequestType GetUserAvailabilityRequest, System.AsyncCallback callback, object asyncState)
 {
     return this.BeginInvoke("GetUserAvailability", new object[] {
                 GetUserAvailabilityRequest}, callback, asyncState);
 }
Example #5
0
        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);
        }