/// <summary> /// Assigns content type /// </summary> /// <param name="clientcontext">SP client context</param> /// <param name="matterMetadata">Object containing metadata for Matter</param> internal static void AssignContentType(ClientContext clientcontext, MatterMetadata matterMetadata) { // For each value in the list of Content Type Names // Add that content Type to the Library string defaultContentType = matterMetadata.ContentTypes[0]; try { // Returns the selected Content types from the Site Content Types IList <ContentType> contentTypeCollection = GetContentTypeData(clientcontext, matterMetadata.ContentTypes); if (null != contentTypeCollection) { Microsoft.SharePoint.Client.Web web = clientcontext.Web; List matterList = web.Lists.GetByTitle(matterMetadata.Matter.MatterName); FieldCollection fields = GetContentType(clientcontext, contentTypeCollection, matterList); matterMetadata = GetWSSId(clientcontext, matterMetadata, fields); MatterProvisionHelper.SetFieldValues(matterMetadata, fields); clientcontext.ExecuteQuery(); SetDefaultContentType(clientcontext, matterList, defaultContentType); MatterProvisionHelper.CreateView(clientcontext, matterList); } } // SharePoint Specific Exception catch (Exception exception) { Utility.DisplayAndLogError(Utility.ErrorFilePath, string.Format(CultureInfo.InvariantCulture, ConfigurationManager.AppSettings["ErrorMessage"], "assigning ContentType")); Utility.DisplayAndLogError(Utility.ErrorFilePath, "Message: " + exception.Message + "Matter name: " + matterMetadata.Matter.MatterName + "\nStacktrace: " + exception.StackTrace); throw; } }
/// <summary> /// Reverts the changes for sample data based on the information provided /// </summary> /// <param name="matterDetailsCollection">Matter details collection</param> /// <param name="clientCollection">Client details collection</param> /// <param name="configVal">Configuration values from Excel</param> internal static void RevertData(List <DataStorage> matterDetailsCollection, ClientTermSets clientCollection, Dictionary <string, string> configVal) { try { if (null != matterDetailsCollection && null != clientCollection && null != configVal && 0 < matterDetailsCollection.Count) { foreach (DataStorage matterDetails in matterDetailsCollection) { Client clientObject = clientCollection.ClientTerms.Where(item => item.ClientName.Equals(matterDetails.ClientName, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); if (null != clientObject) { using (ClientContext clientContext = MatterProvisionHelperUtility.GetClientContext(clientObject.ClientUrl, configVal)) { PropertyValues properties = clientContext.Web.Lists.GetByTitle(matterDetails.MatterPrefix).RootFolder.Properties; clientContext.Load(properties); clientContext.ExecuteQuery(); Matter matter = new Matter(matterDetails); matter.MatterGuid = properties.FieldValues.ContainsKey("MatterGUID") ? System.Web.HttpUtility.HtmlDecode(Convert.ToString(properties.FieldValues["MatterGUID"], CultureInfo.InvariantCulture)) : matterDetails.MatterPrefix; MatterProvisionHelper.DeleteMatter(clientContext, matter); } } else { Console.WriteLine("Failed to get Client Url for client: {0}", matterDetails.ClientName); Console.WriteLine("-------------------------------------------------------------------------------"); continue; } } } } catch (Exception exception) { Utility.DisplayAndLogError(errorFilePath, "Message: " + exception.Message + "\nStacktrace: " + exception.StackTrace); } }
/// <summary> /// Add Calendar Web Part to client site /// </summary> /// <param name="clientContext">SharePoint Client Context</param> /// <param name="matter">Matter object containing Matter data</param> internal static void AddCalendarList(ClientContext clientContext, Matter matter) { string calendarName = string.Concat(matter.MatterName, ConfigurationManager.AppSettings["CalendarNameSuffix"]); try { Web web = clientContext.Web; clientContext.Load(web, item => item.ListTemplates); clientContext.ExecuteQuery(); ListTemplate listTemplate = null; foreach (var calendar in web.ListTemplates) { if (calendar.Name == Constants.CalendarName) { listTemplate = calendar; } } ListCreationInformation listCreationInformation = new ListCreationInformation(); listCreationInformation.TemplateType = listTemplate.ListTemplateTypeKind; listCreationInformation.Title = calendarName; // Added URL property for URL consolidation changes listCreationInformation.Url = Constants.TitleListPath + matter.MatterGuid + ConfigurationManager.AppSettings["CalendarNameSuffix"]; web.Lists.Add(listCreationInformation); web.Update(); clientContext.ExecuteQuery(); MatterProvisionHelperUtility.BreakPermission(clientContext, matter.MatterName, matter.CopyPermissionsFromParent, calendarName); } catch (Exception exception) { //// Generic Exception MatterProvisionHelper.DeleteMatter(clientContext, matter); DisplayAndLogError(errorFilePath, "Message: " + exception.Message + "\nStacktrace: " + exception.StackTrace); } }
/// <summary> /// Main Method to initiate the execution /// </summary> /// <param name="args">Command line argument</param> public static void Main(string[] args) { try { if (null != args && 2 <= args.Length) { bool createData = Convert.ToBoolean(args[0], CultureInfo.InvariantCulture); if (!ExcelOperations.IsNullOrEmptyCredential(args[1], args[2])) { //// Read Configuration sheet and Sample data sheet from Excel string filePath = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + "\\" + ConfigurationManager.AppSettings["filename"]; string sheetName = ConfigurationManager.AppSettings["sheetname"]; string configSheetName = ConfigurationManager.AppSettings["configsheetname"]; Dictionary <string, string> configVal = ExcelOperations.ReadFromExcel(filePath, configSheetName); configVal.Add("Username", args[1].Trim()); configVal.Add("Password", args[2].Trim()); Collection <Collection <string> > dataValue = ExcelOperations.ReadSheet(filePath, sheetName); List <DataStorage> matterDetails = MatterProvisionHelper.FetchMatterData(dataValue); ClientTermSets clientDetails = TermStoreOperations.GetClientDetails(configVal); if (createData) { CreateData(matterDetails, clientDetails, configVal); } else { RevertData(matterDetails, clientDetails, configVal); } } else { Console.WriteLine("Invalid Username and Password"); } } else { Console.WriteLine("Incorrect command line argument was supplied. Kindly provide correct command line argument."); } Console.WriteLine("\n\n---Execution completed---"); Console.WriteLine("Press any key to exit."); Console.ReadKey(); } catch (Exception exception) { Utility.DisplayAndLogError(errorFilePath, "Message: " + exception.Message + "\nStacktrace: " + exception.StackTrace); Console.WriteLine("Error log will found at {0}", errorFilePath); Console.WriteLine("\n\n---Execution completed---"); Console.WriteLine("Press any key to exit."); Console.ReadKey(); } }
/// <summary> /// Created to refactor CreateData method /// </summary> /// <param name="configVal">Dictionary object</param> /// <param name="successMatterNameCount">Success matter name</param> /// <param name="matterMetadata">Matter metadata</param> /// <param name="clientName">Client name</param> /// <param name="client">Client object</param> /// <param name="contentTypes">Array of content type</param> /// <param name="matterObj">Matter object</param> /// <param name="clientContext">Client context</param> /// <returns>integer value</returns> private static int OnMatterCreationSuccess(Dictionary <string, string> configVal, int successMatterNameCount, MatterMetadata matterMetadata, string clientName, Client client, string[] contentTypes, Matter matterObj, ClientContext clientContext) { Console.WriteLine("Created Matter, OneNote library, calendar list and Task List"); List <string> listResponsibleAttorneys = matterObj.TeamInfo.ResponsibleAttorneys.Trim().Split(';').ToList(); List <string> listAttorneys = matterObj.TeamInfo.Attorneys.Trim().Split(';').ToList(); List <string> listBlockedUploadUsers = matterObj.TeamInfo.BlockedUploadUsers.Trim().Split(';').ToList(); IList <IList <string> > assignUserNames = new List <IList <string> >(); assignUserNames.Add(listResponsibleAttorneys); assignUserNames.Add(listAttorneys); assignUserNames.Add(listBlockedUploadUsers); matterObj.AssignUserNames = assignUserNames; matterMetadata.Matter = matterObj; matterMetadata.Client = client; // Create Matter Landing page MatterProvisionHelper.CreateMatterLandingPage(clientContext, client, matterObj); Console.WriteLine("Created matter landing Page"); // Step 4 Assign Content Types matterMetadata.ContentTypes = contentTypes.Distinct().ToList(); MatterProvisionHelperUtility.AssignContentType(clientContext, matterMetadata); Console.WriteLine("Assigned content type"); // Step 5 Assign Permissions bool isCalendarEnabled = Convert.ToBoolean(ConfigurationManager.AppSettings["CalendarCreationEnabled"], CultureInfo.InvariantCulture); bool isTaskEnabled = Convert.ToBoolean(ConfigurationManager.AppSettings["TaskListCreationEnabled"], CultureInfo.InvariantCulture); string calendarName = string.Empty, taskListName = string.Empty; if (isCalendarEnabled) { calendarName = string.Concat(matterObj.MatterName, ConfigurationManager.AppSettings["CalendarNameSuffix"]); } if (isTaskEnabled) { taskListName = string.Concat(matterObj.MatterName, ConfigurationManager.AppSettings["TaskListSuffix"]); } List <string> responsibleAttorneysList = matterObj.TeamInfo.ResponsibleAttorneys.Split(';').Where(responsibleAttorney => !string.IsNullOrWhiteSpace(responsibleAttorney.Trim())).Select(responsibleAttorney => responsibleAttorney.Trim()).ToList(); MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, responsibleAttorneysList, ConfigurationManager.AppSettings["FullControl"]); MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName + ConfigurationManager.AppSettings["OneNoteLibrarySuffix"], responsibleAttorneysList, ConfigurationManager.AppSettings["FullControl"]); if (isCalendarEnabled) { // If isCreateCalendar flag is enabled; assign FULL CONTROL permissions to calendar list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, responsibleAttorneysList, ConfigurationManager.AppSettings["FullControl"], calendarName); } if (isTaskEnabled) { // If isTaskEnabled flag is enabled; assign FULL CONTROL permissions to task list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, taskListName, responsibleAttorneysList, ConfigurationManager.AppSettings["FullControl"]); } List <string> attorneysList = new List <string>(); string[] attorneys = matterObj.TeamInfo.Attorneys.Split(';'); if (!string.IsNullOrWhiteSpace(attorneys[0].Trim())) { int attorneyCount = matterObj.TeamInfo.Attorneys.Split(';').Length; for (int iLength = 0; iLength < attorneyCount; iLength++) { attorneysList.Add(attorneys[iLength].Trim()); } MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, attorneysList, ConfigurationManager.AppSettings["Contribute"]); MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName + ConfigurationManager.AppSettings["OneNoteLibrarySuffix"], attorneysList, ConfigurationManager.AppSettings["Contribute"]); if (isCalendarEnabled) { //If isCreateCalendar flag is enabled; assign CONTRIBUTE permissions to calendar list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, attorneysList, ConfigurationManager.AppSettings["Contribute"], calendarName); } if (isTaskEnabled) { //If isTaskEnabled flag is enabled; assign CONTRIBUTE permissions to task list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, taskListName, attorneysList, ConfigurationManager.AppSettings["Contribute"]); } } List <string> blockedUploadUserList = new List <string>(); string[] blockedUploadUsers = matterObj.TeamInfo.BlockedUploadUsers.Split(';'); if (!string.IsNullOrWhiteSpace(blockedUploadUsers[0].Trim())) { int blockUploadUsersCount = blockedUploadUsers.Length; for (int iLength = 0; iLength < blockUploadUsersCount; iLength++) { blockedUploadUserList.Add(blockedUploadUsers[iLength].Trim()); } MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, blockedUploadUserList, ConfigurationManager.AppSettings["Read"]); MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName + ConfigurationManager.AppSettings["OneNoteLibrarySuffix"], blockedUploadUserList, ConfigurationManager.AppSettings["Read"]); if (isCalendarEnabled) { //If isCreateCalendar flag is enabled; assign READ permissions to calendar list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, matterObj.MatterName, blockedUploadUserList, ConfigurationManager.AppSettings["Read"], calendarName); } if (isTaskEnabled) { //If isTaskEnabled flag is enabled; assign READ permissions to task list MatterProvisionHelperUtility.AssignUserPermissions(clientContext, taskListName, blockedUploadUserList, ConfigurationManager.AppSettings["Read"]); } } Console.WriteLine("Assigned permission"); // Step 6 Stamp properties ListOperations.UpdateMetadataForList(clientContext, matterObj, client); Console.WriteLine("Updated matter properties"); // Step 7 Add entry to list MatterProvisionHelper.InsertIntoMatterCenterMatters(configVal, clientName + "_" + matterObj.MatterName, matterObj, client); Console.WriteLine("{0} created successfully", matterObj.MatterName); Console.WriteLine("-------------------------------------------------------------------------------"); successMatterNameCount++; return(successMatterNameCount); }
/// <summary> /// Method to check matter creation status /// </summary> /// <param name="configVal">dictionary object</param> /// <param name="successMatterNameCount">success matter name</param> /// <param name="alreadyExistsMatterCount">count of existing matter</param> /// <param name="validateMatterId">validate matter id</param> /// <param name="validateMatterTitle">validate title</param> /// <param name="validateMatterDesc"> validate description</param> /// <param name="matterMetadata">matter metadata</param> /// <param name="clientName">client name</param> /// <param name="client">client object</param> /// <param name="folders">folder name</param> /// <param name="contentTypes">array of content type</param> /// <param name="matterObj">matter object</param> /// <param name="clientContext">client context</param> private static void CheckMatterCreationStatus(Dictionary <string, string> configVal, ref int successMatterNameCount, ref int alreadyExistsMatterCount, Regex validateMatterId, Regex validateMatterTitle, Regex validateMatterDesc, MatterMetadata matterMetadata, string clientName, Client client, string folders, string[] contentTypes, Matter matterObj, ClientContext clientContext) { string matterCreatedSuccessfully; if (Convert.ToInt32(ConfigurationManager.AppSettings["MatterIdMaxLength"], CultureInfo.InvariantCulture) < matterObj.MatterId.Length || (!validateMatterId.IsMatch(matterObj.MatterId))) { matterCreatedSuccessfully = Constants.InvalidMatterID; } else if (Convert.ToInt32(ConfigurationManager.AppSettings["MatterTitleMaxLength"], CultureInfo.InvariantCulture) < matterObj.MatterName.Length || (!validateMatterTitle.IsMatch(matterObj.MatterName))) { matterCreatedSuccessfully = Constants.InvalidMatterTitle; } else if (!validateMatterDesc.IsMatch(matterObj.MatterDescription)) { matterCreatedSuccessfully = Constants.InvalidMatterDescription; } else if (Constants.InvalidConflictDate.Equals(matterObj.Conflict.ConflictCheckOn)) { matterCreatedSuccessfully = Constants.InvalidConflictDate; } else { // Call to create matter matterCreatedSuccessfully = MatterProvisionHelper.CreateMatter(clientContext, client.ClientUrl, matterObj, folders); } if (Constants.MatterProvisionPrerequisitesSuccess == matterCreatedSuccessfully) { try { successMatterNameCount = OnMatterCreationSuccess(configVal, successMatterNameCount, matterMetadata, clientName, client, contentTypes, matterObj, clientContext); } catch (Exception exception) { Utility.DisplayAndLogError(errorFilePath, "Message: " + exception.Message + "\nStacktrace: " + exception.StackTrace); MatterProvisionHelper.DeleteMatter(clientContext, matterObj); } } else { switch (matterCreatedSuccessfully) { case "1": // matter is already present Console.WriteLine("Matter: {0} is already present", matterObj.MatterName); alreadyExistsMatterCount++; break; case "2": // OneNote library is already present Console.WriteLine("OneNote Library: {0} is already present", matterObj.MatterName + ConfigurationManager.AppSettings["OneNoteLibrarySuffix"]); alreadyExistsMatterCount++; break; case "3": // matter landing page is already present Console.WriteLine("Matter Landing Page: {0} is already present", matterObj.MatterName); alreadyExistsMatterCount++; break; case "4": // Validation fail for matter ID Console.WriteLine("Matter Id validation fail for Matter {0}", matterObj.MatterName); break; case "5": // Validation fail for matter Name Console.WriteLine("Matter Name validation fail for Matter {0}", matterObj.MatterName); break; case "6": // Validation fail for matter description Console.WriteLine("Matter Description validation fail for Matter {0}", matterObj.MatterName); break; case "7": // Validation fail for conflict date Console.WriteLine("Conflict date validation fail for Matter {0}", matterObj.MatterName); break; } Console.WriteLine("-------------------------------------------------------------------------------"); } }