コード例 #1
0
        public static void Apply(Web web, string templatePath, string templateFileName)
        {
            try
            {
                Handlers DefaultHandlers = Handlers.All;
                // Get source template
                var sourceCreationInformation = new ProvisioningTemplateCreationInformation(web)
                {
                    HandlersToProcess = DefaultHandlers,
                };
                sourceCreationInformation.ProgressDelegate = (message, step, total) =>
                {
                    LogWriter.Current.WriteLine(string.Format("{0}/{1} Extracting {2}", step, total, message));
                };

                // Get template from existing site
                ProvisioningTemplate template = web.GetProvisioningTemplate(sourceCreationInformation);

                // Save template using XML provider
                templatePath = templatePath.ToLower();
                XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(@"" + templatePath, "");
                provider.SaveAs(template, templateFileName);
            }
            catch (Exception ex)
            {
                LogWriter.Current.WriteLine(string.Format("Error extracting template {0} : {1} - {2}", templateFileName, ex.Message, ex.StackTrace));
            }
        }
コード例 #2
0
        public void CanProvisionSite()
        {
            if (TestCommon.AppOnlyTesting())
            {
                Assert.Inconclusive("Template requires term store work, so this will not work in app-only");
            }

            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(
                    String.Format(@"{0}\..\..\Resources",
                                  AppDomain.CurrentDomain.BaseDirectory),
                    "Templates");

            var hierarchy = provider.GetHierarchy("ProvisioningSchema-2019-03-FullSample-01.xml");

            CanProvisionResult result = null;

            using (var pnpContext = new PnPProvisioningContext())
            {
                using (var context = TestCommon.CreateClientContext())
                {
                    var applyingInformation = new ProvisioningTemplateApplyingInformation();
                    result = CanProvisionRulesManager.CanProvision(context.Web, hierarchy.Templates[0], applyingInformation);
                }
            }

            Assert.IsNotNull(result);
#if ONPREMISES
            // Because the "apps" rule is verified here
            Assert.IsFalse(result.CanProvision);
#else
            Assert.IsTrue(result.CanProvision);
#endif
        }
コード例 #3
0
        public void XMLEncryptionTest()
        {
            X509Certificate2 certificate = RetrieveCertificateFromStore(new X509Store(StoreLocation.CurrentUser), "PnPTestCertificate");

            if (certificate == null)
            {
                Assert.Inconclusive("Missing certificate with SN=PnPTestCertificate in CurrentUser Certificate Store, so can't test");
            }

            XMLEncryptionTemplateProviderExtension extension =
                new XMLEncryptionTemplateProviderExtension();

            extension.Initialize(certificate);

            ITemplateProviderExtension[] extensions = new ITemplateProviderExtension[] { extension };

            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(
                    String.Format(@"{0}\..\..\Resources",
                                  AppDomain.CurrentDomain.BaseDirectory),
                    "Templates");

            var template = provider.GetTemplate("ProvisioningTemplate-2016-05-Sample-01.xml");

            template.DisplayName = "Ciphered template";

            provider.SaveAs(template, "ProvisioningTemplate-2016-05-Ciphered.xml", extensions);
            var result = provider.GetTemplate("ProvisioningTemplate-2016-05-Ciphered.xml", extensions);

            provider.Delete("ProvisioningTemplate-2016-05-Ciphered.xml");

            Assert.IsTrue(result.DisplayName == "Ciphered template");
        }
