コード例 #1
0
        private TokenParser ProcessSiteScripts(Web web, ProvisioningTemplate template, TokenParser parser, PnPMonitoredScope scope)
        {
            if (template.Tenant.SiteScripts != null && template.Tenant.SiteScripts.Any())
            {
                using (var tenantContext = web.Context.Clone(web.GetTenantAdministrationUrl()))
                {
                    var tenant = new Tenant(tenantContext);

                    var existingScripts = tenant.GetSiteScripts();
                    tenantContext.Load(existingScripts);
                    tenantContext.ExecuteQueryRetry();

                    foreach (var siteScript in template.Tenant.SiteScripts)
                    {
                        var scriptTitle       = parser.ParseString(siteScript.Title);
                        var scriptDescription = parser.ParseString(siteScript.Description);
                        var scriptContent     = parser.ParseString(System.Text.Encoding.UTF8.GetString(GetFileBytes(template, parser.ParseString(siteScript.JsonFilePath))));
                        var existingScript    = existingScripts.FirstOrDefault(s => s.Title == scriptTitle);

                        if (existingScript == null)
                        {
                            TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
                            {
                                Title       = siteScript.Title,
                                Description = siteScript.Description,
                                Content     = scriptContent
                            };
                            var script = tenant.CreateSiteScript(siteScriptCreationInfo);
                            tenantContext.Load(script);
                            tenantContext.ExecuteQueryRetry();
                            parser.AddToken(new SiteScriptIdToken(web, scriptTitle, script.Id));
                        }
                        else
                        {
                            if (siteScript.Overwrite)
                            {
                                var existingId = existingScript.Id;
                                existingScript = Tenant.GetSiteScript(tenantContext, existingId);
                                tenantContext.ExecuteQueryRetry();

                                existingScript.Content     = scriptContent;
                                existingScript.Title       = scriptTitle;
                                existingScript.Description = scriptDescription;
                                tenant.UpdateSiteScript(existingScript);
                                tenantContext.ExecuteQueryRetry();
                                var existingToken = parser.Tokens.OfType <SiteScriptIdToken>().FirstOrDefault(t => t.GetReplaceValue() == existingId.ToString());
                                if (existingToken != null)
                                {
                                    parser.Tokens.Remove(existingToken);
                                }
                                parser.AddToken(new SiteScriptIdToken(web, scriptTitle, existingId));
                            }
                        }
                    }
                }
            }
            return(parser);
        }
コード例 #2
0
        protected override void ExecuteCmdlet()
        {
            // If no URL specified, we take the URL of the site that the current context is connected to
            if (!ParameterSpecified(nameof(Url)))
            {
                Url = PnPConnection.Current.Url;
            }

            // Generate site script
            var tenantSiteScriptSerializationInfo = new TenantSiteScriptSerializationInfo
            {
                IncludeBranding                      = IncludeBranding || IncludeAll,
                IncludedLists                        = Lists?.Select(l => l.Replace("\\", "/")).ToArray(),
                IncludeLinksToExportedItems          = IncludeLinksToExportedItems || IncludeAll,
                IncludeRegionalSettings              = IncludeRegionalSettings || IncludeAll,
                IncludeSiteExternalSharingCapability = IncludeSiteExternalSharingCapability || IncludeAll,
                IncludeTheme = IncludeTheme || IncludeAll
            };
            var generatedSiteScript = Tenant.GetSiteScriptFromSite(Url, tenantSiteScriptSerializationInfo);

            ClientContext.ExecuteQueryRetry();

            var siteScript = generatedSiteScript.Value.JSON;

            // Add the site script as a new site script to the tenant
            TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
            {
                Title       = Title,
                Description = Description,
                Content     = siteScript
            };

            var addedSiteScript = Tenant.CreateSiteScript(siteScriptCreationInfo);

            ClientContext.Load(addedSiteScript);
            ClientContext.ExecuteQueryRetry();

            // Create a site design
            TenantSiteDesignCreationInfo siteDesignInfo = new TenantSiteDesignCreationInfo
            {
                Title               = Title,
                SiteScriptIds       = new [] { addedSiteScript.Id },
                Description         = Description,
                IsDefault           = IsDefault,
                PreviewImageAltText = PreviewImageAltText,
                PreviewImageUrl     = PreviewImageUrl,
                WebTemplate         = ((int)WebTemplate).ToString(),
                ThumbnailUrl        = ThumbnailUrl,
                DesignPackageId     = DesignPackageId
            };

            var design = Tenant.CreateSiteDesign(siteDesignInfo);

            ClientContext.Load(design);
            ClientContext.ExecuteQueryRetry();
            WriteObject(design);
        }
