protected override void ExecuteCmdlet() { if (!SelectedWeb.IsPropertyAvailable("Url")) { ClientContext.Load(SelectedWeb, w => w.Url); ClientContext.ExecuteQueryRetry(); } if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } FileInfo fileInfo = new FileInfo(Path); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, ""); var provisioningTemplate = provider.GetTemplate(fileInfo.Name); if (provisioningTemplate != null) { var fileSystemConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); provisioningTemplate.Connector = fileSystemConnector; var applyingInformation = new ProvisioningTemplateApplyingInformation(); applyingInformation.ProgressDelegate = (message, step, total) => { WriteProgress(new ProgressRecord(0, string.Format("Applying template to {0}", SelectedWeb.Url), message) { PercentComplete = (100 / total) * step }); }; SelectedWeb.ApplyProvisioningTemplate(provisioningTemplate, applyingInformation); } }
protected override void ExecuteCmdlet() { if (!SelectedWeb.IsPropertyAvailable("Url")) { ClientContext.Load(SelectedWeb, w => w.Url); ClientContext.ExecuteQueryRetry(); } if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } if (!string.IsNullOrEmpty(ResourceFolder)) { if (System.IO.Path.IsPathRooted(ResourceFolder)) { ResourceFolder = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, ResourceFolder); } } FileInfo fileInfo = new FileInfo(Path); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, ""); var provisioningTemplate = provider.GetTemplate(fileInfo.Name); if (provisioningTemplate != null) { FileSystemConnector fileSystemConnector = null; if (string.IsNullOrEmpty(ResourceFolder)) { fileSystemConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); } else { fileSystemConnector = new FileSystemConnector(ResourceFolder, ""); } provisioningTemplate.Connector = fileSystemConnector; var applyingInformation = new ProvisioningTemplateApplyingInformation(); applyingInformation.ProgressDelegate = (message, step, total) => { WriteProgress(new ProgressRecord(0, string.Format("Applying template to {0}", SelectedWeb.Url), message) { PercentComplete = (100 / total) * step }); }; applyingInformation.MessagesDelegate = (message, type) => { if (type == ProvisioningMessageType.Warning) { WriteWarning(message); } }; applyingInformation.OverwriteSystemPropertyBagValues = OverwriteSystemPropertyBagValues; SelectedWeb.ApplyProvisioningTemplate(provisioningTemplate, applyingInformation); } }
public void GetTemplateFromWebTest() { ProvisioningTemplate template = ProvisioningHelper.GetTemplateFromWeb(web); if (template != null) { var provider = new XMLFileSystemTemplateProvider(string.Format(@"{0}\..\..\", AppDomain.CurrentDomain.BaseDirectory), ""); provider.SaveAs(template, "Branding.Search.Template.xml"); } Assert.IsNotNull(template); }
public static ProvisioningTemplate GetTemplateFromUrl(string templatesFolder, string templateFile) { ProvisioningTemplate template = null; try { var templateProvider = new XMLFileSystemTemplateProvider(templatesFolder, ""); template = templateProvider.GetTemplate(templateFile); } catch (Exception ex) { Console.WriteLine("ERROR: ProvisioningHelper.GetTemplateFromUrl({0}) - {1}", templateFile, ex.Message); } return template; }
public void GetTemplateForCurrentSiteTest() { using (ClientContext cc = TestCommon.CreateClientContext()) { using (ClientContext ctx = cc.Clone("https://bertonline.sharepoint.com/sites/temp2/s1")) { ProvisioningTemplate p = ctx.Web.GetProvisioningTemplate(); Assert.IsNotNull(p); // Save to file system XMLFileSystemTemplateProvider xmlProv = new XMLFileSystemTemplateProvider("c:\\temp", ""); xmlProv.SaveAs(p, "test.xml"); // Verify that the saved XML is still valid var p2 = xmlProv.GetTemplate("test.xml"); } } }
private static void ExecuteCustomCode() { Console.WriteLine("Hello, SPO!"); Web rw = mysite.RootWeb; /*get sample template Console.WriteLine("Getting template..."); ProvisioningTemplate pt = rw.GetProvisioningTemplate(); XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(@"C:\Users\eskaggs\OneDrive\Code\sharepoint\PnP.ProvEnginePractice\PnP.ProvEnginePractice", ""); string templateName = "template.xml"; provider.SaveAs(pt, templateName); */ //Apply template defined in Template1.xml to the current site Console.WriteLine("Applying template..."); XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(@"C:\Users\eskaggs\OneDrive\Code\sharepoint\PnP.ProvEnginePractice\PnP.ProvEnginePractice", ""); string templateName = "Template1.xml"; ProvisioningTemplate pt = provider.GetTemplate(templateName); rw.ApplyProvisioningTemplate(pt, null); }
public void DumpBaseTemplate_STS0() { using (ClientContext ctx = TestCommon.CreateClientContext()) { using(ClientContext cc = ctx.Clone("https://bertonline.sharepoint.com/sites/templateSTS0")) { // Specify null as base template since we do want "everything" in this case ProvisioningTemplateCreationInformation creationInfo = new ProvisioningTemplateCreationInformation(cc.Web); creationInfo.BaseTemplate = null; ProvisioningTemplate p = cc.Web.GetProvisioningTemplate(creationInfo); p.ID = "STS0template"; // Cleanup before saving p.Security.AdditionalAdministrators.Clear(); XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(".", ""); provider.SaveAs(p, "STS0Template.xml"); } } }
private static ProvisioningTemplate GetProvisioningTemplate(ConsoleColor defaultForeground, string webUrl, string userName, SecureString pwd) { using (var ctx = new ClientContext(webUrl)) { // ctx.Credentials = new NetworkCredentials(userName, pwd); ctx.Credentials = new SharePointOnlineCredentials(userName, pwd); ctx.RequestTimeout = Timeout.Infinite; // Just to output the site details Web web = ctx.Web; ctx.Load(web, w => w.Title); ctx.ExecuteQueryRetry(); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Your site title is:" + ctx.Web.Title); Console.ForegroundColor = defaultForeground; ProvisioningTemplateCreationInformation ptci = new ProvisioningTemplateCreationInformation(ctx.Web); // Create FileSystemConnector, so that we can store composed files temporarely somewhere ptci.FileConnector = new FileSystemConnector(@"c:\temp\pnpprovisioningdemo", ""); ptci.PersistComposedLookFiles = true; ptci.ProgressDelegate = delegate (String message, Int32 progress, Int32 total) { // Only to output progress for console UI Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message); }; // Execute actual extraction of the tepmplate ProvisioningTemplate template = ctx.Web.GetProvisioningTemplate(ptci); // We can also serialize this template for future usage if we want, not really needed XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", ""); provider.SaveAs(template, "PnPProvisioningDemo.xml"); return template; } }
static void Main(string[] args) { string tenantAdminUser = "******"; string tenantAdminPassword = "******"; string siteCollectionUrl = "https://your_tenant.sharepoint.com/sites/entwikipnp"; XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(@"D:\Github\PnP\Samples\Provisioning.Extensibility\Provisioning.Extensibility.Console\Templates\", ""); var template = provider.GetTemplate("PublishingPageProviderDemo.xml"); template.Connector = new FileSystemConnector(@"D:\Github\PnP\Samples\Provisioning.Extensibility\Provisioning.Extensibility.Console\", ""); using (ClientContext context = new ClientContext(siteCollectionUrl)) { context.Credentials = new SharePointOnlineCredentials( tenantAdminUser, tenantAdminPassword.ToSecureString()); context.Web.ApplyProvisioningTemplate(template); } }
protected override void ProcessRecord() { // Determine the output file name and path string outFileName = System.IO.Path.GetFileName(Out); string outPath = new System.IO.FileInfo(Out).DirectoryName; // Determine if it is an .XML or a .PNP file var extension = ""; if (outFileName != null) { if (outFileName.IndexOf(".", StringComparison.Ordinal) > -1) { extension = outFileName.Substring(outFileName.LastIndexOf(".", StringComparison.Ordinal)).ToLower(); } else { extension = ".pnp"; } } var fileSystemConnector = new FileSystemConnector(outPath, ""); ITemplateFormatter formatter = XMLPnPSchemaFormatter.LatestFormatter; if (extension == ".pnp") { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider( Out, fileSystemConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(InputInstance, templateFileName, formatter, TemplateProviderExtensions); } else { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(outPath, ""); provider.SaveAs(InputInstance, Out, formatter, TemplateProviderExtensions); } }
internal static ProvisioningTemplate LoadProvisioningTemplateFromFile(String templatePath, String sessionPath, ITemplateProviderExtension[] templateProviderExtensions) { // Prepare the File Connector FileConnectorBase fileConnector; string templateFileName = System.IO.Path.GetFileName(templatePath); // Prepare the template path if (!System.IO.Path.IsPathRooted(templatePath)) { templatePath = System.IO.Path.Combine(sessionPath, templatePath); } var fileInfo = new FileInfo(templatePath); fileConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); ProvisioningTemplate provisioningTemplate; // Load the provisioning template file Stream stream = fileConnector.GetFileStream(templateFileName); var isOpenOfficeFile = ApplyProvisioningTemplate.IsOpenOfficeFile(stream); XMLTemplateProvider provider; if (isOpenOfficeFile) { provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(templateFileName, fileConnector)); templateFileName = templateFileName.Substring(0, templateFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; } else { provider = new XMLFileSystemTemplateProvider(fileConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + "", ""); } provisioningTemplate = provider.GetTemplate(templateFileName, templateProviderExtensions); provisioningTemplate.Connector = provider.Connector; // Return the result return(provisioningTemplate); }
private void DumpTemplate(ClientContext ctx, string template, string subSiteTemplate = "", string saveAsTemplate = "") { Uri devSiteUrl = new Uri(ConfigurationManager.AppSettings["SPODevSiteUrl"]); string baseUrl = String.Format("{0}://{1}", devSiteUrl.Scheme, devSiteUrl.DnsSafeHost); string siteUrl = ""; if (subSiteTemplate.Length > 0) { siteUrl = string.Format("{1}/sites/template{0}/template{2}", template.Replace("#", ""), baseUrl, subSiteTemplate.Replace("#", "")); #if !CLIENTSDKV15 var siteCollectionUrl = string.Format("{1}/sites/template{0}", template.Replace("#", ""), baseUrl); CreateSiteCollection(template, siteCollectionUrl); using (var sitecolCtx = ctx.Clone(siteCollectionUrl)) { sitecolCtx.Web.Webs.Add(new WebCreationInformation() { Title = string.Format("template{0}", subSiteTemplate), Language = 1033, Url = string.Format("template{0}", subSiteTemplate.Replace("#", "")), UseSamePermissionsAsParentSite = true }); sitecolCtx.ExecuteQueryRetry(); } #endif } else { siteUrl = string.Format("{1}/sites/template{0}", template.Replace("#", ""), baseUrl); #if !CLIENTSDKV15 CreateSiteCollection(template, siteUrl); #endif } using (ClientContext cc = ctx.Clone(siteUrl)) { // Specify null as base template since we do want "everything" in this case ProvisioningTemplateCreationInformation creationInfo = new ProvisioningTemplateCreationInformation(cc.Web); creationInfo.BaseTemplate = null; // Override the save name. Case is online site collection provisioned using blankinternetcontainer#0 which returns // blankinternet#0 as web template using CSOM/SSOM API if (saveAsTemplate.Length > 0) { template = saveAsTemplate; } ProvisioningTemplate p = cc.Web.GetProvisioningTemplate(creationInfo); if (subSiteTemplate.Length > 0) { p.Id = String.Format("{0}template", subSiteTemplate.Replace("#", "")); } else { p.Id = String.Format("{0}template", template.Replace("#", "")); } // Cleanup before saving p.Security.AdditionalAdministrators.Clear(); XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(".", ""); if (subSiteTemplate.Length > 0) { provider.SaveAs(p, String.Format("{0}Template.xml", subSiteTemplate.Replace("#", ""))); } else { provider.SaveAs(p, String.Format("{0}Template.xml", template.Replace("#", ""))); } #if !CLIENTSDKV15 using (var tenantCtx = TestCommon.CreateTenantClientContext()) { Tenant tenant = new Tenant(tenantCtx); Console.WriteLine("Deleting new site {0}", string.Format("{1}/sites/template{0}", template.Replace("#", ""), baseUrl)); tenant.DeleteSiteCollection(siteUrl, false); } #endif } }
protected override void ExecuteCmdlet() { SelectedWeb.EnsureProperty(w => w.Url); if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } if (!string.IsNullOrEmpty(ResourceFolder)) { if (System.IO.Path.IsPathRooted(ResourceFolder)) { ResourceFolder = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, ResourceFolder); } } FileInfo fileInfo = new FileInfo(Path); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, ""); var provisioningTemplate = provider.GetTemplate(fileInfo.Name); if (provisioningTemplate != null) { FileSystemConnector fileSystemConnector = null; if (string.IsNullOrEmpty(ResourceFolder)) { fileSystemConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); } else { fileSystemConnector = new FileSystemConnector(ResourceFolder, ""); } provisioningTemplate.Connector = fileSystemConnector; if (Parameters != null) { foreach (var parameter in Parameters.Keys) { if (provisioningTemplate.Parameters.ContainsKey(parameter.ToString())) { provisioningTemplate.Parameters[parameter.ToString()] = Parameters[parameter].ToString(); } else { provisioningTemplate.Parameters.Add(parameter.ToString(), Parameters[parameter].ToString()); } } } var applyingInformation = new ProvisioningTemplateApplyingInformation(); applyingInformation.ProgressDelegate = (message, step, total) => { WriteProgress(new ProgressRecord(0, string.Format("Applying template to {0}", SelectedWeb.Url), message) { PercentComplete = (100 / total) * step }); }; applyingInformation.MessagesDelegate = (message, type) => { if (type == ProvisioningMessageType.Warning) { WriteWarning(message); } }; applyingInformation.OverwriteSystemPropertyBagValues = OverwriteSystemPropertyBagValues; SelectedWeb.ApplyProvisioningTemplate(provisioningTemplate, applyingInformation); } }
protected override void ProcessRecord() { // Determine the output file name and path string outFileName = System.IO.Path.GetFileName(Out); if (!Path.IsPathRooted(Out)) { Out = Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Out); } bool proceed = false; if (System.IO.File.Exists(Out)) { if (Force || ShouldContinue(string.Format(Properties.Resources.File0ExistsOverwrite, Out), Properties.Resources.Confirm)) { proceed = true; } } else { proceed = true; } string outPath = new System.IO.FileInfo(Out).DirectoryName; // Determine if it is an .XML or a .PNP file var extension = ""; if (proceed && outFileName != null) { if (outFileName.IndexOf(".", StringComparison.Ordinal) > -1) { extension = outFileName.Substring(outFileName.LastIndexOf(".", StringComparison.Ordinal)).ToLower(); } else { extension = ".pnp"; } } var fileSystemConnector = new FileSystemConnector(outPath, ""); ITemplateFormatter formatter = XMLPnPSchemaFormatter.LatestFormatter; if (extension == ".pnp") { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider( Out, fileSystemConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(InputInstance, templateFileName, formatter, TemplateProviderExtensions); } else { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(outPath, ""); provider.SaveAs(InputInstance, Out, formatter, TemplateProviderExtensions); } }
public TestProvisioningTemplateResult TestProvisioningTemplate(ClientContext cc, string templateName, Handlers handlersToProcess = Handlers.All, ProvisioningTemplateApplyingInformation ptai = null, ProvisioningTemplateCreationInformation ptci = null) { try { // Read the template from XML and apply it XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(string.Format(@"{0}\..\..\Framework\Functional", AppDomain.CurrentDomain.BaseDirectory), "Templates"); ProvisioningTemplate sourceTemplate = provider.GetTemplate(templateName); if (ptai == null) { ptai = new ProvisioningTemplateApplyingInformation(); ptai.HandlersToProcess = handlersToProcess; } if (ptai.ProgressDelegate == null) { ptai.ProgressDelegate = delegate (String message, Int32 progress, Int32 total) { Console.WriteLine("Applying template - {0}/{1} - {2}", progress, total, message); }; } sourceTemplate.Connector = provider.Connector; TokenParser sourceTokenParser = new TokenParser(cc.Web, sourceTemplate); cc.Web.ApplyProvisioningTemplate(sourceTemplate, ptai); // Read the site we applied the template to if (ptci == null) { ptci = new ProvisioningTemplateCreationInformation(cc.Web); ptci.HandlersToProcess = handlersToProcess; } if (ptci.ProgressDelegate == null) { ptci.ProgressDelegate = delegate (String message, Int32 progress, Int32 total) { Console.WriteLine("Getting template - {0}/{1} - {2}", progress, total, message); }; } ProvisioningTemplate targetTemplate = cc.Web.GetProvisioningTemplate(ptci); return new TestProvisioningTemplateResult() { SourceTemplate = sourceTemplate, SourceTokenParser = sourceTokenParser, TargetTemplate = targetTemplate, TargetTokenParser = new TokenParser(cc.Web, targetTemplate), }; } catch(Exception ex) { Console.WriteLine(ex.ToDetailedString()); throw; } }
public void XMLFileSystemConvertTemplatesFromV201503toV201505() { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var _source1 = provider.GetTemplate("ProvisioningTemplate-2015-03-Sample-01.xml"); provider.SaveAs(_source1, "ProvisioningTemplate-2015-05-Sample-01.xml", XMLPnPSchemaFormatter.LatestFormatter); var _source2 = provider.GetTemplate("ProvisioningTemplate-2015-03-Sample-02.xml"); provider.SaveAs(_source2, "ProvisioningTemplate-2015-05-Sample-02.xml", XMLPnPSchemaFormatter.LatestFormatter); }
/// <summary> /// Applies actual template on top of given site URL. /// </summary> /// <param name="webFullUrl"></param> /// <param name="siteRequest"></param> public void ApplyCustomTemplateToSite(ClientContext ctx, SiteCollectionRequest siteRequest, string resourcesPath) { // Template to be applied to site ProvisioningTemplate template = null; // Apply modification to provided site switch (siteRequest.ProvisioningType) { case SiteProvisioningType.Identity: // Get template from xml file XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(resourcesPath, ""); template = provider.GetTemplate(siteRequest.TemplateId); break; case SiteProvisioningType.TemplateSite: // Get template from existing site using (ClientContext cc2 = ctx.Clone(siteRequest.TemplateId)) { // Specify null as base template since we do want "everything" in this case ProvisioningTemplateCreationInformation creationInfo = new ProvisioningTemplateCreationInformation(cc2.Web); creationInfo.BaseTemplate = cc2.Web.GetBaseTemplate(); creationInfo.PersistComposedLookFiles = true; creationInfo.FileConnector = new FileSystemConnector(resourcesPath, ""); // Get template from existing site template = cc2.Web.GetProvisioningTemplate(creationInfo); } break; default: break; } // Apply template to the site template.Connector = new FileSystemConnector(resourcesPath, ""); ctx.Web.ApplyProvisioningTemplate(template); }
public void CanSerializeDomainObjectToXML5ByFileLink() { using (Stream _formattedTemplate = new FileStream(this._provisioningTemplatePath5, FileMode.Open, FileAccess.Read, FileShare.Read)) { ITemplateFormatter formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(this._provisioningTemplatePath5NamespaceURI); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); formatter.Initialize(provider); var _pt = formatter.ToProvisioningTemplate(_formattedTemplate, "WORKFLOWSITE"); var _formattedTemplateBack = formatter.ToFormattedTemplate(_pt); Assert.IsTrue(formatter.IsValid(_formattedTemplateBack)); } }
public void CanProvisionObjectsRequiredField() { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(resourceFolder, ""); var template = provider.GetTemplate(resourceFolder + "/" + fileName); FileSystemConnector connector = new FileSystemConnector(resourceFolder, ""); template.Connector = connector; // replace whatever files is in the template with a file we control template.Files.Clear(); template.Files.Add(new Core.Framework.Provisioning.Model.File() { Overwrite = true, Src = fileName, Folder = "Lists/ProjectDocuments" }); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectField().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); new ObjectContentType().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); new ObjectListInstance().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Web.EnsureProperties(w => w.ServerRelativeUrl); var file = ctx.Web.GetFileByServerRelativeUrl( UrlUtility.Combine(ctx.Web.ServerRelativeUrl, UrlUtility.Combine("Lists/ProjectDocuments", fileName))); ctx.Load(file, f => f.Exists); ctx.ExecuteQueryRetry(); Assert.IsTrue(file.Exists); // cleanup for artifacts specific to this test foreach (var list in template.Lists) { ctx.Web.GetListByUrl(list.Url).DeleteObject(); } foreach (var ct in template.ContentTypes) { ctx.Web.GetContentTypeById(ct.Id).DeleteObject(); } var idsToDelete = new List<Guid>(); foreach (var field in ctx.Web.Fields) { if (field.Group == "My Columns") { idsToDelete.Add(field.Id); } } foreach (var guid in idsToDelete) { ctx.Web.GetFieldById<Microsoft.SharePoint.Client.Field>(guid).DeleteObject(); } ctx.ExecuteQueryRetry(); } }
public void XMLFileSystemGetTemplatesTest() { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var result = provider.GetTemplates(); Assert.IsTrue(result.Count == 6); Assert.IsTrue(result[0].Files.Count == 5); Assert.IsTrue(result[1].Files.Count == 5); Assert.IsTrue(result[2].Files.Count == 1); Assert.IsTrue(result[3].Files.Count == 5); Assert.IsTrue(result[4].Files.Count == 1); Assert.IsTrue(result[5].Files.Count == 5); }
public void XMLResolveInvalidXInclude() { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var result = provider.GetTemplate("ProvisioningTemplate-2015-05-NOT-Valid-XInclude-01.xml"); Assert.IsTrue(result.PropertyBagEntries.Count == 0); }
public void ResolveSchemaFormatV201505() { var _expectedID = "SPECIALTEAM"; var _expectedVersion = 1.0; XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var result = provider.GetTemplate("ProvisioningSchema-2015-05-ReferenceSample-01.xml"); Assert.AreEqual(_expectedID, result.Id); Assert.AreEqual(_expectedVersion, result.Version); Assert.IsTrue(result.Lists.Count == 2); Assert.IsTrue(result.Files.Count == 5); Assert.IsTrue(result.SiteFields.Count == 4); }
protected override void BeginProcessing() { if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } if (MyInvocation.BoundParameters.ContainsKey("Out")) { if (!System.IO.Path.IsPathRooted(Out)) { Out = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Out); } } FileInfo fileInfo = new FileInfo(Path); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, ""); var provisioningTemplate = provider.GetTemplate(fileInfo.Name); if (provisioningTemplate != null) { ITemplateFormatter formatter = null; switch (ToSchema) { case XMLPnPSchemaVersion.LATEST: { formatter = XMLPnPSchemaFormatter.LatestFormatter; break; } case XMLPnPSchemaVersion.V201503: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_03); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201505: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_05); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201508: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_08); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201512: { formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_12); break; } case XMLPnPSchemaVersion.V201605: { formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2016_05); break; } } if (!string.IsNullOrEmpty(Out)) { if (File.Exists(Out)) { if (Force || ShouldContinue(string.Format(Resources.File0ExistsOverwrite, Out), Resources.Confirm)) { File.WriteAllText(Out, provisioningTemplate.ToXML(formatter), Encoding); } } else { File.WriteAllText(Out, provisioningTemplate.ToXML(formatter), Encoding); } } else { WriteObject(provisioningTemplate.ToXML(formatter)); } } }
public void CanSerializeDomainObjectWithJsonFormatter() { using (Stream _formattedTemplate = new FileStream(this._provisioningTemplatePath8, FileMode.Open, FileAccess.Read, FileShare.Read)) { ITemplateFormatter formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(this._provisioningTemplatePath8NamespaceURI); XMLTemplateProvider xmlProvider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); formatter.Initialize(xmlProvider); var _pt = formatter.ToProvisioningTemplate(_formattedTemplate, "WORKFLOWSITE"); JsonTemplateProvider jsonProvider = new JsonFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); jsonProvider.SaveAs(_pt, @"c:\temp\ProvisioningSchema-2015-12-FullSample-02.json"); var _ptBack = jsonProvider.GetTemplate(@"c:\temp\ProvisioningSchema-2015-12-FullSample-02.json"); Assert.IsTrue(_pt.Equals(_ptBack)); } }
protected override void ExecuteCmdlet() { SelectedWeb.EnsureProperty(w => w.Url); bool templateFromFileSystem = !Path.ToLower().StartsWith("http"); FileConnectorBase fileConnector; string templateFileName = System.IO.Path.GetFileName(Path); if (templateFromFileSystem) { if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } FileInfo fileInfo = new FileInfo(Path); fileConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); } else { Uri fileUri = new Uri(Path); var webUrl = Microsoft.SharePoint.Client.Web.WebUrlFromFolderUrlDirect(ClientContext, fileUri); var templateContext = ClientContext.Clone(webUrl.ToString()); string library = Path.ToLower().Replace(templateContext.Url.ToLower(), "").TrimStart('/'); int idx = library.IndexOf("/"); library = library.Substring(0, idx); fileConnector = new SharePointConnector(templateContext, templateContext.Url, library); } XMLTemplateProvider provider; ProvisioningTemplate provisioningTemplate; Stream stream = fileConnector.GetFileStream(templateFileName); var isOpenOfficeFile = ApplyProvisioningTemplate.IsOpenOfficeFile(stream); if (isOpenOfficeFile) { provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(templateFileName, fileConnector)); templateFileName = templateFileName.Substring(0, templateFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; } else { if (templateFromFileSystem) { provider = new XMLFileSystemTemplateProvider(fileConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + "", ""); } else { throw new NotSupportedException("Only .pnp package files are supported from a SharePoint library"); } } provisioningTemplate = provider.GetTemplate(templateFileName, TemplateProviderExtensions); if (provisioningTemplate == null) return; GetProvisioningTemplate.SetTemplateMetadata(provisioningTemplate, TemplateDisplayName, TemplateImagePreviewUrl, TemplateProperties); provider.SaveAs(provisioningTemplate, templateFileName, TemplateProviderExtensions); }
// =========================================================================================================== /// <summary> /// Launches the deployer /// </summary> // =========================================================================================================== public void Launch() { // -------------------------------------------------- // Loads the sequences configuration // -------------------------------------------------- LoadSequencesConfiguration(); // -------------------------------------------------- // Maps a template provider to the working directory // -------------------------------------------------- XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(this.WorkingDirectory, string.Empty); // -------------------------------------------------- // Launches the sequences // -------------------------------------------------- foreach (Sequence sequence in this.SequencesConfig.Sequences) { sequence.Launch(this.Credentials, provider); } }
private void ProcessBaseTemplates(List<BaseTemplate> templates, bool deleteSites, bool createSites) { using (var tenantCtx = TestCommon.CreateTenantClientContext()) { tenantCtx.RequestTimeout = Timeout.Infinite; Tenant tenant = new Tenant(tenantCtx); #if !CLIENTSDKV15 if (deleteSites) { // First delete all template site collections when in SPO foreach (var template in templates) { string siteUrl = GetSiteUrl(template); try { Console.WriteLine("Deleting existing site {0}", siteUrl); tenant.DeleteSiteCollection(siteUrl, false); } catch{ } } } if (createSites) { // Create site collections foreach (var template in templates) { string siteUrl = GetSiteUrl(template); Console.WriteLine("Creating site {0}", siteUrl); bool siteExists = false; if (template.SubSiteTemplate.Length > 0) { siteExists = tenant.SiteExists(siteUrl); } if (!siteExists) { tenant.CreateSiteCollection(new Entities.SiteEntity() { Lcid = 1033, TimeZoneId = 4, SiteOwnerLogin = (TestCommon.Credentials as SharePointOnlineCredentials).UserName, Title = "Template Site", Template = template.Template, Url = siteUrl, }, false, true); } if (template.SubSiteTemplate.Length > 0) { using (ClientContext ctx = TestCommon.CreateClientContext()) { using (var sitecolCtx = ctx.Clone(siteUrl)) { sitecolCtx.Web.Webs.Add(new WebCreationInformation() { Title = string.Format("template{0}", template.SubSiteTemplate), Language = 1033, Url = string.Format("template{0}", template.SubSiteTemplate.Replace("#", "")), UseSamePermissionsAsParentSite = true }); sitecolCtx.ExecuteQueryRetry(); } } } } } #endif } // Export the base templates using (ClientContext ctx = TestCommon.CreateClientContext()) { foreach (var template in templates) { string siteUrl = GetSiteUrl(template, false); // Export the base templates using (ClientContext cc = ctx.Clone(siteUrl)) { // Specify null as base template since we do want "everything" in this case ProvisioningTemplateCreationInformation creationInfo = new ProvisioningTemplateCreationInformation(cc.Web); creationInfo.BaseTemplate = null; // Do not extract the home page for the base templates creationInfo.HandlersToProcess ^= Handlers.PageContents; // Override the save name. Case is online site collection provisioned using blankinternetcontainer#0 which returns // blankinternet#0 as web template using CSOM/SSOM API string templateName = template.Template; if (template.SaveAsTemplate.Length > 0) { templateName = template.SaveAsTemplate; } ProvisioningTemplate p = cc.Web.GetProvisioningTemplate(creationInfo); if (template.SubSiteTemplate.Length > 0) { p.Id = String.Format("{0}template", template.SubSiteTemplate.Replace("#", "")); } else { p.Id = String.Format("{0}template", templateName.Replace("#", "")); } // Cleanup before saving p.Security.AdditionalAdministrators.Clear(); // persist the template using the XML provider XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(".", ""); if (template.SubSiteTemplate.Length > 0) { provider.SaveAs(p, String.Format("{0}Template.xml", template.SubSiteTemplate.Replace("#", ""))); } else { provider.SaveAs(p, String.Format("{0}Template.xml", templateName.Replace("#", ""))); } } } } }
public void XMLFileSystemGetTemplate1Test() { var _expectedID = "SPECIALTEAM"; var _expectedVersion = 1.0; XMLTemplateProvider provider = new XMLFileSystemTemplateProvider( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var result = provider.GetTemplate("ProvisioningTemplate-2015-03-Sample-01.xml"); Assert.AreEqual(_expectedID, result.ID); Assert.AreEqual(_expectedVersion, result.Version); Assert.IsTrue(result.Lists.Count == 1); Assert.IsTrue(result.Files.Count == 1); Assert.IsTrue(result.SiteFields.Count == 4); }
static void Main(string[] args) { bool interactiveLogin = true; string templateSiteUrl = "https://bertonline.sharepoint.com/sites/130049"; string targetSiteUrl = "https://bertonline.sharepoint.com/sites/pr1"; // Office 365: [email protected] // OnPrem: DOMAIN\Username string loginId = "*****@*****.**"; // Get pwd from environment variable, so that we do to need to show that. string pwd = ""; if (interactiveLogin) { pwd = GetInput("Password", true); } else { pwd = Environment.GetEnvironmentVariable("MSOPWD", EnvironmentVariableTarget.User); } if (string.IsNullOrEmpty(pwd)) { Console.WriteLine("MSOPWD user environment variable empty or no password was specified, cannot continue. Press any key to abort."); Console.ReadKey(); return; } // Template ProvisioningTemplate template; // Get access to source site using (var ctx = new ClientContext(templateSiteUrl)) { //Provide count and pwd for connecting to the source ctx.Credentials = GetCredentials(targetSiteUrl, loginId, pwd); // Get template from existing site template = ctx.Web.GetProvisioningTemplate(); } // Save template using XML provider XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", ""); string templateName = "template.xml"; provider.SaveAs(template, templateName); // Load the saved model again ProvisioningTemplate p2 = provider.GetTemplate(templateName); // Get the available, valid templates var templates = provider.GetTemplates(); foreach (var template1 in templates) { Console.WriteLine("Found template with ID {0}", template1.Id); } // Get access to target site and apply template using (var ctx = new ClientContext(targetSiteUrl)) { //Provide count and pwd for connecting to the source ctx.Credentials = GetCredentials(targetSiteUrl, loginId, pwd); // Apply template to existing site ctx.Web.ApplyProvisioningTemplate(template); } }
private void ExtractTemplate(XMLPnPSchemaVersion schema, string path, string packageName) { SelectedWeb.EnsureProperty(w => w.Url); var creationInformation = new ProvisioningTemplateCreationInformation(SelectedWeb); if (MyInvocation.BoundParameters.ContainsKey("Handlers")) { creationInformation.HandlersToProcess = Handlers; } if (MyInvocation.BoundParameters.ContainsKey("ExcludeHandlers")) { foreach (var handler in (Handlers[])Enum.GetValues(typeof(Handlers))) { if (!ExcludeHandlers.Has(handler) && handler != Handlers.All) { Handlers = Handlers | handler; } } creationInformation.HandlersToProcess = Handlers; } var extension = ""; if (packageName != null) { if (packageName.IndexOf(".", StringComparison.Ordinal) > -1) { extension = packageName.Substring(packageName.LastIndexOf(".", StringComparison.Ordinal)).ToLower(); } else { packageName += ".pnp"; extension = ".pnp"; } } var fileSystemConnector = new FileSystemConnector(path, ""); if (extension == ".pnp") { creationInformation.FileConnector = new OpenXMLConnector(packageName, fileSystemConnector); } else { creationInformation.FileConnector = fileSystemConnector; } #pragma warning disable 618 creationInformation.PersistBrandingFiles = PersistBrandingFiles || PersistComposedLookFiles; #pragma warning restore 618 creationInformation.PersistPublishingFiles = PersistPublishingFiles; creationInformation.IncludeNativePublishingFiles = IncludeNativePublishingFiles; creationInformation.IncludeSiteGroups = IncludeSiteGroups; creationInformation.IncludeTermGroupsSecurity = IncludeTermGroupsSecurity; #if !SP2013 creationInformation.PersistMultiLanguageResources = PersistMultiLanguageResources; if (!string.IsNullOrEmpty(ResourceFilePrefix)) { creationInformation.ResourceFilePrefix = ResourceFilePrefix; } else { if (Out != null) { FileInfo fileInfo = new FileInfo(Out); var prefix = fileInfo.Name.Substring(0, fileInfo.Name.LastIndexOf(".", StringComparison.Ordinal)); creationInformation.ResourceFilePrefix = prefix; } } #endif if (ExtensibilityHandlers != null) { creationInformation.ExtensibilityHandlers = ExtensibilityHandlers.ToList(); } #pragma warning disable CS0618 // Type or member is obsolete if (NoBaseTemplate) { creationInformation.BaseTemplate = null; } else { creationInformation.BaseTemplate = SelectedWeb.GetBaseTemplate(); } #pragma warning restore CS0618 // Type or member is obsolete creationInformation.ProgressDelegate = (message, step, total) => { WriteProgress(new ProgressRecord(0, $"Extracting Template from {SelectedWeb.Url}", message) { PercentComplete = (100 / total) * step }); }; creationInformation.MessagesDelegate = (message, type) => { if (type == ProvisioningMessageType.Warning) { WriteWarning(message); } }; if (IncludeAllTermGroups) { creationInformation.IncludeAllTermGroups = true; } else { if (IncludeSiteCollectionTermGroup) { creationInformation.IncludeSiteCollectionTermGroup = true; } } var template = SelectedWeb.GetProvisioningTemplate(creationInformation); // Set metadata for template, if any SetTemplateMetadata(template, TemplateDisplayName, TemplateImagePreviewUrl, TemplateProperties); if (!OutputInstance) { ITemplateFormatter formatter = null; switch (schema) { case XMLPnPSchemaVersion.LATEST: { formatter = XMLPnPSchemaFormatter.LatestFormatter; break; } case XMLPnPSchemaVersion.V201503: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_03); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201505: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_05); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201508: { #pragma warning disable CS0618 // Type or member is obsolete formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_08); #pragma warning restore CS0618 // Type or member is obsolete break; } case XMLPnPSchemaVersion.V201512: { formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2015_12); break; } } if (extension == ".pnp") { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider( creationInformation.FileConnector as OpenXMLConnector); var templateFileName = packageName.Substring(0, packageName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } else { if (Out != null) { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(path, ""); provider.SaveAs(template, Path.Combine(path, packageName), formatter, TemplateProviderExtensions); } else { var outputStream = formatter.ToFormattedTemplate(template); var reader = new StreamReader(outputStream); WriteObject(reader.ReadToEnd()); } } } else { WriteObject(template); } }