コード例 #4
0
        public void ExportPagesTest()
        {
            using (var clientContext = TestCommon.CreateClientContext("https://bertonline.sharepoint.com/sites/TheLanding1"))
            {
                ProvisioningTemplateCreationInformation ptci = new ProvisioningTemplateCreationInformation(clientContext.Web)
                {
                    // Limit the amount of handlers in this demo
                    HandlersToProcess = Handlers.PageContents,
                    // Create FileSystemConnector, so that we can store composed files temporarely somewhere
                    FileConnector             = new FileSystemConnector(@"d:\temp\modernpages", ""),
                    PersistBrandingFiles      = true,
                    IncludeAllClientSidePages = true,
                    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 = clientContext.Web.GetProvisioningTemplate(ptci);

                // Serialize to XML using the beta 201705 schema
                XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(@"d:\temp\modernpages", "");
                var formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(XMLConstants.PROVISIONING_SCHEMA_NAMESPACE_2021_03);
                provider.SaveAs(template, "TheLandingMultiLingual.xml", formatter);
            }
        }
コード例 #5
0
        private void ExtractCompleteSPOWebElements(ClientContext ctx, Web extractionWeb, string templateName, string currentDirectory, ILogger logger)
        {
            try
            {
                XMLTemplateProvider provider =
                    new XMLFileSystemTemplateProvider(Environment.CurrentDirectory, "");

                var ptci = new ProvisioningTemplateCreationInformation(extractionWeb);
                ctx.Load(extractionWeb.ParentWeb);
                ctx.ExecuteQuery();
                if (extractionWeb.ParentWeb.ServerObjectIsNull.Value)
                {
                    ptci.IncludeSiteCollectionTermGroup = true;
                    ptci.IncludeAllTermGroups           = true;
                }

                ProvisioningTemplate template = extractionWeb.GetProvisioningTemplate(ptci);

                provider.SaveAs(template, templateName);
                SplitTemplateFile(ctx, extractionWeb, string.Format("{0}\\{1}.--.complete-template.xml", Environment.CurrentDirectory, extractionWeb.Title), currentDirectory, logger);
                logger.LogMessage(string.Format("Completed template file is extracted for '{0}'.", extractionWeb.Title), LogType.Info);
            }
            catch (Exception ex)
            {
                logger.LogMessage(string.Format(Constants.UnknownError, ex.Message), LogType.ErrorAndContinue);
            }
        }
コード例 #6
0
        public void CanProvisionHierarchy()
        {
            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(
                    String.Format(@"{0}\..\..\Resources",
                                  AppDomain.CurrentDomain.BaseDirectory),
                    "Templates");

            var hierarchy = provider.GetHierarchy("ProvisioningSchema-2019-03-FullSample-01.xml");

            CanProvisionResult result = null;

            using (var pnpContext = new PnPProvisioningContext())
            {
                using (var tenantContext = TestCommon.CreateTenantClientContext())
                {
                    var applyingInformation = new ProvisioningTemplateApplyingInformation();
                    var tenant = new Tenant(tenantContext);
                    result = CanProvisionRulesManager.CanProvision(tenant, hierarchy, String.Empty, applyingInformation);
                }
            }

            Assert.IsNotNull(result);
            Assert.IsTrue(result.CanProvision);
        }
コード例 #7
0
        internal static ProvisioningTemplate LoadProvisioningTemplateFromFile(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
            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 provisioningTemplate = provider.GetTemplate(templateFileName, templateProviderExtensions);

            provisioningTemplate.Connector = provider.Connector;

            // Return the result
            return(provisioningTemplate);
        }
コード例 #8
0
        protected override void ExecuteCmdlet()
        {
            ExtractConfiguration extractConfiguration = null;

            if (ParameterSpecified(nameof(Configuration)))
            {
                extractConfiguration = Configuration.GetConfiguration(SessionState.Path.CurrentFileSystemLocation.Path);
                if (!string.IsNullOrEmpty(SiteUrl))
                {
                    if (extractConfiguration.Tenant.Sequence == null)
                    {
                        extractConfiguration.Tenant.Sequence = new OfficeDevPnP.Core.Framework.Provisioning.Model.Configuration.Tenant.Sequence.ExtractSequenceConfiguration();
                    }
                    extractConfiguration.Tenant.Sequence.SiteUrls.Add(SiteUrl);
                }
            }

            if (ParameterSetName == PARAMETERSET_ASFILE)
            {
                ProvisioningHierarchy tenantTemplate = null;

                if (!Path.IsPathRooted(Out))
                {
                    Out = Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Out);
                }
                if (Out.ToLower().EndsWith(".pnp"))
                {
                    WriteWarning("This cmdlet does not save a tenant template as a PnP file.");
                }
                var fileInfo            = new FileInfo(Out);
                var fileSystemConnector = new FileSystemConnector(fileInfo.DirectoryName, "");

                extractConfiguration.FileConnector = fileSystemConnector;

                var proceed = false;
                if (File.Exists(Out))
                {
                    if (Force || ShouldContinue(string.Format(Resources.File0ExistsOverwrite, Out), Resources.Confirm))
                    {
                        proceed = true;
                    }
                }
                else
                {
                    proceed = true;
                }

                if (proceed)
                {
                    tenantTemplate = ExtractTemplate(extractConfiguration);

                    XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, "");
                    provider.SaveAs(tenantTemplate, Out);
                }
            }
            else
            {
                WriteObject(ExtractTemplate(extractConfiguration));
            }
        }
