/// <summary> /// Defines the entry point of the application. /// </summary> /// <param name="args">The arguments.</param> static void Main(string[] args) { IAsyncLogger logger = O365GroupsFactory.GetLogger(new string[] { Constants.AppSettings.LoggerInstanceKey }) as IAsyncLogger; var siteMapFileName = ConfigurationManager.AppSettings[Constants.AppSettings.SiteMapKey]; var siteMapSheetName = ConfigurationManager.AppSettings[Constants.AppSettings.SiteMapSheetKey]; var userMappingFileName = ConfigurationManager.AppSettings[Constants.AppSettings.UserMappingKey]; var userMappingSheetName = ConfigurationManager.AppSettings[Constants.AppSettings.UserMappingSheetKey]; var retryCount = int.Parse(ConfigurationManager.AppSettings[Constants.AppSettings.RetryCountKey]); var delay = int.Parse(ConfigurationManager.AppSettings[Constants.AppSettings.DelayKey]); var userAgent = ConfigurationManager.AppSettings[Constants.AppSettings.UserAgentKey]; logger.Log("Reading Files..."); var csvOperation = new CSVOperations(); var siteMapDetails = csvOperation.ReadFile(Constants.SiteMapSheet, siteMapFileName, siteMapSheetName).Cast <SiteMapReport>().ToList(); SecurityPrincipal.UserMappingList = csvOperation.ReadFile(Constants.UserMappingSheet, userMappingFileName, userMappingSheetName).Cast <UserMappingReport>().ToList(); if (siteMapDetails != null) { SecureString sourcePassword = GetSecureString(Constants.PasswordMessageSource); SecureString targetPassword = GetSecureString(Constants.PasswordMessageTarget); Object lockObj = new Object(); //Stopwatch watch = new Stopwatch(); //watch.Start(); List <ModernWeb> websList = new List <ModernWeb>(); logger.Log("Processing read sites from CSV"); foreach (var siteMap in siteMapDetails) { logger.Log("Reading " + siteMap.SourceSiteUrl); var modernWeb = new ModernWeb { SourceSiteUrl = siteMap.SourceSiteUrl, TargetSiteUrl = siteMap.TargetSiteUrl, SourceUserName = siteMap.SourceUser, TargetUserName = siteMap.TargetUser, SourcePassword = sourcePassword, TargetPassword = targetPassword }; WebsOperation websOperation = new WebsOperation(logger, retryCount, delay, userAgent); websOperation.ModernWeb = modernWeb; websOperation.MigrateWebs(); } //watch.Stop(); logger.Log("Processing complete"); Console.WriteLine("Processing Complete"); //Console.WriteLine("Elapsed Time " + watch.Elapsed.ToString()); } Console.ReadLine(); }
/// <summary> /// Connects the target. /// </summary> /// <param name="modernWeb">The modern web.</param> /// <param name="sourcePageItemsCollection">The source page items collection.</param> private ListItem ConnectTarget(ModernWeb modernWeb, ListItemCollection sourcePageItemsCollection) { Logger.Log("Entered ConnectTarget for " + modernWeb.TargetSiteUrl); ListItem targetItem = null; if (modernWeb != null) { try { var sourceContext = modernWeb.ClientContext; var authManagerTarget = new AuthenticationManager(); using (var targetContext = authManagerTarget.GetSharePointOnlineAuthenticatedContextTenant(modernWeb.TargetSiteUrl, modernWeb.TargetUserName, modernWeb.TargetPassword)) { sourceContext.ExecutingWebRequest += delegate(object sender, WebRequestEventArgs e) { e.WebRequestExecutor.WebRequest.UserAgent = UserAgent; }; var targetSite = targetContext.Site; var targetWeb = targetContext.Web; targetContext.Load(targetSite); targetContext.Load(targetWeb, w => w.SiteGroups, w => w.SiteGroups.Include(sg => sg.LoginName), w => w.Title, w => w.RoleDefinitions, w => w.WebTemplate); targetContext.ExecuteQueryWithIncrementalRetry(RetryCount, Delay); //var webTemplate = web.WebTemplate; //if (webTemplate == Constants.WebTemplate) //{ targetItem = CreatePage(sourcePageItemsCollection, sourceContext, targetContext, targetWeb); //} } } catch (Exception ex) { Logger.LogError("Error in Connecting to target site " + modernWeb.TargetSiteUrl + Environment.NewLine + ex.Message); throw ex; } } return(targetItem); }
/// <summary> /// Gets the page items collection. /// </summary> /// <param name="modernWeb">The modern web.</param> /// <returns>ListItemCollection.</returns> public ListItemCollection GetPageItemsCollection(ModernWeb modernWeb) { Logger.Log("Enterned GetPageItemsCollection for " + modernWeb.SourceSiteUrl); ListItemCollection items = null; if (modernWeb != null) { var sourceContext = modernWeb.ClientContext; var rootWeb = modernWeb.Web; var webTemplate = modernWeb.Web.WebTemplate; //if (webTemplate == Constants.WebTemplate) //{ try { var listTitle = Constants.ModernPageLibrary; var list = rootWeb.Lists.GetByTitle(listTitle); var migrationType = ConfigurationManager.AppSettings[Constants.AppSettings.MigrationTypeKey]; //Check if we only want Modern Page to work with if (MigrationType.All == (MigrationType)Enum.Parse(typeof(MigrationType), migrationType)) { items = list.GetItems(CamlQuery.CreateAllItemsQuery()); } else { var query = new CamlQuery(); query.ViewXml = Constants.ModernPageQueryString; items = list.GetItems(query); } modernWeb.ClientContext.Load(items, icol => icol.Include( i => i[Constants.FirstPublishedDate], i => i[Constants.BannerImageUrl], i => i[Constants.ContentTypeId], i => i[Constants.Description], i => i[Constants.OriginalSourceUrl], i => i[Constants.PromotedState], i => i[Constants.PageLayoutType], i => i[Constants.Author], i => i[Constants.Editor], i => i[Constants.Created], i => i[Constants.Modified], i => i[Constants.FileLeafRef], i => i[Constants.FileRef], i => i[Constants.PageLayoutType], i => i[Constants.ClientSideApplicationId], i => i[Constants.LayoutWebpartsContent], i => i[Constants.WikiPageContentControl], i => i[Constants.ModernPageContentControl], i => i.ContentType, i => i.DisplayName, i => i.ParentList, i => i.Client_Title, i => i.HasUniqueRoleAssignments, i => i.RoleAssignments, i => i.RoleAssignments.Include( ra => ra.Member, ra => ra.Member.LoginName, ra => ra.Member.PrincipalType, ra => ra.RoleDefinitionBindings, ra => ra.RoleDefinitionBindings.Include(rd => rd.RoleTypeKind)))); sourceContext.ExecuteQueryWithIncrementalRetry(RetryCount, Delay); } catch (Exception ex) { Logger.LogError("Error in GetPageItemsCollection" + Environment.NewLine + ex.Message); throw ex; } //} } return(items); }