private static bool IsFeatureOnWeb(Guid FeatureID, ClientContext clientContext) { bool isFeatureAvailable = false; try { FeatureCollection features = clientContext.Web.Features; clientContext.Load(features); clientContext.ExecuteQuery(); Feature feature = features.GetById(FeatureID); if (feature != null) { clientContext.Load(feature); clientContext.ExecuteQuery(); if (feature.DefinitionId != null) { isFeatureAvailable = true; } } } catch (Exception ex) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[IsFeatureOnWeb] Exception Message: " + ex.Message); System.Console.ResetColor(); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "AddWebPart", ex.Message, ex.ToString(), "IsFeatureOnWeb()", ex.GetType().ToString()); } return(isFeatureAvailable); }
//sourceWebPartId - Used to update the content of the wikipage with new web part id public static bool AddWebPartt(Web web, string serverRelativePageUrl, WebPartEntity webPartEntity, string sourceWebPartId = "") { bool isWebPartAdded = false; try { Microsoft.SharePoint.Client.File webPartPage = web.GetFileByServerRelativeUrl(serverRelativePageUrl); web.Context.Load(webPartPage); web.Context.ExecuteQueryRetry(); LimitedWebPartManager webPartManager = webPartPage.GetLimitedWebPartManager(PersonalizationScope.Shared); WebPartDefinition importedWebPart = webPartManager.ImportWebPart(webPartEntity.WebPartXml); WebPartDefinition webPart = webPartManager.AddWebPart(importedWebPart.WebPart, webPartEntity.WebPartZone, webPartEntity.WebPartIndex); web.Context.Load(webPart); web.Context.ExecuteQuery(); CheckForWikiFieldOrPublishingPageContentAndUpdate(webPart, web, webPartPage, sourceWebPartId); isWebPartAdded = true; } catch (Exception ex) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[AddWebPartt] Exception Message: " + ex.Message); System.Console.ResetColor(); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, web.Url, "AddWebPart", ex.Message, ex.ToString(), "AddWebPartt()", ex.GetType().ToString()); } return(isWebPartAdded); }
public static string GetWebPartShortTypeName(string webPartType) { string _webPartType = string.Empty; try { string[] tempWebPartTypeName = webPartType.Split(','); string[] tempWebPartType = tempWebPartTypeName[0].Split('.'); if (tempWebPartType.Length == 1) { _webPartType = tempWebPartType[0]; } else { _webPartType = tempWebPartType[tempWebPartType.Length - 1]; } } catch (Exception ex) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[GetWebPartShortTypeName] Exception Message: " + ex.Message); System.Console.ResetColor(); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "GetWebPartShortTypeName", ex.Message, ex.ToString(), "GetWebPartShortTypeName()", ex.GetType().ToString()); } return(_webPartType); }
public static void TransformWebPart_UsingCSV(string usageFileName, string sourceWebPartType, string targetWebPartFileName, string targetWebPartXmlFilePath, string outPutDirectory) { string exceptionCommentsInfo1 = string.Empty; try { WebPart_Initialization(outputPath); string sourceWebPartXmlFilesDir = outPutDirectory + @"\" + Constants.SOURCE_WEBPART_XML_DIR; if (!System.IO.Directory.Exists(sourceWebPartXmlFilesDir)) { System.IO.Directory.CreateDirectory(sourceWebPartXmlFilesDir); } //ReplaceWebPart_UsingCSV string targetWebPartXmlsDir = outPutDirectory + @"\" + Constants.TARGET_WEBPART_XML_DIR; ReplaceWebPart_UsingCSV(sourceWebPartType, targetWebPartXmlFilePath, targetWebPartFileName, targetWebPartXmlsDir, usageFileName, outPutDirectory); } catch (Exception ex) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[TransformWebPart_UsingCSV] Exception Message: " + ex.Message); System.Console.ResetColor(); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "ReplaceWebPart", ex.Message, ex.ToString(), "TransformWebPart_UsingCSV()", ex.GetType().ToString(), exceptionCommentsInfo1); } }
private static void ReadWebPartUsageCSV(string sourceWebPartType, string usageFilePath, string outPutFolder, out IEnumerable <WebPartDiscoveryInput> objWPDInput) { string exceptionCommentsInfo1 = string.Empty; Logger.LogInfoMessage("[ReadWebPartUsageCSV] [START] Calling function ImportCsv.ReadMatchingColumns<WebPartDiscoveryInput>"); objWPDInput = null; objWPDInput = ImportCSV.ReadMatchingColumns <WebPartDiscoveryInput>(usageFilePath, Constants.CsvDelimeter); Logger.LogInfoMessage("[ReadWebPartUsageCSV] [END] Read all the WebParts Usage Details from Discovery Usage File and saved in List - out IEnumerable<WebPartDiscoveryInput> objWPDInput, for processing."); try { if (objWPDInput.Any()) { Logger.LogInfoMessage("[START] ReadWebPartUsageCSV - After Loading InputCSV "); objWPDInput = from p in objWPDInput where p.WebPartType.ToLower() == sourceWebPartType.ToLower() select p; exceptionCommentsInfo1 = objWPDInput.ToString(); Logger.LogInfoMessage("[END] ReadWebPartUsageCSV - After Loading InputCSV"); } } catch (Exception ex) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[ReadWebPartUsageCSV] Exception Message: " + ex.Message + ", Exception Comments:" + exceptionCommentsInfo1); System.Console.ResetColor(); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "ReplaceWebPart", ex.Message, ex.ToString(), "ReadWebPartUsageCSV()", ex.GetType().ToString(), exceptionCommentsInfo1); } }
public static List <SiteEntity> GetAllSites() { string url = string.Empty; try { System.Console.ForegroundColor = System.ConsoleColor.Cyan; System.Console.WriteLine("Enter any Web/Site Url from the farm for which you want all site collections report:"); System.Console.ResetColor(); url = System.Console.ReadLine(); if (string.IsNullOrEmpty(url)) { Logger.LogErrorMessage(String.Format("[GenerateSiteCollectionReport] GetAllSites() Url should not be null or empty"), true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "SiteCollectionReport", "Url should not be null or empty", "Url should not be null or empty", "GetAllSites()", "NullReferenceException", String.Format("GetAllSites() failed: Error={0}", "Url should not be null or empty")); return(null); } Logger.LogInfoMessage(String.Format("Preparing to generate report ..."), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, url)) { // Lists all site collections across all web applications... List <SiteEntity> sites = userContext.Web.SiteSearch(); return(sites); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("[GenerateSiteCollectionReport] GetAllSites() failed: Error={0}", ex.Message), true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "SiteCollectionReport", ex.Message, ex.ToString(), "GetAllSites()", ex.GetType().ToString(), String.Format("GetAllSites() failed: Error={0}", ex.Message)); return(null); } }
public static void DoWork() { string timeStamp = DateTime.Now.ToString("yyyyMMdd_hhmmss"); string setupInputFile = string.Empty; Logger.OpenLog("DeleteSetupFiles", timeStamp); //if (!ShowInformation()) // return; if (!ReadInputFile(ref setupInputFile)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("Setup Files input file is not valid or available. So, Operation aborted!"); Logger.LogErrorMessage("Please enter path like: E.g. C:\\<Working Directory>\\<InputFile>.csv"); System.Console.ResetColor(); return; } string inputFileSpec = setupInputFile; if (System.IO.File.Exists(inputFileSpec)) { Logger.LogInfoMessage(String.Format("Scan starting {0}", DateTime.Now.ToString()), true); IEnumerable <MissingSetupFilesInput> objInputMissingSetupFiles = ImportCSV.ReadMatchingColumns <MissingSetupFilesInput>(inputFileSpec, Constants.CsvDelimeter); if (objInputMissingSetupFiles != null && objInputMissingSetupFiles.Any()) { try { string csvFile = Environment.CurrentDirectory + @"\" + Constants.DeleteSetupFileStatus + timeStamp + Constants.CSVExtension; if (System.IO.File.Exists(csvFile)) { System.IO.File.Delete(csvFile); } Logger.LogInfoMessage(String.Format("Preparing to delete a total of {0} files ...", objInputMissingSetupFiles.Cast <Object>().Count()), true); foreach (MissingSetupFilesInput missingFile in objInputMissingSetupFiles) { DeleteMissingFile(missingFile, csvFile); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("[DeleteSetupFiles: DoWork] failed: Error={0}", ex.Message), true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "SetupFile", ex.Message, ex.ToString(), "DoWork", ex.GetType().ToString(), "Exception occured while reading input file"); } } else { Logger.LogInfoMessage("There is nothing to delete from the '" + inputFileSpec + "' File ", true); } Logger.LogInfoMessage(String.Format("Scan Completed {0}", DateTime.Now.ToString()), true); } else { Logger.LogErrorMessage(String.Format("[DeleteSetupFiles: DoWork]: Input file {0} is not available", inputFileSpec), true); } Logger.CloseLog(); }
public static void DoWork() { string timeStamp = DateTime.Now.ToString("yyyyMMdd_hhmmss"); csvOutputFileSpec = Environment.CurrentDirectory + "\\ManageMaintenanceBanners-" + timeStamp + Constants.CSVExtension; csvOutputFileHasHeader = System.IO.File.Exists(csvOutputFileSpec); Logger.OpenLog("ManageMaintenanceBanners", timeStamp); Logger.LogInfoMessage(String.Format("Scan starting {0}", DateTime.Now.ToString()), true); BannerOperation operationToPerform = BannerOperation.None; if (!ReadInputOptions(ref operationToPerform)) { System.Console.ForegroundColor = System.ConsoleColor.Yellow; Logger.LogInfoMessage("Operation aborted by user.", true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } string cdnAbsoluteUrl = String.Empty; if (operationToPerform == BannerOperation.Add) { if (!ReadCdnUrl(ref cdnAbsoluteUrl)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("CDN Library Folder Url was not specified."); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } } string inputFileSpec = Environment.CurrentDirectory + "\\" + Constants.UsageReport_SitesInputFileName; if (!System.IO.File.Exists(inputFileSpec)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file {0} is not available", inputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } string[] siteUrls = Helper.ReadInputFile(inputFileSpec, false); Logger.LogInfoMessage(String.Format("Preparing to process a total of {0} sites ...", siteUrls.Length), true); foreach (string siteUrl in siteUrls) { ProcessSite(siteUrl, operationToPerform, cdnAbsoluteUrl); } Logger.LogInfoMessage(String.Format("Scan completed {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); }
private static bool RemoveFeatureFromSite(ClientContext userContext, Guid featureDefinitionId) { try { FeatureCollection features = userContext.Site.Features; ClearObjectData(features); userContext.Load(features); userContext.ExecuteQuery(); //DumpFeatures(features, "site"); Feature targetFeature = features.GetById(featureDefinitionId); targetFeature.EnsureProperties(f => f.DefinitionId); if (targetFeature == null || !targetFeature.IsPropertyAvailable("DefinitionId") || targetFeature.ServerObjectIsNull.Value) { Logger.LogInfoMessage(String.Format("Could not delete Feature {0}; feature not found in site.Features", featureDefinitionId.ToString()), false); return(false); } features.Remove(featureDefinitionId, true); // commit the changes userContext.Load(features); userContext.ExecuteQuery(); return(true); } catch (Exception ex) { Logger.LogErrorMessage(String.Format("[DeleteMissingFeatures: RemoveFeatureFromSite] failed for Feature {0} on site {1}; Error={2}", featureDefinitionId.ToString(), userContext.Site.Url, ex.Message), true); ExceptionCsv.WriteException(Constants.NotApplicable, userContext.Site.Url, Constants.NotApplicable, "Feature", ex.Message, ex.ToString(), "RemoveFeatureFromSite", ex.GetType().ToString(), String.Format("RemoveFeatureFromSite() failed for Feature {0} on site {1}", featureDefinitionId.ToString(), userContext.Site.Url)); return(false); } }
/// <summary> /// Executes all site collection-level reporting. /// Performs special processing for the site collection, then processes all child webs. /// </summary> /// <param name="siteUrl">URL of the site collection to process</param> private static void ProcessSite(string siteUrl) { try { Logger.LogInfoMessage(String.Format("Scanning Site: {0} ...", siteUrl), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, siteUrl)) { Site site = userContext.Site; Web root = userContext.Site.RootWeb; userContext.Load(site); userContext.Load(root); userContext.ExecuteQuery(); // Execute processing that is unique to the site and its root web // Execute processing that is common to all webs (including the root web). ProcessWeb(root.Url, true); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("ProcessSite() failed for {0}: Error={1}", siteUrl, ex.Message), false); } }
/// <summary> /// Deletes the specified file from the specified web. /// </summary> /// <param name="web">this MUST be the web that contains the file to delete</param> /// <param name="serverRelativeFilePath">the SERVER-relative path to the file ("/sites/site/web/lib/folder/file.ext")</param> public static void DeleteFileByServerRelativeUrl(Web web, string serverRelativeFilePath) { try { Logger.LogInfoMessage(String.Format("Deleting File: {0} ...", serverRelativeFilePath), false); File targetFile = web.GetFileByServerRelativeUrl(serverRelativeFilePath); web.Context.Load(targetFile); web.Context.ExecuteQuery(); if (targetFile.ServerObjectIsNull == false) { targetFile.DeleteObject(); web.Context.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("Deleted File: {0}", serverRelativeFilePath), false); } else { Logger.LogErrorMessage(String.Format("DeleteFileByServerRelativeUrl() failed for {0}: Error={1}", serverRelativeFilePath, "File was not Found."), false); } } catch (ServerException ex) { Logger.LogErrorMessage(String.Format("DeleteFileByServerRelativeUrl() failed for {0}: Error={1}", serverRelativeFilePath, ex.Message), false); } catch (Exception ex) { Logger.LogErrorMessage(String.Format("DeleteFileByServerRelativeUrl() failed for {0}: Error={1}", serverRelativeFilePath, ex.Message), false); } }
public static void DeleteListByUrl(Web web, string webRelativeUrl) { try { Logger.LogInfoMessage(String.Format("Deleting List {0} from {1} ...", webRelativeUrl, web.Url), false); List targetList = web.GetListByUrl(webRelativeUrl); if (targetList != null && targetList.ServerObjectIsNull == false) { targetList.DeleteObject(); web.Context.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("Deleted List {0} from {1}", webRelativeUrl, web.Url), false); } else { Logger.LogErrorMessage(String.Format("DeleteListByUrl() failed for {0}: Error=List {1} was not found", web.Url, webRelativeUrl), false); } } catch (ServerException ex) { if (ex.ServerErrorTypeName.Equals("System.IO.FileNotFoundException", StringComparison.InvariantCultureIgnoreCase) == false) { Logger.LogErrorMessage(String.Format("DeleteListByUrl() failed for {0}: Error={1}", web.Url, ex.Message), false); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("DeleteListByUrl() failed for {0}: Error={1}", web.Url, ex.Message), false); } }
public static void DoWork() { Logger.OpenLog("DeleteMissingEventReceivers"); Logger.LogInfoMessage(String.Format("Scan starting {0}", DateTime.Now.ToString()), true); string inputFileSpec = Environment.CurrentDirectory + "\\" + Constants.MissingEventReceiversInputFileName; //Read Input file IEnumerable <MissingEventReceiversInput> objInputMissingEventReceivers = ImportCSV.ReadMatchingColumns <MissingEventReceiversInput>(inputFileSpec, Constants.CsvDelimeter); if (objInputMissingEventReceivers != null) { try { Logger.LogInfoMessage(String.Format("Preparing to delete a total of {0} event receivers ...", objInputMissingEventReceivers.Cast <Object>().Count()), true); foreach (MissingEventReceiversInput MissingEventReceiver in objInputMissingEventReceivers) { DeleteMissingEventReceiver(MissingEventReceiver); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("DeleteMissingEventReceivers() failed: Error={0}", ex.Message), true); } Logger.LogInfoMessage(String.Format("Scan completed {0}", DateTime.Now.ToString()), true); } else { Logger.LogInfoMessage("There is nothing to delete from the '" + inputFileSpec + "' File ", true); } Logger.CloseLog(); }
private static bool RemoveFeatureFromWeb(ClientContext userContext, Guid featureDefinitionId) { try { FeatureCollection features = userContext.Web.Features; ClearObjectData(features); userContext.Load(features); userContext.ExecuteQuery(); //DumpFeatures(features, "web"); Feature targetFeature = features.GetById(featureDefinitionId); targetFeature.EnsureProperties(f => f.DefinitionId); if (targetFeature == null || !targetFeature.IsPropertyAvailable("DefinitionId") || targetFeature.ServerObjectIsNull.Value) { Logger.LogInfoMessage(String.Format("Could not delete Feature {0}; feature not found in web.Features", featureDefinitionId.ToString()), false); return(false); } features.Remove(featureDefinitionId, true); // commit the changes userContext.Load(features); userContext.ExecuteQuery(); return(true); } catch (Exception ex) { Logger.LogErrorMessage(String.Format("RemoveFeatureFromWeb() failed for Feature {0} on web {1}; Error={2}", featureDefinitionId.ToString(), userContext.Web.Url, ex.Message), false); return(false); } }
/// <summary> /// Executes all site collection-level reporting. /// Performs special processing for the site collection, then processes all child webs. /// </summary> /// <param name="siteUrl">URL of the site collection to process</param> private static void ProcessSite(string siteUrl, string NonDefMasterFileName) { try { Logger.LogInfoMessage(String.Format("Scanning Site: {0} ...", siteUrl), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, siteUrl)) { Site site = userContext.Site; Web root = userContext.Site.RootWeb; userContext.Load(site); userContext.Load(root); userContext.ExecuteQuery(); // Execute processing that is unique to the site and its root web // Execute processing that is common to all webs (including the root web). ProcessWeb(root.Url, true, siteUrl, NonDefMasterFileName); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("[GenerateNonDefaultMasterPageUsageReport] ProcessSite() failed for {0}: Error={1}", siteUrl, ex.Message), true); ExceptionCsv.WriteException(Constants.NotApplicable, siteUrl, Constants.NotApplicable, "NonDefaultMastePageUsageReport", ex.Message, ex.ToString(), "ProcessSite()", ex.GetType().ToString(), String.Format("ProcessSite() failed for {0}: Error={1}", siteUrl, ex.Message)); } }
/// <summary> /// Executes all web-level transformations related to the custom solution. /// Performs special processing for the root web, then recurses through all child webs. /// </summary> /// <param name="webUrl">Url of web to process</param> /// <param name="isRoot">True if this is the root web</param> private static void ProcessWeb(string webUrl, bool isRoot, List <ContentTypeSpec> contentTypes, List <SiteColumnSpec> siteColumns) { try { Logger.LogInfoMessage(String.Format("Scanning Web: {0} ...", webUrl), false); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, webUrl)) { Web web = userContext.Web; userContext.Load(web); userContext.ExecuteQuery(); ScanWeb(web, contentTypes, siteColumns); ScanLists(web, contentTypes, siteColumns); // Process all child webs web.Context.Load(web.Webs); web.Context.ExecuteQuery(); foreach (Web childWeb in web.Webs) { ProcessWeb(childWeb.Url, false, contentTypes, siteColumns); } } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("ProcessWeb() failed for {0}: Error={1}", webUrl, ex.Message), false); } }
private static string GetWebPartID(string webPartID) { string _webPartID = string.Empty; try { string[] tempStr = webPartID.Split('_'); if (tempStr.Length > 5) { _webPartID = webPartID.Remove(0, tempStr[0].Length + 1).Replace('_', '-'); } else { _webPartID = webPartID.Replace('_', '-'); } } catch (Exception ex) { Logger.LogErrorMessage("[DeleteMissingWebparts: GetWebPartID]. Exception Message: " + ex.Message, true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "Webpart", ex.Message, ex.ToString(), "GetWebPartID", ex.GetType().ToString(), Constants.NotApplicable); } return(_webPartID); }
/// <summary> /// Executes all web-level transformations related to the custom solution. /// Performs special processing for the root web, then recurses through all child webs. /// </summary> /// <param name="webUrl">Url of web to process</param> /// <param name="isRoot">True if this is the root web</param> private static void ProcessWeb(string webUrl, bool isRoot, List <ContentTypeSpec> contentTypes, List <SiteColumnSpec> siteColumns, string siteURL, string CTCFFileName) { try { Logger.LogInfoMessage(String.Format("Scanning Web: {0} ...", webUrl), false); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, webUrl)) { Web web = userContext.Web; userContext.Load(web); userContext.ExecuteQuery(); ScanWeb(web, contentTypes, siteColumns, siteURL, CTCFFileName); ScanLists(web, contentTypes, siteColumns, siteURL, CTCFFileName); // Process all child webs web.Context.Load(web.Webs); web.Context.ExecuteQuery(); foreach (Web childWeb in web.Webs) { if (childWeb.Url.ToLower().Contains(siteURL.ToLower())) { ProcessWeb(childWeb.Url, false, contentTypes, siteColumns, siteURL, CTCFFileName); } } } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("[GenerateColumnORFieldAndTypeUsageReport] ProcessWeb() failed for {0}: Error={1}", webUrl, ex.Message), false); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, webUrl, "ColumnORFieldAndTypeUsageReport", ex.Message, ex.ToString(), "ProcessWeb()", ex.GetType().ToString(), String.Format("ProcessWeb() failed for {0}: Error={1}", webUrl, ex.Message)); } }
private static void ReadWebPartUsageCSV(string sourceWebPartType, string usageFilePath, out IEnumerable <WebpartInput> objWPDInput) { objWPDInput = null; objWPDInput = ImportCSV.ReadMatchingColumns <WebpartInput>(usageFilePath, Constants.CsvDelimeter); try { if (objWPDInput.Any()) { objWPDInput = from p in objWPDInput where p.WebPartType.Equals(sourceWebPartType, StringComparison.OrdinalIgnoreCase) select p; if (objWPDInput.Any()) { Logger.LogInfoMessage("Number of Webparts found with WebpartType '" + sourceWebPartType + "' are " + objWPDInput.Count()); } else { Logger.LogInfoMessage("No Webparts found with WebpartType '" + sourceWebPartType + "'"); } } } catch (Exception ex) { Logger.LogErrorMessage("[DeleteMissingWebparts: ReadWebPartUsageCSV]. Exception Message: " + ex.Message + ", Exception Comments: Exception occured while rading input file ", true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "Webpart", ex.Message, ex.ToString(), "ReadWebPartUsageCSV", ex.GetType().ToString(), "Exception occured while rading input file"); } }
private static void DeleteWebEventReceiver(string webUrl, string eventName, string assemblyName) { try { Logger.LogInfoMessage(String.Format("Deleting WEB Event Receiver [{0}] from web {1} ...", eventName, webUrl), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, webUrl)) { Web web = userContext.Web; EventReceiverDefinitionCollection receivers = web.EventReceivers; userContext.Load(web); userContext.Load(receivers); userContext.ExecuteQuery(); foreach (EventReceiverDefinition receiver in receivers) { if (receiver.ReceiverName.Equals(eventName, StringComparison.InvariantCultureIgnoreCase) && receiver.ReceiverAssembly.Equals(assemblyName, StringComparison.InvariantCultureIgnoreCase) ) { receiver.DeleteObject(); userContext.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("Deleted WEB Event Receiver [{0}] from web {1}", eventName, webUrl), false); return; } } Logger.LogErrorMessage(String.Format("DeleteWebEventReceiver() failed for Event Receiver [{0}] on web {1}; Error=Event Receiver not Found.", eventName, webUrl), false); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("DeleteWebEventReceiver() failed for Event Receiver [{0}] on web {1}; Error={2}", eventName, webUrl, ex.Message), false); } }
public static void SetMasterPages(Web web, MasterPageInfo mpi, bool isRoot) { try { Logger.LogInfoMessage(String.Format("Setting Master Pages to: {0} & {1}...", mpi.MasterPageUrl, mpi.CustomMasterPageUrl), false); Logger.LogInfoMessage(String.Format("MasterUrl (before): {0}", web.MasterUrl), false); Logger.LogInfoMessage(String.Format("CustomMasterUrl (before): {0}", web.CustomMasterUrl), false); web.Context.Load(web.AllProperties); web.Context.ExecuteQuery(); web.MasterUrl = mpi.MasterPageUrl; web.CustomMasterUrl = mpi.CustomMasterPageUrl; web.AllProperties[Constants.PropertyBagInheritMaster] = ((!isRoot && mpi.InheritMaster) ? "True" : "False"); web.AllProperties[Constants.PropertyBagInheritCustomMaster] = ((!isRoot && mpi.InheritCustomMaster) ? "True" : "False"); web.Update(); web.Context.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("MasterUrl (after): {0}", web.MasterUrl), false); Logger.LogSuccessMessage(String.Format("CustomMasterUrl (after): {0}", web.CustomMasterUrl), false); } catch (Exception ex) { Logger.LogErrorMessage(String.Format("SetMasterPages() failed for {0}: Error={1}", web.Url, ex.Message), false); } }
private static bool DeleteListEventReceiver(string webUrl, string hostId, string eventName, string assemblyName) { try { Logger.LogInfoMessage(String.Format("Deleting LIST Event Receiver [{0}] from list [{1}] on web {2} ...", eventName, hostId, webUrl), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, webUrl)) { Web web = userContext.Web; userContext.Load(web); userContext.ExecuteQuery(); //ListCollection lists = web.Lists; //userContext.Load(lists); Guid listId = new Guid(hostId); List list = web.Lists.GetById(listId); userContext.Load(list); userContext.ExecuteQuery(); if (list == null) { Logger.LogErrorMessage(String.Format("[DeleteMissingEventReceivers: DeleteListEventReceiver] failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=List not Found.", eventName, hostId, webUrl), true); return(false); } EventReceiverDefinitionCollection receivers = list.EventReceivers; userContext.Load(receivers); userContext.ExecuteQuery(); foreach (EventReceiverDefinition receiver in receivers) { if (receiver.ReceiverName.Equals(eventName, StringComparison.InvariantCultureIgnoreCase) && receiver.ReceiverAssembly.Equals(assemblyName, StringComparison.InvariantCultureIgnoreCase) ) { receiver.DeleteObject(); userContext.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("[DeleteMissingEventReceivers: DeleteListEventReceiver] Deleted LIST Event Receiver [{0}] from list [{1}] on web {2} and output file is present in the path: {3}", eventName, list.Title, webUrl, Environment.CurrentDirectory), true); return(true); } } Logger.LogErrorMessage(String.Format("[DeleteMissingEventReceivers: DeleteListEventReceiver] failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=Event Receiver not Found.", eventName, list.Title, webUrl), true); } } catch (Exception ex) { if (ex.Message.ToLower().Contains("list does not exist")) { Logger.LogErrorMessage(String.Format("[DeleteMissingEventReceivers: DeleteListEventReceiver] failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=List not Found.", eventName, hostId, webUrl), true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, webUrl, "EventReceiver", ex.Message, ex.ToString(), "DeleteListEventReceiver", ex.GetType().ToString(), String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=List not Found.", eventName, hostId, webUrl)); return(false); } Logger.LogErrorMessage(String.Format("[DeleteMissingEventReceivers: DeleteListEventReceiver] failed for Event Receiver [{0}] on list [{1}] of web {2}; Error={3}", eventName, hostId, webUrl, ex.Message), true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, webUrl, "EventReceiver", ex.Message, ex.ToString(), "DeleteListEventReceiver", ex.GetType().ToString(), String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error={3}", eventName, hostId, webUrl, ex.Message)); } return(false); }
private static bool DeleteWebPart(Web web, string serverRelativePageUrl, Guid storageKey) { bool isWebPartDeleted = false; LimitedWebPartManager limitedWebPartManager = null; try { var webPartPage = web.GetFileByServerRelativeUrl(serverRelativePageUrl); web.Context.Load(webPartPage); web.Context.ExecuteQueryRetry(); limitedWebPartManager = webPartPage.GetLimitedWebPartManager(PersonalizationScope.Shared); web.Context.Load(limitedWebPartManager.WebParts, wps => wps.Include(wp => wp.Id)); web.Context.ExecuteQueryRetry(); if (limitedWebPartManager.WebParts.Count >= 0) { foreach (WebPartDefinition webpartDef in limitedWebPartManager.WebParts) { Microsoft.SharePoint.Client.WebParts.WebPart oWebPart = null; try { oWebPart = webpartDef.WebPart; if (webpartDef.Id.Equals(storageKey)) { webpartDef.DeleteWebPart(); web.Context.ExecuteQueryRetry(); isWebPartDeleted = true; break; } } catch (Exception ex) { Logger.LogErrorMessage("[DeleteMissingWebparts: DeleteWebPart]. Exception Message: " + ex.Message + ", Exception Comments: Exception occured while deleting the webpart", true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, web.Url, "Webpart", ex.Message, ex.ToString(), "DeleteWebPart", ex.GetType().ToString(), Constants.NotApplicable); } finally { oWebPart = null; } } } } catch (Exception ex) { Logger.LogErrorMessage("[DeleteMissingWebparts: DeleteWebPart]. Exception Message: " + ex.Message + ", Exception Comments: Exception occure while fetching webparts using LimitedWebPartManager", true); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, web.Url, "Webpart", ex.Message, ex.ToString(), "DeleteWebPart", ex.GetType().ToString(), Constants.NotApplicable); } finally { limitedWebPartManager = null; } return(isWebPartDeleted); }
public static void DoWork() { string timeStamp = DateTime.Now.ToString("yyyyMMdd_hhmmss"); csvOutputFileSpec = Environment.CurrentDirectory + "\\ResetDeviceChannelMappingFiles-" + timeStamp + Constants.CSVExtension; csvOutputFileHasHeader = System.IO.File.Exists(csvOutputFileSpec); Logger.OpenLog("ResetDeviceChannelMappingFiles", timeStamp); Logger.LogInfoMessage(String.Format("Scan starting {0}", DateTime.Now.ToString()), true); string inputFileSpec = String.Empty; if (!ReadInputFile(ref inputFileSpec)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file [{0}] does not exist.", inputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } // The Locked Master Pages input file is essentially a filtered instance of the Missing Setup Files input file. IEnumerable <LockedMasterPageFilesInput> objInputLockedMasterPageFiles = ImportCSV.ReadMatchingColumns <LockedMasterPageFilesInput>(inputFileSpec, Constants.CsvDelimeter); if (objInputLockedMasterPageFiles == null || objInputLockedMasterPageFiles.Count() == 0) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file [{0}] is empty.", inputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } Logger.LogInfoMessage(String.Format("Preparing to process a total of {0} master page files ...", objInputLockedMasterPageFiles.Count()), true); try { foreach (LockedMasterPageFilesInput masterPageFile in objInputLockedMasterPageFiles) { ResetMappingFile(masterPageFile); } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("ResetDeviceChannelMappingFiles() failed: Error={0}", ex.Message), true); ExceptionCsv.WriteException( Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "MappingFile", ex.Message, ex.ToString(), "DoWork", ex.GetType().ToString(), "Exception occured while processing input file." ); } Logger.LogInfoMessage(String.Format("Scan completed {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); }
private static void ReportContentTypeUsage(Web web, List list, string targetContentTypeId, string targetContentTypeName, string siteColUrl, string CTCFFileName) { try { ContentTypeCustomFieldOutput objCTCFOutput3 = new ContentTypeCustomFieldOutput(); objCTCFOutput3.ComponentName = Constants.ContentTypes; objCTCFOutput3.ListId = list.Id.ToString(); objCTCFOutput3.ListTitle = list.Title; objCTCFOutput3.ContentTypeOrCustomFieldId = targetContentTypeId.ToString(); objCTCFOutput3.ContentTypeOrCustomFieldName = targetContentTypeName; objCTCFOutput3.WebUrl = web.Url; objCTCFOutput3.SiteCollection = siteColUrl; list.EnsureProperty(l => l.ContentTypesEnabled); if (!list.ContentTypesEnabled) { return; } ContentTypeCollection ctCol = list.ContentTypes; list.Context.Load(ctCol); list.Context.ExecuteQuery(); foreach (ContentType ct in ctCol) { try { string contentTypeId = ct.Id.StringValue; if (contentTypeId.StartsWith(targetContentTypeId, StringComparison.InvariantCultureIgnoreCase)) { if (ct.Name.Equals(targetContentTypeName, StringComparison.InvariantCultureIgnoreCase)) { Logger.LogSuccessMessage(String.Format("FOUND: Content Type [{2}] on LIST [{0}] of WEB: {1}", list.Title, web.Url, targetContentTypeName), true); FileUtility.WriteCsVintoFile(CTCFFileName, objCTCFOutput3, ref headerContentType); } else { Logger.LogSuccessMessage(String.Format("FOUND: Child Content Type [{3}] of [{2}] on LIST [{0}] of WEB: {1}", list.Title, web.Url, targetContentTypeName, ct.Name), true); FileUtility.WriteCsVintoFile(CTCFFileName, objCTCFOutput3, ref headerContentType); } } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("ReportContentTypeUsage() failed on a Content Type of LIST [{0}] of WEB {1}: Error={2}", list.Title, web.Url, ex.Message), false); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, web.Url, "ColumnORFieldAndTypeUsageReport", ex.Message, ex.ToString(), "ReportContentTypeUsage()", ex.GetType().ToString(), String.Format("ReportContentTypeUsage() failed on a Content Type of LIST [{0}] of WEB {1}: Error={2}", list.Title, web.Url, ex.Message)); } } } catch (Exception ex) { Logger.LogErrorMessage(String.Format("ReportContentTypeUsage() failed for LIST [{0}] of WEB {1}: Error={2}", list.Title, web.Url, ex.Message), false); ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, web.Url, "ColumnORFieldAndTypeUsageReport", ex.Message, ex.ToString(), "ReportContentTypeUsage()", ex.GetType().ToString(), String.Format("ReportContentTypeUsage() failed for LIST [{0}] of WEB {1}: Error={2}", list.Title, web.Url, ex.Message)); } }
public static void DoWork() { string timeStamp = DateTime.Now.ToString("yyyyMMdd_hhmmss"); csvOutputFileSpec = Environment.CurrentDirectory + "\\GenerateSecurityGroupReport-" + timeStamp + Constants.CSVExtension; csvOutputFileHasHeader = System.IO.File.Exists(csvOutputFileSpec); Logger.OpenLog("GenerateSecurityGroupReport", timeStamp); Logger.LogInfoMessage(String.Format("Scan starting {0}", DateTime.Now.ToString()), true); string[] securityGroups = new string[0]; string securityGroupsInputFileSpec = Environment.CurrentDirectory + "\\" + Constants.SecurityGroupsInputFileName; if (!System.IO.File.Exists(securityGroupsInputFileSpec)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file {0} is not available", securityGroupsInputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } securityGroups = Helper.ReadInputFile(securityGroupsInputFileSpec, false); if (securityGroups.Length == 0) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file {0} is empty", securityGroupsInputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } Logger.LogInfoMessage(String.Format("Loaded a total of {0} security groups ...", securityGroups.Length), true); string inputFileSpec = Environment.CurrentDirectory + "\\" + Constants.UsageReport_SitesInputFileName; if (!System.IO.File.Exists(inputFileSpec)) { System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage(String.Format("Input file {0} is not available", inputFileSpec), true); Logger.LogInfoMessage(String.Format("Scan aborted {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); System.Console.ResetColor(); return; } string[] siteUrls = Helper.ReadInputFile(inputFileSpec, false); Logger.LogInfoMessage(String.Format("Preparing to scan a total of {0} sites ...", siteUrls.Length), true); foreach (string siteUrl in siteUrls) { ProcessSite(siteUrl, securityGroups); } Logger.LogInfoMessage(String.Format("Scan completed {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); }
public static string PublishMasterPage(Web web, string mpFilePath, string title, string description) { try { Logger.LogInfoMessage(String.Format("Publishing Master Page File: {0} ...", mpFilePath), false); List mpGallery = web.GetCatalog((int)ListTemplateType.MasterPageCatalog); Folder mpGalleryRoot = mpGallery.RootFolder; web.Context.Load(mpGallery); web.Context.Load(mpGalleryRoot); web.Context.ExecuteQuery(); File mpFile = GetFileFromWeb(web, mpFilePath); if (mpFile == null) { Logger.LogErrorMessage(String.Format("UploadMasterPage() failed for {0}: Error=File Not Found", web.Url), false); return(String.Empty); } if (mpGallery.ForceCheckout || mpGallery.EnableVersioning) { if (mpFile.CheckOutType == CheckOutType.None) { mpFile.CheckOut(); } } ListItem fileListItem = mpFile.ListItemAllFields; fileListItem["MasterPageDescription"] = description; fileListItem["UIVersion"] = "15"; if (mpGallery.AllowContentTypes && mpGallery.ContentTypesEnabled) { fileListItem["Title"] = title; fileListItem["ContentTypeId"] = Constants.MASTERPAGE_CONTENT_TYPE; } fileListItem.Update(); if (mpGallery.ForceCheckout || mpGallery.EnableVersioning) { mpFile.CheckIn(string.Empty, CheckinType.MajorCheckIn); if (mpGallery.EnableModeration) { mpFile.Approve(""); } } web.Context.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("Published Master Page File: {0}", mpFile.ServerRelativeUrl), false); return(mpFile.ServerRelativeUrl); } catch (Exception ex) { Logger.LogErrorMessage(String.Format("UploadMasterPage() failed for {0}: Error={1}", web.Url, ex.Message), false); return(String.Empty); } }
public static void DoWork() { outputPath = Environment.CurrentDirectory; string webUrl = string.Empty; string serverRelativePageUrl = string.Empty; string webPartID = string.Empty; string timeStamp = DateTime.Now.ToString("yyyyMMdd_hhmmss"); //Trace Log TXT File Creation Command Logger.OpenLog("WebpartProperties", timeStamp); System.Console.ForegroundColor = System.ConsoleColor.Cyan; System.Console.WriteLine("Please enter Web Url : "); System.Console.ResetColor(); webUrl = System.Console.ReadLine().ToLower(); if (string.IsNullOrEmpty(webUrl)) { Logger.LogErrorMessage("[WebpartProperties: DoWork]WebUrl should not be empty or null. Operation aborted...", true); return; } System.Console.ForegroundColor = System.ConsoleColor.Cyan; System.Console.WriteLine("Please enter Server Relative PageUrl (E:g- /sites/DTTesting/SitePages/WebPartPage.aspx): "); System.Console.ResetColor(); serverRelativePageUrl = System.Console.ReadLine().ToLower(); if (string.IsNullOrEmpty(serverRelativePageUrl)) { Logger.LogErrorMessage("[WebpartProperties: DoWork]ServerRelative PageUrl should not be empty or null. Operation aborted...", true); return; } System.Console.ForegroundColor = System.ConsoleColor.Cyan; System.Console.WriteLine("Please enter WebPart ID : "); System.Console.ResetColor(); webPartID = System.Console.ReadLine().ToLower(); if (string.IsNullOrEmpty(webPartID)) { Logger.LogErrorMessage("[WebpartProperties: DoWork]WebPart ID should not be empty or null. Operation aborted...", true); return; } Logger.LogInfoMessage(String.Format("Process started {0}", DateTime.Now.ToString()), true); try { GetWebPartProperties(serverRelativePageUrl, webPartID, webUrl, outputPath); } catch (Exception ex) { ExceptionCsv.WriteException(Constants.NotApplicable, Constants.NotApplicable, Constants.NotApplicable, "WebPartProperties", ex.Message, ex.ToString(), "WebPartProperties: DoWork()", ex.GetType().ToString()); System.Console.ForegroundColor = System.ConsoleColor.Red; Logger.LogErrorMessage("[WebpartProperties: DoWork]. Exception Message: " + ex.Message, true); System.Console.ResetColor(); } Logger.LogInfoMessage(String.Format("Process completed {0}", DateTime.Now.ToString()), true); Logger.CloseLog(); }
private static void DeleteJsLinks(ClientContext context, Site site) { var existingActions = site.UserCustomActions; context.Load(existingActions); context.ExecuteQuery(); var actions = existingActions.ToArray(); if (actions.Count() == 0) { Logger.LogInfoMessage(String.Format("No ScriptLink Action [{0}] items are present on site [{1}]...", Constants.ScriptLinkDescription, site.Url), false); return; } Logger.LogInfoMessage(String.Format("Removing all existing ScriptLink Action [{0}] items from site [{1}]...", Constants.ScriptLinkDescription, site.Url), false); foreach (var action in actions) { if (action.Description.Equals(Constants.ScriptLinkDescription, StringComparison.InvariantCultureIgnoreCase) && action.Location.Equals(Constants.ScriptLinkLocation, StringComparison.InvariantCultureIgnoreCase) ) { ManageMaintenanceBannersOutput csvObject = new ManageMaintenanceBannersOutput(); csvObject.BannerOperation = "Remove Banner"; csvObject.SiteCollectionUrl = site.Url; csvObject.ScriptLinkName = Constants.ScriptLinkDescription; csvObject.ScriptLinkFile = "N/A"; try { action.DeleteObject(); context.ExecuteQuery(); csvObject.Status = Constants.Success; FileUtility.WriteCsVintoFile(csvOutputFileSpec, csvObject, ref csvOutputFileHasHeader); Logger.LogInfoMessage(String.Format("ScriptLink Action [{0}] removed from site [{1}]", Constants.ScriptLinkDescription, site.Url), false); } catch (Exception ex) { csvObject.Status = Constants.Failure; FileUtility.WriteCsVintoFile(csvOutputFileSpec, csvObject, ref csvOutputFileHasHeader); Logger.LogErrorMessage(String.Format("DeleteJsLinks() failed to remove ScriptLink Action [{0}] from site [{1}]: Error={2}", Constants.ScriptLinkDescription, site.Url, ex.Message), false); ExceptionCsv.WriteException( "N/A", site.Url, "N/A", "MaintenanceBanner", ex.Message, ex.ToString(), "DeleteJsLinks", ex.GetType().ToString(), String.Format("DeleteJsLinks() failed to remove ScriptLink Action [{0}] from site [{1}]", Constants.ScriptLinkDescription, site.Url) ); } } } }
private static void DeleteListEventReceiver(string webUrl, string hostId, string eventName, string assemblyName) { try { Logger.LogInfoMessage(String.Format("Deleting LIST Event Receiver [{0}] from list [{1}] on web {2} ...", eventName, hostId, webUrl), true); using (ClientContext userContext = Helper.CreateAuthenticatedUserContext(Program.AdminDomain, Program.AdminUsername, Program.AdminPassword, webUrl)) { Web web = userContext.Web; userContext.Load(web); userContext.ExecuteQuery(); //ListCollection lists = web.Lists; //userContext.Load(lists); Guid listId = new Guid(hostId); List list = web.Lists.GetById(listId); userContext.Load(list); userContext.ExecuteQuery(); if (list == null) { Logger.LogErrorMessage(String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=List not Found.", eventName, hostId, webUrl), false); return; } EventReceiverDefinitionCollection receivers = list.EventReceivers; userContext.Load(receivers); userContext.ExecuteQuery(); foreach (EventReceiverDefinition receiver in receivers) { if (receiver.ReceiverName.Equals(eventName, StringComparison.InvariantCultureIgnoreCase) && receiver.ReceiverAssembly.Equals(assemblyName, StringComparison.InvariantCultureIgnoreCase) ) { receiver.DeleteObject(); userContext.ExecuteQuery(); Logger.LogSuccessMessage(String.Format("Deleted LIST Event Receiver [{0}] from list [{1}] on web {2}", eventName, list.Title, webUrl), false); return; } } Logger.LogErrorMessage(String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=Event Receiver not Found.", eventName, list.Title, webUrl), false); } } catch (Exception ex) { if (ex.Message.ToLower().Contains("list does not exist")) { Logger.LogErrorMessage(String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error=List not Found.", eventName, hostId, webUrl), false); return; } Logger.LogErrorMessage(String.Format("DeleteListEventReceiver() failed for Event Receiver [{0}] on list [{1}] of web {2}; Error={3}", eventName, hostId, webUrl, ex.Message), false); } }