コード例 #9
0
ファイル: SPORemoteActions.cs プロジェクト: zudaike/PnP
        public static void ProvisionArtifactsByTemplate()
        {
            // Create a PnP AuthenticationManager object
            AuthenticationManager am = new AuthenticationManager();

            // Authenticate against SPO with an App-Only access token
            using (ClientContext context = am.GetAzureADAppOnlyAuthenticatedContext(
                       O365ProjectsAppContext.CurrentSiteUrl, O365ProjectsAppSettings.ClientId,
                       O365ProjectsAppSettings.TenantId, O365ProjectsAppSettings.AppOnlyCertificate))
            {
                Web web = context.Web;

                // Load the template from the file system
                XMLTemplateProvider provider =
                    new XMLFileSystemTemplateProvider(
                        String.Format(HttpContext.Current.Server.MapPath(".")),
                        "ProvisioningTemplates");

                ProvisioningTemplate template = provider.GetTemplate("O365ProjectsAppSite.xml");

                // Configure the AppSiteUrl parameter
                template.Parameters["AppSiteUrl"] = O365ProjectsAppContext.CurrentAppSiteUrl;

                // Apply the template to the target site
                template.Connector = provider.Connector;
                web.ApplyProvisioningTemplate(template);
            }
        }
コード例 #10
0
        protected override void ProcessRecord()
        {
            if (!System.IO.Path.IsPathRooted(Path))
            {
                Path = System.IO.Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, Path);
            }
            // Load the template
            var template = LoadProvisioningTemplate
                           .LoadProvisioningTemplateFromFile(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 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);
                }
            }
        }
コード例 #11
0
        protected override void ProcessRecord()
        {
            // Determine the output file name and path
            string outFileName = 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 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);
            }
        }
