/// <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; }