コード例 #3
0
        internal static TokenParser ProcessSiteScripts(Tenant tenant, ProvisioningTenant provisioningTenant, FileConnectorBase connector, TokenParser parser, PnPMonitoredScope scope, ProvisioningMessagesDelegate messagesDelegate)
        {
            if (provisioningTenant.SiteScripts != null && provisioningTenant.SiteScripts.Any())
            {
                var existingScripts = tenant.GetSiteScripts();
                tenant.Context.Load(existingScripts);
                tenant.Context.ExecuteQueryRetry();

                foreach (var siteScript in provisioningTenant.SiteScripts)
                {
                    var parsedTitle       = parser.ParseString(siteScript.Title);
                    var parsedDescription = parser.ParseString(siteScript.Description);
                    var parsedContent     = parser.ParseString(System.Text.Encoding.UTF8.GetString(ConnectorFileHelper.GetFileBytes(connector, parser.ParseString(siteScript.JsonFilePath))));
                    var existingScript    = existingScripts.FirstOrDefault(s => s.Title == parsedTitle);

                    messagesDelegate?.Invoke($"Processing site script {parsedTitle}", ProvisioningMessageType.Progress);

                    if (existingScript == null)
                    {
                        TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
                        {
                            Title       = parsedTitle,
                            Description = parsedDescription,
                            Content     = parsedContent
                        };
                        var script = tenant.CreateSiteScript(siteScriptCreationInfo);
                        tenant.Context.Load(script);
                        tenant.Context.ExecuteQueryRetry();
                        parser.AddToken(new SiteScriptIdToken(null, parsedTitle, script.Id));
                    }
                    else
                    {
                        if (siteScript.Overwrite)
                        {
                            var existingId = existingScript.Id;
                            existingScript = Tenant.GetSiteScript(tenant.Context, existingId);
                            tenant.Context.ExecuteQueryRetry();

                            existingScript.Content     = parsedContent;
                            existingScript.Title       = parsedTitle;
                            existingScript.Description = parsedDescription;
                            tenant.UpdateSiteScript(existingScript);
                            tenant.Context.ExecuteQueryRetry();
                            var existingToken = parser.Tokens.OfType <SiteScriptIdToken>().FirstOrDefault(t => t.GetReplaceValue() == existingId.ToString());
                            if (existingToken != null)
                            {
                                parser.Tokens.Remove(existingToken);
                            }
                            parser.AddToken(new SiteScriptIdToken(null, parsedTitle, existingId));
                        }
                    }
                }
            }
            return(parser);
        }