コード例 #12
0
        public void CanSerializeDomainObjectWithJsonFormatter()
        {
            using (Stream _formattedTemplate = new FileStream(this._provisioningTemplatePath5, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                ITemplateFormatter formatter = XMLPnPSchemaFormatter.GetSpecificFormatter(this._provisioningTemplatePath5NamespaceURI);

                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-05-ReferenceSample-01.json");

                var _ptBack = jsonProvider.GetTemplate(@"c:\temp\ProvisioningSchema-2015-05-ReferenceSample-01.json");

                Assert.IsTrue(_pt.Equals(_ptBack));
            }
        }
コード例 #13
0
        public static void Apply(Web web, string templatePath, string templateName)
        {
            try
            {
                LogWriter.Current.WriteLine("Applying " + templateName);
                // Connector to file system. Use current .exe folder as root, don't specify a subfolder
                var connector = new FileSystemConnector(LocalFilePaths.LocalPath, string.Empty);
                // Provider to get template
                XMLTemplateProvider provider = new XMLFileSystemTemplateProvider();
                provider.Connector = connector;
                var result = provider.GetTemplate(templatePath + "\\" + templateName);

                // Connector needs to be specified once more in ProvisioningTemplate because he is not copied from the provider on template creation
                result.Connector = connector;
                var applyingInformation = new ProvisioningTemplateApplyingInformation();
                applyingInformation.ProgressDelegate = (message, step, total) =>
                {
                    LogWriter.Current.WriteLine(string.Format("{0}/{1} Provisioning {2}", step, total, message));
                };

                web.ApplyProvisioningTemplate(result, applyingInformation);
            }
            catch (Exception ex)
            {
                LogWriter.Current.WriteLine(string.Format("Error applying template {0} : {1} - {2}", templateName, ex.Message, ex.StackTrace));
            }
        }
コード例 #14
0
        private static void GenerateProvisioningTemplate(LoadProvisioningInfo info, string appDirectory)
        {
            var context = Helper.GetADAppOnlyContext(info.WebUrl, appDirectory);

            using (context)
            {
                Web web = context.Web;
                context.Load(web, w => w.Title);
                context.ExecuteQueryRetry();
                ProvisioningTemplateCreationInformation ptci
                    = new ProvisioningTemplateCreationInformation(context.Web);

                // Create FileSystemConnector to store a temporary copy of the template
                ptci.FileConnector        = new FileSystemConnector(Path.GetTempPath(), "");
                ptci.PersistBrandingFiles = true;

                ptci.HandlersToProcess = info.Handlers;
                // Execute actual extraction of the template
                ProvisioningTemplate template = context.Web.GetProvisioningTemplate(ptci);

                // We can serialize this template to save and reuse it
                // Optional step
                XMLTemplateProvider provider =
                    new XMLFileSystemTemplateProvider(Path.GetTempPath(), "");
                provider.SaveAs(template, Configs.FileName);
            }
        }
コード例 #15
0
        /// <summary>
        /// Load template file in fileSystem
        /// dirPath: It be use to returned the final directory XML
        /// </summary>
        public static ProvisioningTemplate ReadTemplateFromUrl(string name, out string dirPath, string directory = "")
        {
            ProvisioningTemplate template = null;

            try
            {
                string path = ""; // Check directory if not get current
                if (string.IsNullOrEmpty(directory))
                {
                    directory = System.Reflection.Assembly.GetExecutingAssembly().Location;
                }
                path = Path.GetDirectoryName(directory);
                path = Path.Combine(path, mainFolder, string.Concat(name, mainExtension));
                FileInfo fileInfo = new FileInfo(path);

                XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(fileInfo.DirectoryName, "");

                template = provider.GetTemplate(fileInfo.Name); // Get XML file
                dirPath  = fileInfo.DirectoryName;              // Use for upload files
            } catch (Exception ex)
            {
                dirPath = "";
                LogHelper.writeError(string.Concat("A problem happend when try to read the template from file system. ", ex.Message));
            }
            return(template);
        }
コード例 #16
0
        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;
            }
        }
