Exemple #1
0
        private void ApplyWeb(WebCreator webDefinition, string baseUrl, ClientContext ctx, Web currentWeb)
        {
            var webUrl = webDefinition.Url;

            if (!webDefinition.Url.StartsWith("/") && baseUrl != "/")
            {
                webUrl = "/" + webUrl;
            }
            webUrl = baseUrl + webUrl;

            if (webDefinition.Url != string.Empty) //Not a root web
            {
                ctx.Load(currentWeb.Webs, ws => ws.Include(w => w.ServerRelativeUrl));
                ctx.ExecuteQueryRetry();
                var targetWeb =
                    currentWeb.Webs.SingleOrDefault(
                        w => w.ServerRelativeUrl.ToLowerInvariant() == webUrl.ToLowerInvariant());
                if (targetWeb == null)
                {
                    var newWeb = CreateWeb(webDefinition, ctx, currentWeb, webUrl);
                    CreateWebs(webDefinition, ctx, webUrl, newWeb);
                }
                else
                {
                    OnNotify(ProvisioningNotificationLevels.Verbose, $"{webUrl} already exists!");
                    CreateWebs(webDefinition, ctx, webUrl, targetWeb);
                }
            }
            else
            {
                CreateWebs(webDefinition, ctx, webUrl, currentWeb);
            }
            var manifestProvisioner = new IQAppManifestProvisioner.Provisioner();

            manifestProvisioner.WriteNotificationsToStdOut = WriteNotificationsToStdOut;
            manifestProvisioner.Notify += Provisioner_Notify;
            manifestProvisioner.Provision(ctx, currentWeb, webDefinition.AppManifest);
        }
Exemple #2
0
        public void Deprovision(ClientContext ctx, Web web, SiteDefinition siteDef)
        {
            if (!web.IsPropertyAvailable("ServerRelativeUrl"))
            {
                //This fetches all of the Web's properties
                //You might be tempted to restrict this by just the properties you know
                //you need right now, but doing that will ensure that either this class has
                //to be edited every time something in the call stack needs a new property
                //or many round trips for information about the web over the course of the whole operation.
                //The PowerShell module loads all properties.
                ctx.Load(web);
                ctx.ExecuteQueryRetry();
            }
            if (siteDef.WebDefinition?.Webs == null || siteDef.WebDefinition.Webs.Count == 0)
            {
                OnNotify(ProvisioningNotificationLevels.Verbose, "No webs defined to delete");
                return;
            }

            //Strip off any starting / WebCreationInformation.Url does not like it
            if (siteDef.WebDefinition.Url.StartsWith("/"))
            {
                siteDef.WebDefinition.Url = siteDef.WebDefinition.Url.Substring(1);
            }
            if (siteDef.WebDefinition.Url != "")
            {
                throw new InvalidOperationException("Root of siteDefinition must be '/' or empty");
            }
            var baseUrl = web.ServerRelativeUrl;

            DeleteChildWebs(ctx, web, baseUrl, siteDef.WebDefinition.Webs.Values.ToList());
            var manifestProvisioner = new IQAppManifestProvisioner.Provisioner();

            manifestProvisioner.WriteNotificationsToStdOut = WriteNotificationsToStdOut;
            manifestProvisioner.Notify += Provisioner_Notify;
            manifestProvisioner.Deprovision(ctx, web, siteDef.WebDefinition.AppManifest);
        }