private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai) { var web = context.Web; var isSubSite = web.IsSubSite(); if (isSubSite) { var tokenParser = new TokenParser(web, template); if (template.SiteFields.Any()) { var columnProvisionManager = new SiteColumnProvisionManager(); columnProvisionManager.Provision(web, template, tokenParser, ptai); } if (template.ContentTypes.Any()) { var contentTypeProvisionManager = new ContentTypeProvisionManager(); contentTypeProvisionManager.Provision(web, template, tokenParser, ptai); } template.Files.RemoveAll( f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase)); } var pageLib = context.Web.GetPagesLibrary(); if (template.Files.Any()) { foreach (var file in template.Files) { if (file.Src.EndsWith(".aspx")) { file.Src = $"{pageLib.Title}\\{file.Src}"; } } } }
public PnPFileInfo GetPnPTemplateFileFromSite(CreatePnPTemplateRequest request) { var pnpPackageInfo = new PnPFileInfo(); try { using (var context = TokenHelper.GetClientContextWithAccessToken(request.SiteUrl, request.AccessToken)) { var web = context.Web; context.Load(web, w => w.Title, w => w.ServerRelativeUrl, w => w.Url); context.ExecuteQuery(); var siteUrl = new Uri(request.SiteUrl); var pnpFileName = ""; if (string.IsNullOrEmpty(request.PnpPackageName)) { pnpFileName = BuildPnPPackageName(siteUrl); } else { pnpFileName = request.PnpPackageName; if (pnpFileName.ToLower().EndsWith(".pnp")) { pnpFileName = pnpFileName.Substring(0, pnpFileName.Length - 4); } } var pnpTemplatePath = HostingEnvironment.MapPath($"~/{TemplateFolder}"); var ptci = new ProvisioningTemplateCreationInformation(context.Web); var fileSystemConnector = new FileSystemConnector(pnpTemplatePath, ""); ptci.PersistBrandingFiles = true; ptci.PersistPublishingFiles = true; ptci.PersistMultiLanguageResources = true; ptci.FileConnector = new OpenXMLConnector($"{pnpFileName}.pnp", fileSystemConnector); ptci.ProgressDelegate = delegate(String message, Int32 progress, Int32 total) { Console.WriteLine(@"{0:00}/{1:00} - {2}", progress, total, message); }; ProvisioningTemplate template = new ProvisioningTemplate(); try { template = web.GetProvisioningTemplate(ptci); } catch (Exception ex) { Console.WriteLine("PnP engine failed to extract template. Error: {0}", ex.Message); } try { PageProvisionManager pageProvisionManager = new PageProvisionManager(); var pagesTemplate = pageProvisionManager.Extract(context, ptci); foreach (var theFile in pagesTemplate.Files) { var existingFile = template.Files.FirstOrDefault( f => f.Src.Equals(theFile.Src, StringComparison.InvariantCultureIgnoreCase)); if (existingFile == null) { template.Files.Add(theFile); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Pages. Error: {0}", ex.Message); } if (web.IsSubSite()) { try { var siteColumnsTemplate = new SiteColumnProvisionManager().Extract(web, ptci); foreach (var col in siteColumnsTemplate.SiteFields) { if (!template.SiteFields.Contains(col)) { template.SiteFields.Add(col); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Site Columns. Error: {0}", ex.Message); } try { var siteCTTemplate = new ContentTypeProvisionManager().Extract(web, ptci); foreach (var ct in siteCTTemplate.ContentTypes) { if (!template.ContentTypes.Contains(ct)) { template.ContentTypes.Add(ct); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Site Content Types. Error: {0}", ex.Message); } } XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider((OpenXMLConnector)ptci.FileConnector); provider.SaveAs(template, $"{pnpFileName}.xml"); string fileLocation = $"{pnpTemplatePath}\\{pnpFileName}.pnp"; var file = new FileInfo(fileLocation); fileStorageManager.SaveFile($"{TemplateFolder}\\{pnpFileName}.pnp", System.IO.File.ReadAllBytes(fileLocation)); pnpPackageInfo = new PnPFileInfo() { Name = $"{pnpFileName}.pnp", Size = file.Length / 1024.0m }; if (file.Exists) { file.Delete(); } } } catch (Exception ex) { throw ex; } return(pnpPackageInfo); }
private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai, string type = "NotSet", string docIdPrefix = "") { try { switch (type?.ToUpper()) { case "PRE": template.Files.RemoveAll(x => true); template.Navigation = null; break; case "POST": template.Lists.RemoveAll(x => true); template.SiteFields.RemoveAll(x => true); template.ContentTypes.RemoveAll(x => true); break; case "INIT": template.Files.RemoveAll(x => true); template.Lists.RemoveAll(x => true); template.Navigation = null; break; case "LISTS": template.Files.RemoveAll(x => true); template.Navigation = null; break; case "FILES": template.Lists.RemoveAll(x => true); template.Navigation = null; break; case "NAVIGATION": template.Files.RemoveAll(x => true); template.Lists.RemoveAll(x => true); break; } var web = context.Web; if (!string.IsNullOrEmpty(docIdPrefix)) { SetDocumentId(context, web, docIdPrefix); } var isSubSite = web.IsSubSite(); if (isSubSite) { var tokenParser = new TokenParser(web, template); if (template.SiteFields.Any()) { var columnProvisionManager = new SiteColumnProvisionManager(); columnProvisionManager.Provision(web, template, tokenParser, ptai); } if (template.ContentTypes.Any()) { var contentTypeProvisionManager = new ContentTypeProvisionManager(); contentTypeProvisionManager.Provision(web, template, tokenParser, ptai); } template.Files.RemoveAll( f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase)); } var pageLib = context.Web.GetPagesLibrary(); if (template.Files.Any()) { foreach (var file in template.Files) { if (file.Src.EndsWith(".aspx")) { file.Src = $"{pageLib.Title}\\{file.Src}"; } } } } catch (Exception ex) { throw ex; } }
private void btnExtract_Click(object sender, EventArgs e) { try { DebugMonitor.Start(); DebugMonitor.OnOutputDebugString += DebugMonitor_OnOutputDebugString; var web = Context.Web; Context.Load(web, w => w.Title, w => w.ServerRelativeUrl, w => w.Url); Context.ExecuteQuery(); var siteUrl = new Uri(SiteUrl); var pnpFileName = ""; pnpFileName = BuildPnPPackageName(siteUrl); var pnpTemplatePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\PnPTemplates"; var ptci = new ProvisioningTemplateCreationInformation(web); var fileSystemConnector = new FileSystemConnector(pnpTemplatePath, ""); ptci.PersistBrandingFiles = true; ptci.PersistPublishingFiles = true; ptci.PersistMultiLanguageResources = true; ptci.FileConnector = new OpenXMLConnector($"{pnpFileName}.pnp", fileSystemConnector); ptci.ProgressDelegate = delegate(String message, Int32 progress, Int32 total) { Console.WriteLine(@"{0:00}/{1:00} - {2}", progress, total, message); }; ProvisioningTemplate template = new ProvisioningTemplate(); try { template = web.GetProvisioningTemplate(ptci); } catch (Exception ex) { Console.WriteLine("PnP engine failed to extract template. Error: {0}", ex.Message); } try { PageProvisionManager pageProvisionManager = new PageProvisionManager(); var pagesTemplate = pageProvisionManager.Extract(Context, ptci); foreach (var theFile in pagesTemplate.Files) { var existingFile = template.Files.FirstOrDefault( f => f.Src.Equals(theFile.Src, StringComparison.InvariantCultureIgnoreCase)); if (existingFile == null) { template.Files.Add(theFile); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Pages. Error: {0}", ex.Message); } if (web.IsSubSite()) { try { var siteColumnsTemplate = new SiteColumnProvisionManager().Extract(web, ptci); foreach (var col in siteColumnsTemplate.SiteFields) { if (!template.SiteFields.Contains(col)) { template.SiteFields.Add(col); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Site Columns. Error: {0}", ex.Message); } try { var siteCTTemplate = new ContentTypeProvisionManager().Extract(web, ptci); foreach (var ct in siteCTTemplate.ContentTypes) { if (!template.ContentTypes.Contains(ct)) { template.ContentTypes.Add(ct); } } } catch (Exception ex) { Console.WriteLine("Failed to extract Site Content Types. Error: {0}", ex.Message); } } pgTemplate.SelectedObject = template; DebugMonitor.Stop(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void RefineTemplate(ClientContext context, ProvisioningTemplate template, ProvisioningTemplateApplyingInformation ptai, ApplyRambollTemplateRequest request) { try { string type = request.ApplyComponent ?? "NotSet"; ptai.HandlersToProcess = Handlers.All; switch (type?.ToUpper()) { /*case "PRE": * template.Files.RemoveAll(x => true); * template.Navigation = null; * break; * case "POST": * template.Lists.RemoveAll(x => true); * template.SiteFields.RemoveAll(x => true); * template.ContentTypes.RemoveAll(x => true); * break; * case "INIT": * template.Files.RemoveAll(x => true); * template.Lists.RemoveAll(x => true); * template.Navigation = null; * break; * case "LISTS": * template.Files.RemoveAll(x => true); * template.Navigation = null; * break; * case "FILES": * template.Lists.RemoveAll(x => true); * template.Navigation = null; * break; * case "NAVIGATION": * template.Files.RemoveAll(x => true); * template.Lists.RemoveAll(x => true); * break;*/ case "PRE": ptai.HandlersToProcess = Handlers.All & ~Handlers.Files & ~Handlers.Navigation; break; case "POST": ptai.HandlersToProcess = Handlers.All & ~Handlers.Lists & ~Handlers.Fields & ~Handlers.ContentTypes; break; case "INIT": ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation; break; case "PROPERTYBAGENTRIES": ptai.HandlersToProcess = Handlers.All & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation; break; case "FEATURES": ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Files & ~Handlers.Lists & ~Handlers.Navigation; break; case "LISTS": ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Navigation; break; case "FILES": ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Lists & ~Handlers.Navigation; break; case "NAVIGATION": ptai.HandlersToProcess = Handlers.All & ~Handlers.PropertyBagEntries & ~Handlers.Features & ~Handlers.Files & ~Handlers.Lists; break; } var web = context.Web; if (type?.ToUpper() == "PROPERTYBAGENTRIES") { string docIdPrefix = ""; docIdPrefix = GetMetadataValue(new Guid(request.WebId), "Project number")?.ToString(); if (!string.IsNullOrEmpty(docIdPrefix)) { SetDocumentId(context, web, docIdPrefix); } } else if (type?.ToUpper() == "FILES") { var defaultPage = "default.aspx"; var siteUri = new Uri(request.SiteUrl); string tenantUrl = $"{siteUri.Scheme}://{siteUri.Host}"; if (!siteUri.IsDefaultPort) { tenantUrl = $"{tenantUrl}:{siteUri.Port}"; } context.Load(context.Web, w => w.CurrentUser); context.ExecuteQueryRetry(); var loginName = context.Web?.CurrentUser?.LoginName; //?.Split('|').LastOrDefault(); foreach (var file in template.Files) { if (file.Src.Equals(defaultPage, StringComparison.InvariantCultureIgnoreCase)) { string projectName = ""; projectName = GetMetadataValue(new Guid(request.WebId), "Project name")?.ToString(); file.Properties["Title"] = projectName; } if (file.Properties.ContainsKey("_dlc_DocIdUrl")) { var docIdUrl = file.Properties["_dlc_DocIdUrl"]; if (!string.IsNullOrEmpty(docIdUrl)) { file.Properties["_dlc_DocIdUrl"] = docIdUrl.Replace("{tenant}", tenantUrl); } } if (!string.IsNullOrEmpty(loginName)) { if (file.Properties.ContainsKey("PublishingContact")) { file.Properties["PublishingContact"] = loginName; } else { file.Properties.Add("PublishingContact", loginName); } } } } var isSubSite = web.IsSubSite(); if (isSubSite) { var tokenParser = new TokenParser(web, template); if (template.SiteFields.Any()) { var columnProvisionManager = new SiteColumnProvisionManager(); columnProvisionManager.Provision(web, template, tokenParser, ptai); } if (template.ContentTypes.Any()) { var contentTypeProvisionManager = new ContentTypeProvisionManager(); contentTypeProvisionManager.Provision(web, template, tokenParser, ptai); } template.Files.RemoveAll( f => f.Src.EndsWith(".master", StringComparison.InvariantCultureIgnoreCase)); } var pageLib = context.Web.GetPagesLibrary(); if (template.Files.Any()) { foreach (var file in template.Files) { if (file.Src.EndsWith(".aspx")) { file.Src = $"{pageLib.Title}\\{file.Src}"; } } } } catch (Exception ex) { throw ex; } }