コード例 #17
0
        internal static ProvisioningTemplate LoadProvisioningTemplateFromFile(string templatePath, ITemplateProviderExtension[] templateProviderExtensions, 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);

            if (stream == null)
            {
                throw new FileNotFoundException($"File {templatePath} does not exist.", templatePath);
            }

            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, templateProviderExtensions);
                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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
        public static ProvisioningTemplate GenerateProvisioningTemplate(ConsoleColor defaultForeground, ClientContext ctx, string filePath, string fileName)
        {
            //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;

                var ptci = new ProvisioningTemplateCreationInformation(ctx.Web);

                // Create FileSystemConnector to store a temporary copy of the template
                ptci.FileConnector            = new FileSystemConnector(filePath, "");
                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);
                };
                //ptci.IncludeAllTermGroups = true;
                ptci.IncludeAllTermGroups           = false;
                ptci.IncludeNativePublishingFiles   = false;
                ptci.IncludeSearchConfiguration     = false;
                ptci.IncludeSiteCollectionTermGroup = false;
                ptci.IncludeSiteGroups         = false;
                ptci.IncludeTermGroupsSecurity = false;

                //ptci.HandlersToProcess = Handlers.All;

                //ALL
                ptci.HandlersToProcess = Handlers.AuditSettings | Handlers.ComposedLook | Handlers.ContentTypes | Handlers.CustomActions | Handlers.ExtensibilityProviders | Handlers.Features | Handlers.Fields | Handlers.Files | Handlers.Lists | Handlers.Navigation | Handlers.PageContents | Handlers.Pages | Handlers.PropertyBagEntries | Handlers.Publishing | Handlers.RegionalSettings | Handlers.SearchSettings;// | Handlers.WebSettings;

                //PART 1
                //ptci.HandlersToProcess = Handlers.ContentTypes | Handlers.Fields | Handlers.Files | Handlers.Lists;

                //PART 2
                //ptci.HandlersToProcess = Handlers.Files | Handlers.Pages;

                //ptci.HandlersToProcess = Handlers.PageContents | Handlers.Pages | Handlers.PropertyBagEntries | Handlers.Publishing | Handlers.RegionalSettings | Handlers.SearchSettings | Handlers.WebSettings;

                // Execute actual extraction of the template
                ProvisioningTemplate template = ctx.Web.GetProvisioningTemplate(ptci);

                // We can serialize this template to save and reuse it
                // Optional step
                var provider = new XMLFileSystemTemplateProvider(filePath, "");
                provider.SaveAs(template, fileName);

                return(template);
            }
        }
コード例 #20
0
        private static void GetProvisioningTemplate(ClientContext clientContext, string path = @"c:\temp\pnpprovisioningdemo")
        {
            var webTemplateCreationInformation = new ProvisioningTemplateCreationInformation(clientContext.Web);
            var template = clientContext.Web.GetProvisioningTemplate(webTemplateCreationInformation);
            XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(@"c:\temp\pnpprovisioningdemo", "");

            provider.SaveAs(template, "PnPProvisioning.xml");
        }
コード例 #21
0
        private static ProvisioningTemplate GetTemplateFromXmlFile(string filePath)
        {
            var path     = System.IO.Path.GetDirectoryName(filePath);
            var fileName = System.IO.Path.GetFileName(filePath);
            XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(path, "");

            return(provider.GetTemplate(fileName));
        }
コード例 #22
0
        public void CanProvisionHierarchy()
        {
            if (TestCommon.AppOnlyTesting())
            {
                Assert.Inconclusive("Template requires term store work, so this will not work in app-only");
            }

            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(
                    String.Format(@"{0}\..\..\..\Resources",
                                  AppDomain.CurrentDomain.BaseDirectory),
                    "Templates");

            var hierarchy = provider.GetHierarchy("ProvisioningSchema-2019-03-FullSample-01.xml");

            var applyingInformation = new ProvisioningTemplateApplyingInformation();

            if (TestCommon.AppOnlyTesting())
            {
                bool templateSupportsAppOnly = true;

                if (applyingInformation.HandlersToProcess.Has(PnP.Framework.Provisioning.Model.Handlers.TermGroups) ||
                    applyingInformation.HandlersToProcess.Has(PnP.Framework.Provisioning.Model.Handlers.SearchSettings))
                {
                    if (hierarchy.Templates.Count > 0)
                    {
                        foreach (var template in hierarchy.Templates)
                        {
                            templateSupportsAppOnly = this.IsTemplateSupportedForAppOnly(template);
                            if (!templateSupportsAppOnly)
                            {
                                break;
                            }
                        }
                    }
                }

                if (!templateSupportsAppOnly)
                {
                    Assert.Inconclusive("Taxonomy and SearchSettings tests are not supported when testing using app-only context.");
                }
            }

            CanProvisionResult result = null;

            using (var pnpContext = new PnPProvisioningContext())
            {
                using (var tenantContext = TestCommon.CreateTenantClientContext())
                {
                    var tenant = new Tenant(tenantContext);
                    result = CanProvisionRulesManager.CanProvision(tenant, hierarchy, String.Empty, applyingInformation);
                }
            }

            Assert.IsNotNull(result);
            Assert.IsTrue(result.CanProvision);
            Assert.IsTrue(result.CanProvision);
        }
