public void PublishAgendaToBoard(int agendaID) { SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite site = new SPSite(emisSiteURL)) { using (SPWeb emisWeb = site.OpenWeb(emisSiteRelativeURl)) { SPList agendaList = emisWeb.Lists["Board Agenda"]; SPQuery query = new SPQuery() { Query = string.Format(@"<Query> <Where> <Eq> <FieldRef Name='ID' /> <Value Type='Counter'>{0}</Value> </Eq> </Where> </Query>", agendaID.ToString()) }; foreach (SPListItem agenda in agendaList.GetItems(query)) { if ((agenda["ID"].ToString() == agendaID.ToString()) && (agenda["Agenda Status"].ToString() == "Ready to Publish")) { int meetingID = int.Parse(agenda["CommitteeMeeting"].ToString()); string AgendaTitle = agenda["Title"].ToString(); SPFieldUrlValue docSetHomePage = new SPFieldUrlValue(agenda["DocumentWorkspace"].ToString()); string documentWorkspaceURL = docSetHomePage.Url.Substring(0, docSetHomePage.Url.IndexOf("Shared%20Documents")); using (SPWeb documentWorkspace = site.OpenWeb(documentWorkspaceURL)) { //Now get the list holding the document set. SPList sharedDocuments = documentWorkspace.Lists[libraryNameInDocumentWorkspace]; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet sourceDocumentSet = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sharedDocuments.Items[0].Folder); //Once you have your meetingID, find the meetingWorkspace using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists["Board Meeting"]; //TODO: Get from configuration SPListItem meeting = meetingsList.GetItemById(meetingID); //Now Get the Meeting Workspace SPFieldUrlValue meetingWorkspaceURL = new SPFieldUrlValue(meeting["Workspace"].ToString()); using (SPWeb boardRootWeb = boardSite.OpenWeb()) { SPMeeting meetingSites = SPMeeting.GetMeetingInformation(boardWeb); SPWebCollection meetingWorkspaces = meetingSites.GetWorkspacesToLinkTo(false); SPWeb meetingWeb = null; foreach (SPWeb meetingWorkspace in meetingWorkspaces) { if (meetingWorkspaceURL.Url.Contains(meetingWorkspace.Url)) { meetingWeb = meetingWorkspace; break; } } SPList documentLibrary = meetingWeb.Lists["Document Library"]; meetingWeb.AllowUnsafeUpdates = true; string instanceID = "1"; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet AgendaDocSetInMeetingWorkspace = CreateDocumentSet(documentLibrary, AgendaTitle); //AgendaDocSetInMeetingWorkspace.Item.Update(); documentLibrary.Update(); //Iterate through the source Document Set and copy the files over. ContentIterator docSetIterator = new ContentIterator(); docSetIterator.ProcessFilesInFolder(sourceDocumentSet.Folder, true, new ContentIterator.FileProcessor((SPFile file) => { //documentLibrary.RootFolder.SubFolders[instanceID].Files.Add(AgendaDocSetInMeetingWorkspace.Item.Folder.Url, file.OpenBinary(), true); if (bool.Parse(file.Properties["PublishDocumentToBoard"].ToString()) == true) { CopyFile(file, AgendaDocSetInMeetingWorkspace, AgendaTitle); meetingWeb.Update(); } }), new ContentIterator.FileProcessorErrorCallout((SPFile file, Exception ex) => { //TODO: Handle the error during iteration of files return false; }) ); //Also update that particular agenda with all the pertinetn information SPList agendaListInWorkspace = meetingWeb.Lists["Agenda"]; SPQuery agendaQuery = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='AgendaID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", agendaID) }; foreach (SPListItem agendaInWorkspace in agendaListInWorkspace.GetItems(agendaQuery)) { SPFieldUrlValue docsURLValue = new SPFieldUrlValue(); string URLValue = AgendaDocSetInMeetingWorkspace.ParentList.ParentWeb.Site.Url + AgendaDocSetInMeetingWorkspace.ParentList.ParentWebUrl + "/" + AgendaDocSetInMeetingWorkspace.Item.Url; URLValue = URLValue.Replace(" ", "%20"); docsURLValue.Url = URLValue; docsURLValue.Description = "Documents"; agendaInWorkspace["Documents"] = docsURLValue; //agendaInWorkspace["Documents"] = string.Format("{0}, Documents", AgendaDocSetInMeetingWorkspace.WelcomePageUrl); agendaInWorkspace.Update(); } agenda["Agenda Status"] = "Published to Board"; agenda.Update(); meetingWeb.AllowUnsafeUpdates = false; } } } } } } } }); }
/// <summary> /// An item is being updated. /// </summary> public override void ItemUpdating(SPItemEventProperties properties) { string originalMeetingID = properties.ListItem["CommitteeMeeting"].ToString(); if (properties.AfterProperties["CommitteeMeeting"] != null) { string newMeetingID = properties.AfterProperties["CommitteeMeeting"].ToString(); string originalTitle = properties.ListItem["Title"].ToString(); string newTitle = properties.AfterProperties["Title"].ToString(); if (originalTitle != newTitle) { //Update the Emis Look Ahead List InitializeWebAppProperties(properties); // Update Look Ahead list in Emis using (PBEntitiesDataContext ctx = new PBEntitiesDataContext(emisSiteURL)) { EntityList<FutureAgendaItemsLookAheadForEmis> agendas = ctx.GetList<FutureAgendaItemsLookAheadForEmis>("Future Agenda Items"); //TODO: FILTER this list based on agenda ID var agendaInLookAheadEmis = agendas.Where(a => a.Id == properties.ListItemId).Single(); agendaInLookAheadEmis.BoardMeeting = newTitle; ctx.SubmitChanges(); } using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists[boardMeetingListName]; //While we have the boardWeb object open, Update the look ahead list in Board SPList lookAheadListInBoard = boardWeb.Lists[lookAheadListNameInBoard]; SPQuery queryForLookAheadList = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='AgendaID'/> <Value Type='Text'>{0}</Value> </Eq> </Where>", properties.ListItemId) }; foreach (SPListItem agendaInBoardLookAhead in lookAheadListInBoard.GetItems(queryForLookAheadList)) { agendaInBoardLookAhead["Board Agenda"] = newTitle; agendaInBoardLookAhead.Update(); } //Get oldMeetingWorkspace first string meetingURL = null; SPQuery queryForMeeting = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='ID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", originalMeetingID) }; foreach (SPListItem meeting in meetingsList.GetItems(queryForMeeting)) { meetingURL = meeting["Workspace"].ToString(); } SPFieldUrlValue meetingLink = new SPFieldUrlValue(meetingURL); SPMeeting meetingSites = SPMeeting.GetMeetingInformation(boardWeb); SPWebCollection meetingWorkspaces = meetingSites.GetWorkspacesToLinkTo(false); foreach (SPWeb meetingWorkspace in meetingWorkspaces) { if ((meetingLink.Url.Contains(meetingWorkspace.Url)) ) { //Now loop through the Agenda Items SPList sourceAgendaList = meetingWorkspace.Lists["Agenda"]; foreach (SPListItem agenda in sourceAgendaList.Items) { if (agenda["AgendaID"].ToString() == properties.ListItemId.ToString()) { agenda["Subject"] = newTitle; agenda.Update(); } } break; } } } //Update the Board look ahead list //Update the agenda item in the board meeting workspace } if (originalMeetingID != newMeetingID) { InitializeWebAppProperties(properties); // Get the meeting details (Meeting Title, Meeting Date) string newMeetingTitle = null; string newMeetingDate = null; string newMeetingURL = null; //Get the meeting date of the new Meeting ID using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists[boardMeetingListName]; SPQuery query = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='ID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", newMeetingID) }; foreach (SPListItem meeting in meetingsList.GetItems(query)) { newMeetingURL = meeting["Workspace"].ToString(); newMeetingTitle = meeting["Title"].ToString(); newMeetingDate = meeting["EventDate"].ToString(); } } //Before we move the meeting, ensure that this does not confict with the Bid Date if this is Procurement Resolution. if (properties.ListItem["AgendaType"].ToString() == "Procurement Resolution") { //Get the document workspace of this Agenda SPFieldUrlValue docWorkspaceURL = new SPFieldUrlValue(properties.ListItem["DocumentWorkspace"].ToString()); SPWeb documentWorkspace = null; foreach (SPWeb workspace in properties.Web.Webs) { if (workspace.Url == docWorkspaceURL.Url) { documentWorkspace = workspace; break; } } using (documentWorkspace) { //Now get the list holding the document set. SPList sharedDocuments = documentWorkspace.Lists[libraryNameInDocumentWorkspace]; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet sourceDocumentSet = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sharedDocuments.Items[0].Folder); ContentIterator docSetIterator = new ContentIterator(); docSetIterator.ProcessFilesInFolder(sourceDocumentSet.Folder, true, new ContentIterator.FileProcessor((SPFile file) => { //Check if this is a Procurement Resolution if (file.Item.ContentType.Name == "Procurement Resolution") { if (!string.IsNullOrEmpty(file.Properties["ContractBidDate"].ToString())) { DateTime contractBidDate = DateTime.Parse(file.Properties["ContractBidDate"].ToString()); DateTime meetingDate = DateTime.Parse(newMeetingDate); if (meetingDate > contractBidDate) { properties.ErrorMessage = "Agenda cannot be moved to this meeting because the bid date specified for this Procurment Resolution is earlier than the new board meeting date"; properties.Status = SPEventReceiverStatus.CancelWithError; properties.Cancel = true; } } } }), new ContentIterator.FileProcessorErrorCallout((SPFile file, Exception ex) => { //TODO: Handle the error during iteration of files return false; }) ); } } if (properties.Cancel != true) { SPListItem agendaItem = properties.ListItem; this.EventFiringEnabled = false; agendaItem["MeetingTitle"] = newMeetingTitle; agendaItem["MeetingDate"] = newMeetingDate; agendaItem.SystemUpdate(false); //agendaItem.Update(); this.EventFiringEnabled = true; using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists[boardMeetingListName]; //While we have the boardWeb object open, Update the look ahead list in Board SPList lookAheadListInBoard = boardWeb.Lists[lookAheadListNameInBoard]; SPQuery queryForLookAheadList = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='AgendaID'/> <Value Type='Text'>{0}</Value> </Eq> </Where>", properties.ListItemId) }; foreach (SPListItem agendaInEmisLookAhead in lookAheadListInBoard.GetItems(queryForLookAheadList)) { agendaInEmisLookAhead["Meeting Date"] = newMeetingDate; agendaInEmisLookAhead["Meeting Workspace"] = newMeetingURL; agendaInEmisLookAhead.Update(); //Also Check the Agenda Status. If 'Published To Board', then move document set to new Meeting Workspace if (agendaInEmisLookAhead["Agenda Status"].ToString() == "Published to Board") { //Get oldMeetingWorkspace first string oldMeetingURL = null; SPQuery queryForOldMeeting = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='ID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", originalMeetingID) }; foreach (SPListItem meeting in meetingsList.GetItems(queryForOldMeeting)) { oldMeetingURL = meeting["Workspace"].ToString(); } SPFieldUrlValue oldMeetingLink = new SPFieldUrlValue(oldMeetingURL); SPFieldUrlValue newMeetingLink = new SPFieldUrlValue(newMeetingURL); SPWeb oldMeetingWorkspace = null; SPWeb newMeetingWorkspace = null; SPMeeting meetingSites = SPMeeting.GetMeetingInformation(boardWeb); SPWebCollection meetingWorkspaces = meetingSites.GetWorkspacesToLinkTo(false); bool oldMeetingWorkspaceFound = false; bool newMeetingWorkspaceFound = false; foreach (SPWeb meetingWorkspace in meetingWorkspaces) { if ((oldMeetingLink.Url.Contains(meetingWorkspace.Url)) && (!oldMeetingWorkspaceFound)) { oldMeetingWorkspace = meetingWorkspace; oldMeetingWorkspaceFound = true; if ((oldMeetingWorkspaceFound) && (newMeetingWorkspaceFound)) break; } if ((newMeetingLink.Url.Contains(meetingWorkspace.Url)) && (!newMeetingWorkspaceFound)) { newMeetingWorkspace = meetingWorkspace; newMeetingWorkspaceFound = true; if ((oldMeetingWorkspaceFound) && (newMeetingWorkspaceFound)) break; } } //Get the document Set Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet sourceDocumentSet; //= Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sharedDocuments.Items[0].Folder); SPList sourceDocumentLibrary = oldMeetingWorkspace.Lists["Document Library"]; string destinationDocumentSetURL = null; foreach (SPListItem sourceDoc in sourceDocumentLibrary.Items) { //If the title of the item being moved matches the name of the Document Set, its our Document Set List Item. if (sourceDoc["Name"].ToString() == properties.ListItem.Title) { SPList destinationDocumentLibrary = newMeetingWorkspace.Lists["Document Library"]; //Get the source Document Set. sourceDocumentSet = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sourceDocumentLibrary.Items[sourceDoc.UniqueId].Folder); newMeetingWorkspace.AllowUnsafeUpdates = true; oldMeetingWorkspace.AllowUnsafeUpdates = true; //Create new Document Set in new meeting workspace Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet destinationDocumentSet = CreateDocumentSet(destinationDocumentLibrary, properties.ListItem.Title); ContentIterator docSetIterator = new ContentIterator(); docSetIterator.ProcessFilesInFolder(sourceDocumentSet.Folder, true, new ContentIterator.FileProcessor((SPFile file) => { CopyFile(file, destinationDocumentSet); newMeetingWorkspace.Update(); }), new ContentIterator.FileProcessorErrorCallout((SPFile file, Exception ex) => { //TODO: Handle the error during iteration of files return false; }) ); destinationDocumentSetURL = destinationDocumentSet.ParentList.ParentWeb.Site.Url + destinationDocumentSet.ParentList.ParentWebUrl + "/" + destinationDocumentSet.Item.Url; //Delete the document set from the source document library. sourceDocumentLibrary.Items.DeleteItemById(sourceDoc.ID); } } //Now loop through the Agenda Items SPList sourceAgendaList = oldMeetingWorkspace.Lists["Agenda"]; foreach (SPListItem agenda in sourceAgendaList.Items) { if (agenda["AgendaID"].ToString() == properties.ListItemId.ToString()) { SPList destinationAgendaList = newMeetingWorkspace.Lists["Agenda"]; SPListItem movedAgenda = destinationAgendaList.Items.Add(); movedAgenda["Subject"] = agenda["Subject"].ToString(); if (agenda["Owner"] != null) { movedAgenda["Owner"] = agenda["Owner"].ToString(); } if (agenda["Time"] != null) { movedAgenda["Time"] = agenda["Time"].ToString(); } string sponsorValue = agenda["Sponsor"].ToString(); SPFieldUser userField = sourceAgendaList.Fields.GetFieldByInternalName("Sponsor") as SPFieldUser; SPFieldUserValue itemValue = (SPFieldUserValue)userField.GetFieldValue(sponsorValue); SPUser sponsor = itemValue.User; movedAgenda["Sponsor"] = sponsor; if (agenda["Office"] != null) { movedAgenda["Office"] = agenda["Office"].ToString(); } if (agenda["Documents"] != null) { SPFieldUrlValue docsURLValue = new SPFieldUrlValue(); destinationDocumentSetURL = destinationDocumentSetURL.Replace(" ", "%20"); docsURLValue.Url = destinationDocumentSetURL; docsURLValue.Description = "Documents"; movedAgenda["Documents"] = docsURLValue; } movedAgenda.Update(); sourceAgendaList.Items.DeleteItemById(agenda.ID); } } newMeetingWorkspace.AllowUnsafeUpdates = false; oldMeetingWorkspace.AllowUnsafeUpdates = false; } } } // Update Look Ahead list in Emis using (PBEntitiesDataContext ctx = new PBEntitiesDataContext(emisSiteURL)) { EntityList<FutureAgendaItemsLookAheadForEmis> agendas = ctx.GetList<FutureAgendaItemsLookAheadForEmis>("Future Agenda Items"); //TODO: FILTER this list based on agenda ID var agendaInLookAheadEmis = agendas.Where(a => a.Id == properties.ListItemId).Single(); agendaInLookAheadEmis.BoardMeeting = newMeetingTitle; agendaInLookAheadEmis.CommitteeMeetingID = newMeetingID; agendaInLookAheadEmis.MeetingDate = DateTime.Parse(newMeetingDate); ctx.SubmitChanges(); } } } } //base.ItemUpdating(properties); }
public DiffResultInstance Diff(SPFolderInstance targetFolder, object recursive) { if (targetFolder == null) { throw new JavaScriptException(Engine, "Error", "Target Folder must be specified."); } var bRecurse = true; if (recursive != Undefined.Value && recursive != Null.Value && recursive != null) { bRecurse = TypeConverter.ToBoolean(recursive); } var sourceFolderInfo = new List <DiffInfoInstance>(); var targetFolderInfo = new List <DiffInfoInstance>(); var itemsIterator = new ContentIterator(); itemsIterator.ProcessFilesInFolder(m_folder, bRecurse, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } sourceFolderInfo.Add(fileInfo); }, null); itemsIterator.ProcessFilesInFolder(targetFolder.Folder, bRecurse, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(targetFolder.Folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } targetFolderInfo.Add(fileInfo); }, null); var result = new DiffResultInstance(Engine); result.Process(sourceFolderInfo, targetFolderInfo); return(result); }
public DiffResultInstance DiffWithZip(object target) { byte[] zipBytes; if (target is Base64EncodedByteArrayInstance) { //Create the excel document instance from a byte array. var byteArray = target as Base64EncodedByteArrayInstance; zipBytes = byteArray.Data; } else { var targetUrl = TypeConverter.ToString(target); if (Uri.IsWellFormedUriString(targetUrl, UriKind.Relative)) { targetUrl = SPUtility.ConcatUrls(SPBaristaContext.Current.Web.Url, targetUrl); } SPFile file; if (SPHelper.TryGetSPFile(targetUrl, out file)) { zipBytes = file.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); } else { throw new JavaScriptException(Engine, "Error", "A file was not found in the specified location: " + targetUrl); } } var sourceFolderInfo = new List <DiffInfoInstance>(); var targetFolderInfo = new List <DiffInfoInstance>(); var itemsIterator = new ContentIterator(); itemsIterator.ProcessFilesInFolder(m_folder, true, spFile => { var fileInfo = new DiffInfoInstance(Engine) { Url = spFile.Url.ReplaceFirstOccurenceIgnoreCase(m_folder.Url, ""), TimeLastModified = JurassicHelper.ToDateInstance(Engine, spFile.TimeLastModified) }; var fileBytes = spFile.OpenBinary(SPOpenBinaryOptions.SkipVirusScan); using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(fileBytes)); } sourceFolderInfo.Add(fileInfo); }, null); using (var ms = new MemoryStream(zipBytes)) { using (var zf = new ZipFile(ms)) { foreach (ZipEntry ze in zf) { if (ze.IsDirectory) { continue; } var fileInfo = new DiffInfoInstance(Engine) { Url = "/" + ze.Name, TimeLastModified = JurassicHelper.ToDateInstance(Engine, ze.DateTime) }; using (var zs = zf.GetInputStream(ze)) { using (var md5 = MD5.Create()) { fileInfo.Hash = Convert.ToBase64String(md5.ComputeHash(zs)); } } targetFolderInfo.Add(fileInfo); } } } var result = new DiffResultInstance(Engine); result.Process(sourceFolderInfo, targetFolderInfo); return(result); }
/// <summary> /// An item is being updated. /// </summary> public override void ItemUpdating(SPItemEventProperties properties) { SPSecurity.RunWithElevatedPrivileges(delegate() { string originalMeetingID = properties.ListItem["CommitteeMeeting"].ToString(); if (properties.AfterProperties["CommitteeMeeting"] != null) { string newMeetingID = properties.AfterProperties["CommitteeMeeting"].ToString(); string originalTitle = properties.ListItem["Title"].ToString(); string newTitle = properties.AfterProperties["Title"].ToString(); if (originalMeetingID != newMeetingID) { InitializeWebAppProperties(properties); // Get the meeting details (Meeting Title, Meeting Date) string newMeetingTitle = null; string newMeetingDate = null; //Get the meeting date of the new Meeting ID using (SPSite boardSite = new SPSite(boardSiteURL)) using (SPWeb boardWeb = boardSite.OpenWeb()) { SPList meetingsList = boardWeb.Lists[boardMeetingListName]; SPQuery query = new SPQuery() { Query = string.Format(@"<Where> <Eq> <FieldRef Name='ID'/> <Value Type='Number'>{0}</Value> </Eq> </Where>", newMeetingID) }; foreach (SPListItem meeting in meetingsList.GetItems(query)) { newMeetingTitle = meeting["Title"].ToString(); newMeetingDate = meeting["EventDate"].ToString(); } } //Before we move the meeting, ensure that this does not confict with the Bid Date if this is Procurement Resolution. if (properties.ListItem["AgendaType"].ToString() == "Procurement Resolution") { //Get the document workspace of this Agenda string documentWorkspaceLink = properties.ListItem["DocumentWorkspace"].ToString(); documentWorkspaceLink = documentWorkspaceLink.Substring(0, documentWorkspaceLink.IndexOf("Shared Documents")); SPFieldUrlValue docWorkspaceURL = new SPFieldUrlValue(documentWorkspaceLink); SPWeb documentWorkspace = null; foreach (SPWeb workspace in properties.Web.Webs) { if (docWorkspaceURL.Url.Contains(workspace.Url)) { documentWorkspace = workspace; break; } } using (documentWorkspace) { //Now get the list holding the document set. SPList sharedDocuments = documentWorkspace.Lists[libraryNameInDocumentWorkspace]; Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet sourceDocumentSet = Microsoft.Office.DocumentManagement.DocumentSets.DocumentSet.GetDocumentSet(sharedDocuments.Items[0].Folder); ContentIterator docSetIterator = new ContentIterator(); docSetIterator.ProcessFilesInFolder(sourceDocumentSet.Folder, true, new ContentIterator.FileProcessor((SPFile file) => { //Check if this is a Procurement Resolution if (file.Item.ContentType.Name == "Procurement Resolution") { if (!string.IsNullOrEmpty(file.Properties["ContractBidDate"].ToString())) { DateTime contractBidDate = DateTime.Parse(file.Properties["ContractBidDate"].ToString()); DateTime meetingDate = DateTime.Parse(newMeetingDate); if (meetingDate > contractBidDate) { properties.ErrorMessage = "Agenda cannot be moved to this meeting because the bid date specified for this Procurment Resolution is earlier than the new board meeting date"; properties.Status = SPEventReceiverStatus.CancelWithError; properties.Cancel = true; } } } }), new ContentIterator.FileProcessorErrorCallout((SPFile file, Exception ex) => { //TODO: Handle the error during iteration of files return false; }) ); } } if (properties.Cancel != true) { SPListItem agendaItem = properties.ListItem; this.EventFiringEnabled = false; agendaItem["MeetingTitle"] = newMeetingTitle; agendaItem["MeetingDate"] = newMeetingDate; agendaItem.SystemUpdate(false); //agendaItem.Update(); this.EventFiringEnabled = true; } } } //base.ItemUpdating(properties); }); }