예제 #1
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployWebmasterPageSettings()
        {
            // BuiltInMasterPageDefinitions class could be used to refer OOTB master pages
            // BuiltInMasterPageDefinitions.Seattle
            // BuiltInMasterPageDefinitions.Oslo
            // BuiltInMasterPageDefinitions.Minimal

            var masterPageSettings = new MasterPageSettingsDefinition
            {
                // both should be site relative URLs
                SiteMasterPageUrl   = "/_catalogs/masterpage/oslo.master",
                SystemMasterPageUrl = "/_catalogs/masterpage/oslo.master"
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web.AddMasterPageSettings(masterPageSettings);
            });

            DeployModel(model);
        }
 public static ModelNode AddMasterPageSettings(this ModelNode model, MasterPageSettingsDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
 public static ModelNode AddMasterPageSettings(this ModelNode model, MasterPageSettingsDefinition definition)
 {
     return(AddMasterPageSettings(model, definition, null));
 }
 public static TModelNode AddMasterPageSettings <TModelNode>(this TModelNode model, MasterPageSettingsDefinition definition,
                                                             Action <MasterPageSettingsModelNode> action)
     where TModelNode : ModelNode, IWebModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
 public static TModelNode AddMasterPageSettings <TModelNode>(this TModelNode model, MasterPageSettingsDefinition definition)
     where TModelNode : ModelNode, IWebModelNode, new()
 {
     return(AddMasterPageSettings(model, definition, null));
 }
예제 #6
0
        private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHost, MasterPageSettingsDefinition masterPageSettings)
        {
            var site = webModelHost.HostSite;
            var web  = webModelHost.HostWeb;

            var sContext = site.Context;

            sContext.Load(site, s => s.ServerRelativeUrl);
            sContext.ExecuteQueryWithTrace();

            var siteRelativeUrl = site.ServerRelativeUrl;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving server relative URL: [{0}]", siteRelativeUrl);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = web,
                ObjectType       = typeof(Web),
                ObjectDefinition = masterPageSettings,
                ModelHost        = modelHost
            });

            if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrlL: [{0}]", masterPageSettings.SiteMasterPageUrl);
                web.MasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SiteMasterPageUrl);
            }

            if (!string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
            {
                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", masterPageSettings.SystemMasterPageUrl);
                web.CustomMasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, masterPageSettings.SystemMasterPageUrl);
            }

            if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl) ||
                !string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = web,
                    ObjectType       = typeof(Web),
                    ObjectDefinition = masterPageSettings,
                    ModelHost        = modelHost
                });

                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling web.Update()");
                web.Update();

                web.Context.ExecuteQueryWithTrace();
            }
            else
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = web,
                    ObjectType       = typeof(Web),
                    ObjectDefinition = masterPageSettings,
                    ModelHost        = modelHost
                });
            }
        }
        private void DeployMasterPageSettings(object modelHost, WebModelHost webModelHost, MasterPageSettingsDefinition masterPageSettings)
        {
            var site = webModelHost.HostSite;
            var web  = webModelHost.HostWeb;

            var sContext = site.Context;

            sContext.Load(site, s => s.ServerRelativeUrl);
            sContext.ExecuteQueryWithTrace();

            var siteRelativeUrl = site.ServerRelativeUrl;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving server relative URL: [{0}]", siteRelativeUrl);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = web,
                ObjectType       = typeof(Web),
                ObjectDefinition = masterPageSettings,
                ModelHost        = modelHost
            });

            // TODO, https://github.com/SubPointSolutions/spmeta2/issues/761
            // re-implement with native prop bag to suport SP2010
            // SP2010 CSOM does not have CustomMasterUrl / MasterUrl props

#if !NET35
            if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl))
            {
                var url = ResolveUrlWithTokens(webModelHost, masterPageSettings.SiteMasterPageUrl);

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.MasterUrl: [{0}]", url);
                web.CustomMasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, url);
            }

            if (!string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
            {
                var url = ResolveUrlWithTokens(webModelHost, masterPageSettings.SystemMasterPageUrl);

                TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Setting web.CustomMasterUrl: [{0}]", url);
                web.MasterUrl = UrlUtility.CombineUrl(siteRelativeUrl, url);
            }
#endif

            if (!string.IsNullOrEmpty(masterPageSettings.SiteMasterPageUrl) ||
                !string.IsNullOrEmpty(masterPageSettings.SystemMasterPageUrl))
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = web,
                    ObjectType       = typeof(Web),
                    ObjectDefinition = masterPageSettings,
                    ModelHost        = modelHost
                });

                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Calling web.Update()");
                web.Update();

                web.Context.ExecuteQueryWithTrace();
            }
            else
            {
                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = web,
                    ObjectType       = typeof(Web),
                    ObjectDefinition = masterPageSettings,
                    ModelHost        = modelHost
                });
            }
        }