public void MSOXWSCORE_S07_TC16_GetTaskItemWithTwoItemIdTypesSuccessfully()
        {
            #region Step 1: Create a recurring task item.
            // Define the pattern and range of the recurring task item.
            DailyRecurrencePatternType pattern = new DailyRecurrencePatternType();
            pattern.Interval = 1;

            NumberedRecurrenceRangeType range = new NumberedRecurrenceRangeType();
            int numberOfOccurrences           = 5;
            range.NumberOfOccurrences = numberOfOccurrences;
            System.DateTime start = System.DateTime.Now;
            range.StartDate = start;

            // Define the TaskType item.
            TaskType[] items = new TaskType[] { new TaskType() };
            items[0].Subject = Common.GenerateResourceName(
                this.Site,
                TestSuiteHelper.SubjectForCreateItem);
            items[0].Recurrence       = new TaskRecurrenceType();
            items[0].Recurrence.Item  = pattern;
            items[0].Recurrence.Item1 = range;

            // Call CreateItem operation.
            CreateItemResponseType createItemResponse = this.CallCreateItemOperation(DistinguishedFolderIdNameType.tasks, items);

            // Check the operation response.
            Common.CheckOperationSuccess(createItemResponse, 1, this.Site);

            BaseItemIdType[] createdTaskItemIds = Common.GetItemIdsFromInfoResponse(createItemResponse);

            // One created task item should be returned.
            Site.Assert.AreEqual <int>(
                1,
                createdTaskItemIds.GetLength(0),
                "One created task item should be returned! Expected Item Count: {0}, Actual Item Count: {1}",
                1,
                createdTaskItemIds.GetLength(0));
            #endregion

            #region Step 2: Get the recurring task item by ItemIdType.
            // Call GetItem operation using the created task item ID.
            GetItemResponseType getItemResponse = this.CallGetItemOperation(createdTaskItemIds);

            // Check the operation response.
            Common.CheckOperationSuccess(getItemResponse, 1, this.Site);
            #endregion

            // Exchange 2007 and Exchange 2010 do not support the RecurringMasterItemIdRanges element.
            SutVersion currentSutVersion = (SutVersion)Enum.Parse(typeof(SutVersion), Common.GetConfigurationPropertyValue("SutVersion", this.Site));
            if (currentSutVersion.Equals(SutVersion.ExchangeServer2013))
            {
                #region Step 3: Get the recurring task item by RecurringMasterItemIdRangesType.
                // Define the RecurringMasterItemIdRanges using the created task item ID.
                RecurringMasterItemIdRangesType[] recurringMasterItemIdRanges = new RecurringMasterItemIdRangesType[1];
                recurringMasterItemIdRanges[0]           = new RecurringMasterItemIdRangesType();
                recurringMasterItemIdRanges[0].Id        = (createdTaskItemIds[0] as ItemIdType).Id;
                recurringMasterItemIdRanges[0].ChangeKey = (createdTaskItemIds[0] as ItemIdType).ChangeKey;
                recurringMasterItemIdRanges[0].Ranges    = new OccurrencesRangeType[1];
                recurringMasterItemIdRanges[0].Ranges[0] = new OccurrencesRangeType();
                recurringMasterItemIdRanges[0].Ranges[0].CompareOriginalStartTimeSpecified = true;
                recurringMasterItemIdRanges[0].Ranges[0].CompareOriginalStartTime          = true;
                recurringMasterItemIdRanges[0].Ranges[0].StartSpecified = true;
                recurringMasterItemIdRanges[0].Ranges[0].Start          = start;
                recurringMasterItemIdRanges[0].Ranges[0].EndSpecified   = true;
                recurringMasterItemIdRanges[0].Ranges[0].End            = start.AddDays(numberOfOccurrences);

                // Call GetItem operation using the recurringMasterItemIdRanges.
                getItemResponse = this.CallGetItemOperation(recurringMasterItemIdRanges);

                // Check the operation response.
                Common.CheckOperationSuccess(getItemResponse, 1, this.Site);
                #endregion
            }
        }
        private ItemType[] GetRemoteCalendarItems(List <SearchExpressionType> searchItems)
        {
            FindItemType findItemType = new FindItemType();

            findItemType.ItemShape       = CalendarItemFields.CalendarQueryShape;
            findItemType.ParentFolderIds = new BaseFolderIdType[]
            {
                new DistinguishedFolderIdType
                {
                    Id = DistinguishedFolderIdNameType.calendar
                }
            };
            findItemType.Restriction = new RestrictionType
            {
                Item = new OrType
                {
                    Items = searchItems.ToArray()
                }
            };
            FindItemResponseType response = this.binding.FindItem(findItemType);

            ItemType[] array = this.HandleFindItemResponse(response);
            if (array == null)
            {
                Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "FindItem returned NULL ArrayOfRealItemsType.");
                return(null);
            }
            List <ItemIdType> list = new List <ItemIdType>();

            foreach (ItemType itemType in array)
            {
                if (itemType is CalendarItemType)
                {
                    CalendarItemType calendarItemType = itemType as CalendarItemType;
                    if (calendarItemType.CalendarItemType1 == CalendarItemTypeType.Single)
                    {
                        list.Add(itemType.ItemId);
                    }
                    else
                    {
                        OccurrencesRangeType occurrencesRangeType = new OccurrencesRangeType
                        {
                            Start          = base.ValidateFrom.UniversalTime,
                            StartSpecified = true,
                            End            = base.ValidateUntil.UniversalTime,
                            EndSpecified   = true,
                            Count          = 100,
                            CountSpecified = true
                        };
                        RecurringMasterItemIdRangesType item = new RecurringMasterItemIdRangesType
                        {
                            Id        = itemType.ItemId.Id,
                            ChangeKey = itemType.ItemId.ChangeKey,
                            Ranges    = new OccurrencesRangeType[]
                            {
                                occurrencesRangeType
                            }
                        };
                        list.Add(item);
                    }
                }
                else
                {
                    Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "FindItem returned an item which is not a CalendarItemType. Skipping it.");
                }
            }
            if (list.Count < 1)
            {
                Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "FindItem didn't return valid items.");
                return(null);
            }
            GetItemType getItem = new GetItemType
            {
                ItemShape = CalendarItemFields.CalendarItemShape,
                ItemIds   = list.ToArray()
            };
            GetItemResponseType item2 = this.binding.GetItem(getItem);

            ItemType[] array3 = this.HandleGetItemResponse(item2);
            if (array3 == null)
            {
                Globals.ConsistencyChecksTracer.TraceDebug((long)this.GetHashCode(), "GetItem returned NULL ItemType[].");
            }
            return(array3);
        }