コード例 #23
0
        /// <summary>
        /// Save export template to file in fileSystem
        /// </summary>
        public static void SaveTemplateFromUrl(ProvisioningTemplate template, string directory, string fileName)
        {
            string templateName = !string.IsNullOrEmpty(fileName) ? fileName : "template";
            // We can serialize this template to save and reuse it
            // Optional step
            XMLTemplateProvider provider = new XMLFileSystemTemplateProvider(directory, "");

            provider.SaveAs(template, string.Concat(templateName, ".xml"));
        }
コード例 #24
0
        public static void RunXmlFiles(ClientContext ctx)
        {
            //To run XML files change the template name and the path of the file.
            XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(@"C:\Users\lucho\source\repos\OfficeDev1\FinalAssignment\Common\XML", "");
            string templateName           = "assignment.xml";
            ProvisioningTemplate template = provider.GetTemplate(templateName);

            ctx.Web.ApplyProvisioningTemplate(template);
        }
コード例 #25
0
ファイル: Program.cs プロジェクト: sr3007/CoxComm
        private static bool Auto_ProcessSubsites(ListItemCollection subsiterequests, ClientContext ctx)
        {
            bool         processed         = false;
            ConsoleColor defaultForeground = Console.ForegroundColor;

            foreach (ListItem ssite in subsiterequests)
            {
                if (ssite != null)
                {
                    Web  newlycreatedWeb;
                    bool proceedwithProvisioning = false;
                    ProvisioningTemplate subsitetemplate;
                    string siteUrl                  = Convert.ToString(ssite["SiteUrl"]);
                    string fullsubsiteurl           = Convert.ToString(ssite["SiteBaseUrl"]) + siteUrl;
                    string subsite_TemplateFileName = Convert.ToString(ssite["TemplateFileName"]);
                    string subsiteTemplateID        = Convert.ToString(ssite["TemplateID"]);
                    bool   result = Auto_WebExists(Convert.ToString(ssite["SiteBaseUrl"]), fullsubsiteurl, subsitecheck);
                    if (!result)
                    {
                        newlycreatedWeb = Auto_CreateSubSite(Convert.ToString(ssite["SiteBaseUrl"]), Convert.ToString(ssite["SiteName"]), Convert.ToString(ssite["Description"]), subsiteTemplateID, siteUrl);
                        if (newlycreatedWeb != null)
                        {
                            UpdateStatusToList(ssite.Id, SubSite_Created, "Created at " + DateTime.Now.ToString());
                            proceedwithProvisioning = true;
                        }
                        else
                        {
                            UpdateStatusToList(ssite.Id, SubSite_Creation_Failed, "Failed at " + DateTime.Now.ToString());
                            Console.WriteLine("Skipped provisioning of site {0}.Problem while creating subsite.", Convert.ToString(ssite["SiteUrl"]));
                        }
                    }
                    else
                    {
                        UpdateStatusToList(ssite.Id, Failure_SubSite_Exists, string.Format("Subsite with url already exist{0} at {1}", fullsubsiteurl, DateTime.Now.ToString()));
                        proceedwithProvisioning = false;
                    }
                    if (proceedwithProvisioning)
                    {
                        var subsiteConfigPath = string.Format("{0}\\{1}\\{2}", System.IO.Directory.GetCurrentDirectory(), ConfigurationManager.AppSettings["XMLConfigRootPath"], subsite_TemplateFileName);
                        XMLTemplateProvider subsiteprovider = new XMLFileSystemTemplateProvider(ConfigurationManager.AppSettings["XMLConfigRootPath"], "");
                        subsitetemplate = subsiteprovider.GetTemplate(subsiteConfigPath);
                        string errorOccuredMessage = Auto_ApplyProvisioningTemplate(defaultForeground, fullsubsiteurl, subsitetemplate);
                        if (string.IsNullOrEmpty(errorOccuredMessage))
                        {
                            UpdateStatusToList(ssite.Id, Completed_Template_Provisioning, "Provisioned successfully at " + DateTime.Now.ToString());
                        }
                        else
                        {
                            UpdateStatusToList(ssite.Id, Failed_Template_Provisioning, string.Format("Subsite Provisioning failed.{0}", errorOccuredMessage));
                        }
                    }
                }
            }
            processed = true;
            return(processed);
        }
