public void FileConnectorGetFiles2Test() { FileSystemConnector fileSystemConnector = new FileSystemConnector(@".\Resources", ""); var files = fileSystemConnector.GetFiles("Templates"); Assert.IsTrue(files.Count > 0); var files2 = fileSystemConnector.GetFiles(""); Assert.IsTrue(files2.Count > 0); }
internal static ProvisioningTemplate LoadProvisioningTemplateFromFile(string templatePath, Action <Exception> exceptionHandler) { // Prepare the File Connector string templateFileName = System.IO.Path.GetFileName(templatePath); // Prepare the template path var fileInfo = new FileInfo(templatePath); FileConnectorBase fileConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); // Load the provisioning template file Stream stream = fileConnector.GetFileStream(templateFileName); var isOpenOfficeFile = FileUtilities.IsOpenOfficeFile(stream); XMLTemplateProvider provider; if (isOpenOfficeFile) { var openXmlConnector = new OpenXMLConnector(templateFileName, fileConnector); provider = new XMLOpenXMLTemplateProvider(openXmlConnector); if (!String.IsNullOrEmpty(openXmlConnector.Info?.Properties?.TemplateFileName)) { templateFileName = openXmlConnector.Info.Properties.TemplateFileName; } else { templateFileName = templateFileName.Substring(0, templateFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; } } else { provider = new XMLFileSystemTemplateProvider(fileConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + "", ""); } try { ProvisioningTemplate provisioningTemplate = provider.GetTemplate(templateFileName); provisioningTemplate.Connector = provider.Connector; return(provisioningTemplate); } catch (ApplicationException ex) { if (ex.InnerException is AggregateException) { if (exceptionHandler != null) { foreach (var exception in ((AggregateException)ex.InnerException).InnerExceptions) { exceptionHandler(exception); } } } } return(null); }
public void FileConnectorGetFile3Test() { FileSystemConnector fileSystemConnector = new FileSystemConnector(@".", @"wrong"); string file = fileSystemConnector.GetFile("ProvisioningTemplate-2015-03-Sample-01.xml", @"Resources\Templates"); Assert.IsNotNull(file); string file2 = fileSystemConnector.GetFile("Idonotexist.xml", "Templates"); Assert.IsNull(file2); }
protected override void ProcessRecord() { if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } // Load the template ProvisioningTemplate template = ReadProvisioningTemplate .LoadProvisioningTemplateFromFile(Path, TemplateProviderExtensions, (e) => { WriteError(new ErrorRecord(e, "TEMPLATENOTVALID", ErrorCategory.SyntaxError, null)); }); if (template == null) { throw new ApplicationException("Invalid template file!"); } var fileToRemove = template.Files.FirstOrDefault(f => f.Src == FilePath); if (fileToRemove != null) { template.Files.Remove(fileToRemove); template.Connector.DeleteFile(FilePath); if (template.Connector is ICommitableFileConnector) { ((ICommitableFileConnector)template.Connector).Commit(); } // Determine the output file name and path var outFileName = System.IO.Path.GetFileName(Path); var outPath = new FileInfo(Path).DirectoryName; var fileSystemConnector = new FileSystemConnector(outPath, ""); var formatter = XMLPnPSchemaFormatter.LatestFormatter; var extension = new FileInfo(Path).Extension.ToLowerInvariant(); if (extension == ".pnp") { XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider(new OpenXMLConnector(outPath, fileSystemConnector)); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } else { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(Path, ""); provider.SaveAs(template, Path, formatter, TemplateProviderExtensions); } } }
private static string ApplyProvisioningTemplate(ConsoleColor defaultForeground, string webUrl, string userName, SecureString pwd, ProvisioningTemplate template) { string errorMessage = string.Empty; using (var ctx = new ClientContext(webUrl)) { 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; ProvisioningTemplateApplyingInformation ptai = new ProvisioningTemplateApplyingInformation(); ptai.ProgressDelegate = delegate(String message, Int32 progress, Int32 total) { Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message); }; // Associate file connector for assets FileSystemConnector connector = new FileSystemConnector(ConfigurationManager.AppSettings["XMLConfigRootPath"], ""); template.Connector = connector; try { web.ApplyProvisioningTemplate(template, ptai); } catch (Exception ex) { Console.WriteLine("Error Occured.Details:{0}", ex.Message); if (!string.IsNullOrEmpty(ex.Message)) { errorMessage = ex.Message; } else if (!string.IsNullOrEmpty(ex.StackTrace)) { errorMessage = string.Format("Error Occured. Stack Trace:-{0}", ex.StackTrace); } else { errorMessage = string.Format("Error Occured."); } } } return(errorMessage); }
private void AddFileToTemplate(ProvisioningTemplate template, Stream fs, string folder, string fileName, string container) { var source = !string.IsNullOrEmpty(container) ? (container + "/" + fileName) : fileName; template.Connector.SaveFileStream(fileName, container, fs); if (template.Connector is ICommitableFileConnector connector) { connector.Commit(); } var existing = template.Files.FirstOrDefault(f => f.Src == $"{container}/{fileName}" && f.Folder == folder); if (existing != null) { template.Files.Remove(existing); } var newFile = new PnP.Framework.Provisioning.Model.File { Src = source, Folder = folder, Level = FileLevel, Overwrite = FileOverwrite, }; template.Files.Add(newFile); // Determine the output file name and path var outFileName = System.IO.Path.GetFileName(Path); var outPath = new FileInfo(Path).DirectoryName; var fileSystemConnector = new FileSystemConnector(outPath, ""); var formatter = XMLPnPSchemaFormatter.LatestFormatter; var extension = new FileInfo(Path).Extension.ToLowerInvariant(); if (extension == ".pnp") { var provider = new XMLOpenXMLTemplateProvider(template.Connector as OpenXMLConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } else { XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(Path, ""); provider.SaveAs(template, Path, formatter, TemplateProviderExtensions); } }
public void FileConnectorGetFileBytes1Test() { FileSystemConnector fileSystemConnector = new FileSystemConnector(@".\Resources", ""); using (var bytes = fileSystemConnector.GetFileStream("office365.png")) { Assert.IsTrue(bytes.Length > 0); } using (var bytes2 = fileSystemConnector.GetFileStream("Idonotexist.xml")) { Assert.IsNull(bytes2); } }
private static void Main(string[] args) { (new Program()).ApplicationStart(); // Play(); // MagicThread(); // MagicTask(); MagicAsync().GetAwaiter().GetResult(); Console.WriteLine(" end of code "); Log.Warning("end of main method"); FileSystemConnector f = new FileSystemConnector(); f.WriteXml(data, _path) }
internal static ProvisioningHierarchy LoadProvisioningHierarchyFromFile(string templatePath, ITemplateProviderExtension[] templateProviderExtensions) { // Prepare the File Connector string templateFileName = System.IO.Path.GetFileName(templatePath); // Prepare the template path var fileInfo = new FileInfo(templatePath); FileConnectorBase fileConnector = new FileSystemConnector(fileInfo.DirectoryName, ""); // Load the provisioning template file var isOpenOfficeFile = false; using (var stream = fileConnector.GetFileStream(templateFileName)) { isOpenOfficeFile = FileUtilities.IsOpenOfficeFile(stream); } XMLTemplateProvider provider; if (isOpenOfficeFile) { var openXmlConnector = new OpenXMLConnector(templateFileName, fileConnector); provider = new XMLOpenXMLTemplateProvider(openXmlConnector); if (!String.IsNullOrEmpty(openXmlConnector.Info?.Properties?.TemplateFileName)) { templateFileName = openXmlConnector.Info.Properties.TemplateFileName; } else { templateFileName = templateFileName.Substring(0, templateFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; } var hierarchy = (provider as XMLOpenXMLTemplateProvider).GetHierarchy(); if (hierarchy != null) { hierarchy.Connector = provider.Connector; return(hierarchy); } } else { provider = new XMLFileSystemTemplateProvider(fileConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + "", ""); } ProvisioningHierarchy provisioningHierarchy = provider.GetHierarchy(templateFileName); provisioningHierarchy.Connector = provider.Connector; // Return the result return(provisioningHierarchy); }
protected override void ProcessRecord() { // Load the template var template = LoadProvisioningTemplate .LoadProvisioningTemplateFromFile(Path, SessionState.Path.CurrentFileSystemLocation.Path, TemplateProviderExtensions); if (template == null) { throw new ApplicationException("Invalid template file!"); } // Load the file and add it to the .PNP file using (var fs = new FileStream(Source, FileMode.Open, FileAccess.Read, FileShare.Read)) { Folder = Folder.Replace("\\", "/"); var fileName = Source.IndexOf("\\") > 0 ? Source.Substring(Source.LastIndexOf("\\") + 1) : Source; var container = !string.IsNullOrEmpty(Container) ? Container : string.Empty; var source = !string.IsNullOrEmpty(container) ? (container + "/" + fileName) : fileName; template.Connector.SaveFileStream(fileName, container, fs); if (template.Connector is ICommitableFileConnector) { ((ICommitableFileConnector)template.Connector).Commit(); } template.Files.Add(new OfficeDevPnP.Core.Framework.Provisioning.Model.File { Src = source, Folder = Folder, Overwrite = true, }); // Determine the output file name and path var outFileName = System.IO.Path.GetFileName(Path); var outPath = new System.IO.FileInfo(Path).DirectoryName; // Save the template back to the storage var fileSystemConnector = new FileSystemConnector(outPath, ""); var formatter = XMLPnPSchemaFormatter.LatestFormatter; XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider( Path, fileSystemConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } }
public static void GenerateDefaultPnPTemplate(string resourcesPath, string templatePath, string containerName = "") { if (string.IsNullOrEmpty(containerName)) { containerName = "DefaultContainer"; } string templateFilename = System.IO.Path.GetFileName(templatePath); XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(resourcesPath, containerName); FileSystemConnector fileConnector = new FileSystemConnector(resourcesPath, containerName); ProvisioningTemplate template = new ProvisioningTemplate(fileConnector); provider.SaveAs(template, templatePath); }
public void Initialize() { using (var ctx = TestCommon.CreateClientContext()) { var resourceFolder = $@"{AppDomain.CurrentDomain.BaseDirectory}\..\..\Resources"; var template = new ProvisioningTemplate(); var fileSystemConnector = new FileSystemConnector(resourceFolder, string.Empty); template.Connector = fileSystemConnector; template.Files.Add(new Core.Framework.Provisioning.Model.File { Overwrite = true, Src = testPage, Folder = folder }); var parser = new TokenParser(ctx.Web, template); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); } }
public void OpenXMLGetFileFromTemplate() { var fileSystemConnector = new FileSystemConnector(String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var openXMLConnector = new OpenXMLConnector(packageFileName, fileSystemConnector); var file = openXMLConnector.GetFile("garagebg.jpg"); Assert.IsNull(file); file = openXMLConnector.GetFile("garagebg.jpg", "Images"); Assert.IsNotNull(file); Stream stream = openXMLConnector.GetFileStream("garagebg.jpg"); Assert.IsNull(stream); stream = openXMLConnector.GetFileStream("garagebg.jpg", "Images"); Assert.IsNotNull(stream.Length > 0); }
public void OpenXMLDeleteFileFromTemplate() { var fileSystemConnector = new FileSystemConnector( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var openXMLConnector = new OpenXMLConnector(packageFileName, fileSystemConnector); openXMLConnector.DeleteFile("garagelogo.png", "Images"); var image1 = openXMLConnector.GetFileStream("garagelogo.png", "Images"); Assert.IsNull(image1); }
private static void ApplyProvisioningTemplate(ConsoleColor defaultForeground, string webUrl, string userName, SecureString pwd, ProvisioningTemplate template) { 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; // We could potentially also upload the template from file system, but we at least need this for branding file XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", ""); template = provider.GetTemplate("PnPProvisioningDemo.xml"); ProvisioningTemplateApplyingInformation ptai = new ProvisioningTemplateApplyingInformation { ProgressDelegate = delegate(string message, int progress, int total) { Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message); } }; // Associate file connector for assets FileSystemConnector connector = new FileSystemConnector(@"c:\temp\pnpprovisioningdemo", ""); template.Connector = connector; // Since template is actual object, we can modify this using code as needed template.Lists.Add(new ListInstance { Title = "PnP Sample Contacts", Url = "lists/PnPContacts", TemplateType = (int)ListTemplateType.Contacts, EnableAttachments = true }); web.ApplyProvisioningTemplate(template, ptai); } }
protected override void ProcessRecord() { if (String.IsNullOrEmpty(FilePath)) { throw new ArgumentNullException("FilePath"); } // Load the template ProvisioningTemplate template = LoadProvisioningTemplate .LoadProvisioningTemplateFromFile(Path, SessionState.Path.CurrentFileSystemLocation.Path, TemplateProviderExtensions); if (template == null) { throw new ApplicationException("Invalid template file!"); } var fileToRemove = template.Files.FirstOrDefault(f => f.Src == FilePath); if (fileToRemove != null) { template.Files.Remove(fileToRemove); template.Connector.DeleteFile(FilePath); if (template.Connector is ICommitableFileConnector) { ((ICommitableFileConnector)template.Connector).Commit(); } // Determine the output file name and path string outFileName = System.IO.Path.GetFileName(Path); string outPath = new System.IO.FileInfo(Path).DirectoryName; // Save the template back to the storage var fileSystemConnector = new FileSystemConnector(outPath, ""); ITemplateFormatter formatter = XMLPnPSchemaFormatter.LatestFormatter; XMLTemplateProvider provider = new XMLOpenXMLTemplateProvider( Path, fileSystemConnector); var templateFileName = outFileName.Substring(0, outFileName.LastIndexOf(".", StringComparison.Ordinal)) + ".xml"; provider.SaveAs(template, templateFileName, formatter, TemplateProviderExtensions); } }
public void CanProvisionObjects() { var template = new ProvisioningTemplate(); FileSystemConnector connector = new FileSystemConnector(resourceFolder, ""); template.Connector = connector; template.Files.Add(new Core.Framework.Provisioning.Model.File() { Overwrite = true, Src = fileName, Folder = folder }); using (var ctx = TestCommon.CreateClientContext()) { var parser = new TokenParser(ctx.Web, template); new ObjectFiles().ProvisionObjects(ctx.Web, template, parser, new ProvisioningTemplateApplyingInformation()); ctx.Web.EnsureProperties(w => w.ServerRelativeUrl); var serverRelativeUrl = UrlUtility.Combine(ctx.Web.ServerRelativeUrl, UrlUtility.Combine(folder, fileName)); var file = ctx.Web.GetFileByServerRelativeUrl(serverRelativeUrl); // This call will fail as we're creating a file not bound to a list ctx.Load(file); try { ctx.ExecuteQueryRetry(); Assert.IsTrue(file.ServerRelativeUrl.Equals(serverRelativeUrl, StringComparison.InvariantCultureIgnoreCase)); } catch (ServerException ex) { // If this throws ServerException (does not belong to list), then shouldn't be trying to set properties) // Handling the exception stating the "The object specified does not belong to a list." #if !ONPREMISES if (ex.ServerErrorCode != -2113929210) #else if (ex.ServerErrorCode != -2146232832) #endif { throw; } } } }
private static void applyTemplate(string siteUrl, ExecutionContext functionContext, ClientCredentials credentials, TraceWriter log) { try { using (var ctx = new AuthenticationManager().GetAppOnlyAuthenticatedContext(siteUrl, credentials.ClientID, credentials.ClientSecret)) { Web web = ctx.Web; ctx.Load(web, w => w.Title); ctx.ExecuteQueryRetry(); log.Info($"Successfully connected to site: {web.Title}"); string currentDirectory = functionContext.FunctionDirectory; DirectoryInfo dInfo = new DirectoryInfo(currentDirectory); var schemaDir = dInfo.Parent.FullName + "\\Templates"; XMLTemplateProvider sitesProvider = new XMLFileSystemTemplateProvider(schemaDir, ""); log.Info($"About to get template with with filename '{PNP_TEMPLATE_FILE}'"); ProvisioningTemplate template = sitesProvider.GetTemplate(PNP_TEMPLATE_FILE); log.Info($"Successfully found template with ID '{template.Id}'"); ProvisioningTemplateApplyingInformation ptai = new ProvisioningTemplateApplyingInformation { ProgressDelegate = (message, progress, total) => { log.Info(string.Format("{0:00}/{1:00} - {2}", progress, total, message)); } }; // Associate file connector for assets.. FileSystemConnector connector = new FileSystemConnector(Path.Combine(currentDirectory, "Files"), ""); template.Connector = connector; web.ApplyProvisioningTemplate(template, ptai); } } catch (Exception e) { log.Error("Error when applying PnP template!", e); throw; } }
public void FileConnectorSaveStream2Test() { FileSystemConnector fileSystemConnector = new FileSystemConnector(@".", "wrong"); long byteCount = 0; using (var fileStream = System.IO.File.OpenRead(@".\resources\office365.png")) { byteCount = fileStream.Length; fileSystemConnector.SaveFileStream("blabla.png", @"Resources\Templates\newfolder", fileStream); } //read the file using (var bytes = fileSystemConnector.GetFileStream("blabla.png", @"Resources\Templates\newfolder")) { Assert.IsTrue(byteCount == bytes.Length); } // file will be deleted at end of test }
protected override void ExecuteCmdlet() { if (!System.IO.Path.IsPathRooted(Path)) { Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path); } XDocument doc = XDocument.Load(Path); ProvisioningTemplate provisioningTemplate = XMLSerializer.Deserialize <SharePointProvisioningTemplate>(doc).ToProvisioningTemplate(); if (provisioningTemplate != null) { var fileinfo = new FileInfo(Path); FileSystemConnector fileSystemConnector = new FileSystemConnector(fileinfo.DirectoryName, ""); provisioningTemplate.Connector = fileSystemConnector; SelectedWeb.ApplyProvisioningTemplate(provisioningTemplate); } }
private static void OpenXMLSaveTemplateInternal() { var fileSystemConnector = new FileSystemConnector( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var openXMLConnector = new OpenXMLConnector(packageFileName, fileSystemConnector, "OfficeDevPnP Automated Test"); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\Templates\ProvisioningSchema-2015-12-FullSample-02.xml", "", openXMLConnector); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\garagelogo.png", "Images", openXMLConnector); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\garagebg.jpg", "Images", openXMLConnector); if (openXMLConnector is ICommitableFileConnector) { ((ICommitableFileConnector)openXMLConnector).Commit(); } }
public void FileConnectorDelete2Test() { // upload the file FileSystemConnector fileSystemConnector = new FileSystemConnector(@".", "wrong"); using (var fileStream = System.IO.File.OpenRead(@".\resources\office365.png")) { fileSystemConnector.SaveFileStream("blabla.png", @"Resources\Templates", fileStream); } // delete the file fileSystemConnector.DeleteFile("blabla.png", @"Resources\Templates"); //read the file using (var bytes = fileSystemConnector.GetFileStream("blabla.png", @"Resources\Templates")) { Assert.IsNull(bytes); } // file will be deleted at end of test }
public static void Run([QueueTrigger("cncprovisioningqueue", Connection = "AzureWebJobsDashboard")] string myQueueItem, TraceWriter log, ExecutionContext executionContext) { log.Info($"C# Queue trigger function processed: {myQueueItem}"); var authManager = new AuthenticationManager(); var clientContext = authManager.GetAppOnlyAuthenticatedContext(myQueueItem, ConfigurationManager.AppSettings["ClientId"], ConfigurationManager.AppSettings["ClientSecret"]); string currentDirectory = executionContext.FunctionDirectory; DirectoryInfo dInfo = new DirectoryInfo(currentDirectory); log.Info("Current directory:" + currentDirectory); var schemaDir = dInfo.Parent.FullName + "\\PnPSiteSchemas"; log.Info("schemaDir:" + schemaDir); XMLTemplateProvider sitesProvider = new XMLFileSystemTemplateProvider(schemaDir, ""); ProvisioningTemplate template = sitesProvider.GetTemplate("SiteCollectionSchema.xml"); Web web = clientContext.Web; clientContext.Load(web, w => w.Url); clientContext.ExecuteQueryRetry(); log.Info("Applying Provisioning template to site: " + clientContext.Web.Url); ProvisioningTemplateApplyingInformation ptai = new ProvisioningTemplateApplyingInformation { ProgressDelegate = (message, progress, total) => { log.Info(string.Format("{0:00}/{1:00} - {2}", progress, total, message)); } }; // Associate file connector for assets FileSystemConnector connector = new FileSystemConnector(Path.Combine(currentDirectory, "Files"), ""); template.Connector = connector; web.ApplyProvisioningTemplate(template, ptai); }
public static void SimpleProvision(ClientContext ctx) { var provider = new XMLFileSystemTemplateProvider($@"{Environment.CurrentDirectory}\..\..\templates\awesome-team\", ""); var template = provider.GetTemplate("awesome-team.xml"); var connector = new FileSystemConnector($@"{Environment.CurrentDirectory}\..\..\templates\awesome-team\files", ""); template.Connector = connector; var ptai = new ProvisioningTemplateApplyingInformation { ProgressDelegate = delegate(String message, Int32 progress, Int32 total) { Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message); } }; ctx.Web.ApplyProvisioningTemplate(template, ptai); provider.SaveAs(template, "awesome-team.generated.xml"); }
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); } }
public void OpenXMLGetFilesFromFolder() { var fileSystemConnector = new FileSystemConnector( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var openXMLConnector = new OpenXMLConnector(packageFileName, fileSystemConnector, "OfficeDevPnP Automated Test"); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\garagelogo.png", "Images", openXMLConnector); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\garagelogo.png", "Images\\Test", openXMLConnector); SaveFileInPackage(fileSystemConnector.Parameters[FileConnectorBase.CONNECTIONSTRING] + @"\garagebg.jpg", "Images/Test", openXMLConnector); if (openXMLConnector is ICommitableFileConnector) { ((ICommitableFileConnector)openXMLConnector).Commit(); } openXMLConnector = new OpenXMLConnector(packageFileName, fileSystemConnector, "OfficeDevPnP Automated Test"); var folders = openXMLConnector.GetFolders(); Assert.IsTrue(folders.Count > 0); Assert.IsTrue(folders.Exists(s => string.Equals(s, "Images", StringComparison.OrdinalIgnoreCase))); var files = openXMLConnector.GetFiles("Images"); Assert.IsTrue(files.Count > 0); files = openXMLConnector.GetFiles("Images\\Test"); Assert.IsTrue(files.Count == 2); files = openXMLConnector.GetFiles("Images/Test"); Assert.IsTrue(files.Count == 2); }
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 static void ApplyProvisioningTemplate(ConsoleColor defaultForeground, string webUrl, string userName, SecureString pwd, ProvisioningTemplate template) { 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; // We could potentially also upload the template from file system, but we at least need this for branding file //XMLTemplateProvider provider = // new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", ""); //template = provider.GetTemplate("PnPProvisioningDemo.xml"); ProvisioningTemplateApplyingInformation ptai = new ProvisioningTemplateApplyingInformation(); ptai.ProgressDelegate = delegate(String message, Int32 progress, Int32 total) { Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message); }; // Associate file connector for assets FileSystemConnector connector = new FileSystemConnector(@"c:\temp\pnpprovisioningdemo", ""); template.Connector = connector; web.ApplyProvisioningTemplate(template, ptai); } }
public void OpenXMLLoadTemplateOriginal() { var fileSystemConnector = new FileSystemConnector( String.Format(@"{0}\..\..\Resources", AppDomain.CurrentDomain.BaseDirectory), "Templates"); var openXMLConnector = new OpenXMLConnector(packageFileNameBackwardsCompatibility, fileSystemConnector); var templateFile = openXMLConnector.GetFileStream("ProvisioningSchema-2015-12-FullSample-02.xml"); XMLPnPSchemaV201512Formatter formatter = new XMLPnPSchemaV201512Formatter(); Boolean checkTemplate = formatter.IsValid(templateFile); Assert.IsTrue(checkTemplate); var image1 = openXMLConnector.GetFileStream("garagelogo.png", "Images"); Assert.IsNotNull(image1); var image2 = openXMLConnector.GetFileStream("garagebg.jpg", "Images"); Assert.IsNotNull(image2); }
private void ExtractTemplate(string dirName, string fileName, ExtractConfiguration configuration) { var outputTemplate = new ProvisioningTemplate(); outputTemplate.Id = Guid.NewGuid().ToString("N"); var helper = new OfficeDevPnP.Core.Framework.Provisioning.ObjectHandlers.Utilities.ClientSidePageContentsHelper(); ProvisioningTemplateCreationInformation ci = null; if (configuration != null) { ci = configuration.ToCreationInformation(SelectedWeb); } else { ci = new ProvisioningTemplateCreationInformation(SelectedWeb); } if (MyInvocation.BoundParameters.ContainsKey(nameof(PersistBrandingFiles))) { ci.PersistBrandingFiles = PersistBrandingFiles; } if (!string.IsNullOrEmpty(dirName)) { var fileSystemConnector = new FileSystemConnector(dirName, ""); ci.FileConnector = fileSystemConnector; } helper.ExtractClientSidePage(SelectedWeb, outputTemplate, ci, new OfficeDevPnP.Core.Diagnostics.PnPMonitoredScope(), null, Identity.Name, false); if (!string.IsNullOrEmpty(fileName)) { System.IO.File.WriteAllText(Path.Combine(dirName, fileName), outputTemplate.ToXML()); } else { WriteObject(outputTemplate.ToXML()); } }