コード例 #4
0
        protected override void ExecuteCmdlet()
        {
            TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
            {
                Title       = Title,
                Description = Description,
                Content     = Content
            };
            var script = Tenant.CreateSiteScript(siteScriptCreationInfo);

            ClientContext.Load(script);
            ClientContext.ExecuteQueryRetry();
            WriteObject(script);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: booko365dev/BookExamples
        //gavdcodeend 32

        //gavdcodebegin 33
        static void SpCsCsomAddSiteScript(ClientContext spCtx)
        {
            string myScript = System.IO.File.ReadAllText
                                  (@"C:\Temporary\TestListSiteScript.json");

            Tenant myTenant = new Tenant(spCtx);

            TenantSiteScriptCreationInfo myInfo = new TenantSiteScriptCreationInfo()
            {
                Title       = "CustomListFromSiteScript",
                Content     = myScript,
                Description = "Creates a Custom List using CSOM"
            };

            var response = myTenant.CreateSiteScript(myInfo);

            spCtx.ExecuteQuery();
        }
コード例 #6
0
 protected override void ExecuteCmdlet()
 {
     if (!Path.IsPathRooted(ContentPath))
     {
         ContentPath = Path.Combine(SessionState.Path.CurrentFileSystemLocation.Path, ContentPath);
     }
     using (var contentStream = System.IO.File.OpenRead(ContentPath))
     {
         TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
         {
             Title         = Title,
             Description   = Description,
             ContentStream = contentStream
         };
         var script = Tenant.CreateSiteScript(siteScriptCreationInfo);
         ClientContext.Load(script);
         ClientContext.ExecuteQueryRetry();
         WriteObject(script);
     }
 }
コード例 #7
0
        protected override void ExecuteCmdlet()
        {
            // Retrieve the provided site design
            var siteDesigns = Identity.GetTenantSiteDesign(Tenant);

            // Ensure a site design has been found
            if (siteDesigns == null || siteDesigns.Length == 0)
            {
                throw new PSArgumentException("Site design provided through the Identity parameter could not be found. Use Add-PnPSiteDesignFromWeb if you intend on adding a new site design.", nameof(Identity));
            }

            // Ensure we only have one site design so we're sure which one needs to be updated
            if (siteDesigns.Length > 1)
            {
                throw new PSArgumentException("Multiple site designs have been found based on the name provided through the Identity parameter. Please use the site design Id instead to specify only one site design to update.", nameof(Identity));
            }
            var siteDesign = siteDesigns[0];

            // Generate site script
            WriteVerbose($"Generating site script from {Url}");

            var tenantSiteScriptSerializationInfo = new TenantSiteScriptSerializationInfo
            {
                IncludeBranding                      = IncludeBranding || IncludeAll,
                IncludedLists                        = Lists?.Select(l => l.Replace("\\", "/")).ToArray(),
                IncludeLinksToExportedItems          = IncludeLinksToExportedItems || IncludeAll,
                IncludeRegionalSettings              = IncludeRegionalSettings || IncludeAll,
                IncludeSiteExternalSharingCapability = IncludeSiteExternalSharingCapability || IncludeAll,
                IncludeTheme = IncludeTheme || IncludeAll
            };
            var generatedSiteScript = Tenant.GetSiteScriptFromSite(Url, tenantSiteScriptSerializationInfo);

            ClientContext.ExecuteQueryRetry();

            var siteScript = generatedSiteScript.Value.JSON;

            // Retrieve the sitescripts linked to the site design
            siteDesign.EnsureProperty(d => d.SiteScriptIds);

            bool addAsNewSiteScript = false;

            if (siteDesign.SiteScriptIds.Length > 0)
            {
                // One or more site scripts exist in the site design
                if (siteDesign.SiteScriptIds.Length > 1)
                {
                    // Multiple site scripts in the site design
                    WriteVerbose($"Site design provided through the Identity parameter contains {siteDesign.SiteScriptIds.Length} site scripts. The first one will be overwritten with a new template from the site.");
                }
                else
                {
                    // One site script exists in the site design, which is the expected scenario
                    WriteVerbose($"Site design provided through the Identity parameter contains {siteDesign.SiteScriptIds.Length} site script. It will be overwritten with a new template from the site.");
                }

                // Update an existing site script
                try
                {
                    var script = Tenant.GetSiteScript(ClientContext, siteDesign.SiteScriptIds.First());
                    script.Content = siteScript;
                    Tenant.UpdateSiteScript(script);
                    ClientContext.ExecuteQueryRetry();
                }
                catch (Microsoft.SharePoint.Client.ServerException e) when(e.ServerErrorTypeName == "System.IO.FileNotFoundException")
                {
                    // Thrown when a site script is still referenced in the site design, but the actual site script has been removed. This likely means the site design is now in an orphaned state and cannot be used anymore. Going to try anyway.
                    WriteVerbose($"Site design provided through the Identity parameter contains a reference to site script {siteDesign.SiteScriptIds.First()} which no longer exists. Will try to add it as a new site script but it likely will fail as the site design is now orphaned. Remove the site design and create a new one if it keeps failing.");
                    addAsNewSiteScript = true;
                }
            }
            else
            {
                // No site scripts in the site design
                WriteVerbose($"Site design provided through the Identity parameter does not contain any site scripts yet. Adding a new site script to the site design.");
                addAsNewSiteScript = true;
            }

            if (addAsNewSiteScript)
            {
                // Add the site script as a new site script to the tenant
                TenantSiteScriptCreationInfo siteScriptCreationInfo = new TenantSiteScriptCreationInfo
                {
                    Title       = siteDesign.Title,
                    Description = siteDesign.Description,
                    Content     = siteScript
                };

                var addedSiteScript = Tenant.CreateSiteScript(siteScriptCreationInfo);
                ClientContext.Load(addedSiteScript);
                ClientContext.ExecuteQueryRetry();

                // Connect the site script to the site design
                siteDesign.SiteScriptIds = new[] { addedSiteScript.Id };
                Tenant.UpdateSiteDesign(siteDesign);
                ClientContext.ExecuteQueryRetry();
            }

            WriteObject(siteDesign);
        }