/// <summary> /// Generate the request message for operation "UpdateFolder". /// </summary> /// <param name="folderType">An array of folder types.</param> /// <param name="updateType">An array of update folder types.</param> /// <param name="folderIds">An array of folder Ids.</param> /// <returns>Update folder request instance that will send to server.</returns> protected UpdateFolderType GetUpdateFolderRequest(string[] folderType, string[] updateType, FolderIdType[] folderIds) { Site.Assert.AreEqual<int>(folderType.Length, folderIds.Length, "Folder type count should equal to folder id count!"); Site.Assert.AreEqual<int>(folderType.Length, updateType.Length, "Folder type count should equal to update type count!"); // UpdateFolder request. UpdateFolderType updateFolderRequest = new UpdateFolderType(); int folderCount = folderIds.Length; // Set the request's folder id field to Custom Folder's folder id. updateFolderRequest.FolderChanges = new FolderChangeType[folderCount]; for (int folderIndex = 0; folderIndex < folderCount; folderIndex++) { updateFolderRequest.FolderChanges[folderIndex] = new FolderChangeType(); updateFolderRequest.FolderChanges[folderIndex].Item = folderIds[folderIndex]; // Add the array of changes; in this case, a single element array. updateFolderRequest.FolderChanges[folderIndex].Updates = new FolderChangeDescriptionType[1]; switch (updateType[folderIndex]) { case "SetFolderField": { // Set the new folder name of the specific folder. SetFolderFieldType setFolderField = new SetFolderFieldType(); PathToUnindexedFieldType displayNameProp = new PathToUnindexedFieldType(); displayNameProp.FieldURI = UnindexedFieldURIType.folderDisplayName; switch (folderType[folderIndex]) { case "Folder": FolderType updatedFolder = new FolderType(); updatedFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = updatedFolder; break; case "CalendarFolder": CalendarFolderType updatedCalendarFolder = new CalendarFolderType(); updatedCalendarFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = updatedCalendarFolder; break; case "ContactsFolder": CalendarFolderType updatedContactFolder = new CalendarFolderType(); updatedContactFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = updatedContactFolder; break; case "SearchFolder": CalendarFolderType updatedSearchFolder = new CalendarFolderType(); updatedSearchFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = updatedSearchFolder; break; case "TasksFolder": CalendarFolderType updatedTaskFolder = new CalendarFolderType(); updatedTaskFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = updatedTaskFolder; break; default: FolderType generalFolder = new FolderType(); generalFolder.DisplayName = Common.GenerateResourceName(this.Site, "UpdatedFolder" + folderIndex); setFolderField.Item1 = generalFolder; break; } setFolderField.Item = displayNameProp; updateFolderRequest.FolderChanges[folderIndex].Updates[0] = setFolderField; } break; case "DeleteFolderField": { // Use DeleteFolderFieldType. DeleteFolderFieldType delFolder = new DeleteFolderFieldType(); PathToUnindexedFieldType delProp = new PathToUnindexedFieldType(); delProp.FieldURI = UnindexedFieldURIType.folderPermissionSet; delFolder.Item = delProp; updateFolderRequest.FolderChanges[folderIndex].Updates[0] = delFolder; } break; case "AppendToFolderField": { // Use AppendToFolderFieldType. AppendToFolderFieldType appendToFolderField = new AppendToFolderFieldType(); PathToUnindexedFieldType displayNameAppendTo = new PathToUnindexedFieldType(); displayNameAppendTo.FieldURI = UnindexedFieldURIType.calendarAdjacentMeetings; appendToFolderField.Item = displayNameAppendTo; FolderType folderAppendTo = new FolderType(); folderAppendTo.FolderId = folderIds[folderIndex]; appendToFolderField.Item1 = folderAppendTo; updateFolderRequest.FolderChanges[folderIndex].Updates[0] = appendToFolderField; } break; } } return updateFolderRequest; }
/// <summary> /// Set related folder properties of create folder request /// </summary> /// <param name="displayNames">Display names of folders that will be set into create folder request.</param> /// <param name="folderClasses">Folder class values of folders that will be set into create folder request.</param> /// <param name="folderPermissions">Folder permission values of folders that will be set into create folder request. </param> /// <param name="createFolderRequest">Create folder request instance that needs to set property values.</param> /// <returns>Create folder request instance that have folder property value configured.</returns> protected CreateFolderType ConfigureFolderProperty(string[] displayNames, string[] folderClasses, PermissionSetType[] folderPermissions, CreateFolderType createFolderRequest) { Site.Assert.IsNotNull(displayNames, "Display names should not be null!"); Site.Assert.IsNotNull(folderClasses, "Folder classes should not be null!"); Site.Assert.AreEqual<int>(displayNames.Length, folderClasses.Length, "Folder names count should equals to folder class value count!"); if (folderPermissions != null) { Site.Assert.AreEqual<int>(displayNames.Length, folderPermissions.Length, "Folder names count should equals to folder permission value count!"); } int folderCount = displayNames.Length; createFolderRequest.Folders = new BaseFolderType[folderCount]; for (int folderPropertyIndex = 0; folderPropertyIndex < folderCount; folderPropertyIndex++) { string folderResourceName = Common.GenerateResourceName(this.Site, displayNames[folderPropertyIndex]); if (folderClasses[folderPropertyIndex] == "IPF.Appointment") { CalendarFolderType calendarFolder = new CalendarFolderType(); calendarFolder.DisplayName = folderResourceName; createFolderRequest.Folders[folderPropertyIndex] = calendarFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Contact") { ContactsFolderType contactFolder = new ContactsFolderType(); contactFolder.DisplayName = folderResourceName; if (folderPermissions != null) { contactFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = contactFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Task") { TasksFolderType taskFolder = new TasksFolderType(); taskFolder.DisplayName = folderResourceName; if (folderPermissions != null) { taskFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = taskFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Search") { SearchFolderType searchFolder = new SearchFolderType(); searchFolder.DisplayName = folderResourceName; // Set search parameters. searchFolder.SearchParameters = new SearchParametersType(); searchFolder.SearchParameters.Traversal = SearchFolderTraversalType.Deep; searchFolder.SearchParameters.TraversalSpecified = true; searchFolder.SearchParameters.BaseFolderIds = new DistinguishedFolderIdType[1]; DistinguishedFolderIdType inboxType = new DistinguishedFolderIdType(); inboxType.Id = new DistinguishedFolderIdNameType(); inboxType.Id = DistinguishedFolderIdNameType.inbox; searchFolder.SearchParameters.BaseFolderIds[0] = inboxType; // Use the following search filter searchFolder.SearchParameters.Restriction = new RestrictionType(); PathToUnindexedFieldType path = new PathToUnindexedFieldType(); path.FieldURI = UnindexedFieldURIType.itemSubject; RestrictionType restriction = new RestrictionType(); ExistsType isEqual = new ExistsType(); isEqual.Item = path; restriction.Item = isEqual; searchFolder.SearchParameters.Restriction = restriction; if (folderPermissions != null) { searchFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = searchFolder; } else { // Set Display Name and Folder Class for the folder to be created. FolderType folder = new FolderType(); folder.DisplayName = folderResourceName; folder.FolderClass = folderClasses[folderPropertyIndex]; if (folderPermissions != null) { folder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = folder; } } return createFolderRequest; }