コード例 #26
0
ファイル: Program.cs プロジェクト: mmohamedbasith/Provision
        static void Main(string[] args)
        {
            try
            {
                ConsoleColor defaultForeground = Console.ForegroundColor;

                // Collect information
                // string templateWebUrl = GetInput("Enter the URL of the template site: ", false, defaultForeground);
                string targetWebUrl = GetInput("Enter the URL of the target site: ", false, defaultForeground);
                string userName     = GetInput("Enter your user name:", false, defaultForeground);
                string pwdS         = GetInput("Enter your password:"******"Get XMl Path:", false, defaultForeground);
                string filename     = GetInput("Get XMl filename:", false, defaultForeground);

                SecureString pwd = new SecureString();

                foreach (char c in pwdS.ToCharArray())
                {
                    pwd.AppendChar(c);
                }
                using (var context = new ClientContext(targetWebUrl))
                {
                    context.Credentials = new SharePointOnlineCredentials(userName, pwd);
                    Web web = context.Web;
                    context.Load(web, w => w.Title);
                    context.ExecuteQueryRetry();
                    XMLTemplateProvider provider =
                        new XMLFileSystemTemplateProvider(filepath, "");


                    ProvisioningTemplate template = provider.GetTemplate(filename);
                    ProvisioningTemplateApplyingInformation ptai =
                        new ProvisioningTemplateApplyingInformation();
                    ptai.ProgressDelegate = delegate(String message, Int32 progress, Int32 total)
                    {
                        Console.WriteLine("{0:00}/{1:00} - {2}", progress, total, message);
                    };



                    template.Connector = provider.Connector;

                    web.ApplyProvisioningTemplate(template, ptai);
                }
                // Get the template from existing site and serialize that (not really needed)
                // Just to pause and indicate that it's all done
                Console.ForegroundColor = ConsoleColor.White;
                Console.WriteLine("We are all done. Press enter to continue.");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
コード例 #27
0
ファイル: Program.cs プロジェクト: javierdc/ProposalManager
        static void Main(string[] args)
        {
            Console.WriteLine("Document id activation started...");
            // Grab site from arguments
            var siteUrl      = args[0];
            var adminSiteUrl = new Uri(siteUrl.Replace(".sharepoint.com", "-admin.sharepoint.com")).GetLeftPart(UriPartial.Authority);

            Console.WriteLine($"Site url is \"{siteUrl}\"");
            // Grab client credentials from configuration
            var appId     = AppSettings["AppId"];
            var appSecret = AppSettings["AppSecret"];

            // Load the provisioning template
            Console.WriteLine("Loading template...");
            TemplateProviderBase templateProvider = new XMLFileSystemTemplateProvider(".\\", string.Empty);
            var template = templateProvider.GetTemplate("OpportunitySite.xml");

            Console.WriteLine("Template successfully parsed.");
            // Authenticate using the client credentials flow
            Console.WriteLine("Attempting OAuth authentication...");
            // Prepare site
            var retries = 0;

            do
            {
                try
                {
                    var adminAuthenticationManager = new AuthenticationManager();
                    using (var adminContext = adminAuthenticationManager.GetAppOnlyAuthenticatedContext(adminSiteUrl, appId, appSecret))
                    {
                        var tenant = new Tenant(adminContext);
                        tenant.SetSiteProperties(siteUrl, noScriptSite: false);
                        adminContext.ExecuteQuery();
                        var authenticationManager = new AuthenticationManager();
                        using (var context = authenticationManager.GetAppOnlyAuthenticatedContext(siteUrl, appId, appSecret))
                        {
                            Console.WriteLine("Succesfully authenticated. Provisioning...");
                            // Apply the provisioning template
                            context.Web.ApplyProvisioningTemplate(template);
                            Console.WriteLine("Provisioning was successful.");
                        }
                    }
                    return;
                }
                catch (Exception ex)
                {
                    var errorMessage = $"Provisioning failed: {ex.Message}. Retry #{retries}.";
                    Console.WriteLine(errorMessage);
                    retries++;
                    Thread.Sleep(5000);
                }
            } while (retries < 10);

            throw new Exception($"Document Id Activation failed after {retries}. Please activate it manually");
        }
コード例 #28
0
        public static ProvisioningTemplate GetProvisioningTemplateFromResourcePath(string templateName, string resourcesPath, string folderName, string provisionResourceFolderPath)
        {
            // Template to be applied to site
            ProvisioningTemplate          template = null;
            XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(resourcesPath, folderName);

            template           = provider.GetTemplate(templateName);
            template.Connector = new FileSystemConnector(provisionResourceFolderPath, "");

            return(template);
        }
コード例 #29
0
        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, baseUrl, subSiteTemplate));
            }
            else
            {
                siteUrl = (String.Format("{1}/sites/template{0}", template, baseUrl));
            }

            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);
                }
                else
                {
                    p.Id = String.Format("{0}template", template);
                }

                // Cleanup before saving
                p.Security.AdditionalAdministrators.Clear();


                XMLFileSystemTemplateProvider provider = new XMLFileSystemTemplateProvider(".", "");
                if (subSiteTemplate.Length > 0)
                {
                    provider.SaveAs(p, String.Format("{0}Template.xml", subSiteTemplate));
                }
                else
                {
                    provider.SaveAs(p, String.Format("{0}Template.xml", template));
                }
            }
        }
コード例 #30
0
ファイル: SPHelper.cs プロジェクト: spdavid/SP2018
        public static void CreateFieldsFromProvisioningXML(ClientContext ctx)
        {
            string folderPath            = @"C:\Users\DavidOpdendries\source\SP2018\OfficeDev1\ProvisioningXMLExamples\";
            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(folderPath, "");

            XMLSharePointTemplateProvider spProvider = new XMLSharePointTemplateProvider(ctx, "https://folkis2018.sharepoint.com/sites/David/", "Shared%20Documents");

            var provisioningTemplate = spProvider.GetTemplate("template.xml");

            ctx.Web.ApplyProvisioningTemplate(provisioningTemplate);
        }
コード例 #31
0
        public void XMLFileSystemGetTemplatesTest()
        {
            XMLTemplateProvider provider =
                new XMLFileSystemTemplateProvider(
                    String.Format(@"{0}\..\..\Resources",
                    AppDomain.CurrentDomain.BaseDirectory),
                    "Templates");

            var result = provider.GetTemplates();

            Assert.IsTrue(result.Count == 2);
            Assert.IsTrue(result[0].Files.Count == 1);
            Assert.IsTrue(result[1].Files.Count == 5);
        }
コード例 #32
0
        public void XMLFileSystemGetTemplate2Test()
        {
            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-02.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);
        }