コード例 #1
0
        protected File GetWikiPageFile(Web web, Folder folder, WikiPageDefinition wikiPageModel)
        {
            var newWikiPageUrl = string.Empty;
            var result         = GetWikiPageFile(web, folder, wikiPageModel, out newWikiPageUrl);

            return(result);
        }
コード例 #2
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployWelcomePageToWeb()
        {
            var newWebHomePage = new WikiPageDefinition
            {
                FileName = "A new landing page for web.aspx",
                Content  = "Hello, this is a new web landing page!"
            };

            var welcomePage = new WelcomePageDefinition
            {
                // should be relating to the web!
                Url = UrlUtility.CombineUrl(BuiltInListDefinitions.SitePages.GetListUrl(), newWebHomePage.FileName)
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list.AddWikiPage(newWebHomePage);
                })
                .AddWelcomePage(welcomePage);
            });

            DeployModel(model);
        }
コード例 #3
0
        protected File GetWikiPageFile(Web web, Folder folder, WikiPageDefinition wikiPageModel, out string newWikiPageUrl)
        {
            var context = folder.Context;

            //if (!string.IsNullOrEmpty(wikiPageModel.FolderUrl))
            //    throw new Exception("FolderUrl property is not supported yet!");

            var pageName = GetSafeWikiPageFileName(wikiPageModel);

            context.Load(folder, l => l.ServerRelativeUrl);
            context.ExecuteQueryWithTrace();

            newWikiPageUrl = folder.ServerRelativeUrl + "/" + pageName;

            TraceService.VerboseFormat((int)LogEventId.ModelProvisionCoreCall, "Resolving file with URL: [{0}]", newWikiPageUrl);
            var file = web.GetFileByServerRelativeUrl(newWikiPageUrl);

            context.Load(file, f => f.Exists);
            context.ExecuteQueryWithTrace();

            if (file.Exists)
            {
                TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "Returning existing file");
                return(file);
            }

            TraceService.Verbose((int)LogEventId.ModelProvisionCoreCall, "File does not exist. Returning NULL");

            return(null);
        }
コード例 #4
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployWelcomePageToList()
        {
            var newListHomePage = new WikiPageDefinition
            {
                FileName = "A new landing page for list.aspx",
                Content  = "Hello, this is a new list landing page!"
            };

            var welcomePage = new WelcomePageDefinition
            {
                // should be relating to the list!
                Url = newListHomePage.FileName
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddWikiPage(newListHomePage)
                    .AddWelcomePage(welcomePage);
                });
            });

            DeployModel(model);
        }
コード例 #5
0
        protected File GetWikiPageFile(List list, WikiPageDefinition wikiPageModel, out string newWikiPageUrl)
        {
            var context = list.Context;

            //if (!string.IsNullOrEmpty(wikiPageModel.FolderUrl))
            //    throw new Exception("FolderUrl property is not supported yet!");

            var pageName = GetSafeWikiPageFileName(wikiPageModel);

            context.Load(list, l => l.RootFolder.ServerRelativeUrl);
            context.ExecuteQuery();

            newWikiPageUrl = list.RootFolder.ServerRelativeUrl + "/" + pageName;
            var file = list.ParentWeb.GetFileByServerRelativeUrl(newWikiPageUrl);

            context.Load(file, f => f.Exists);
            context.ExecuteQuery();

            if (file.Exists)
            {
                return(file);
            }

            return(null);
        }
コード例 #6
0
        protected File GetWikiPageFile(List list, WikiPageDefinition wikiPageModel)
        {
            var newWikiPageUrl = string.Empty;
            var result         = GetWikiPageFile(list, wikiPageModel, out newWikiPageUrl);

            return(result);
        }
コード例 #7
0
        protected string GetSafeWikiPageFileName(WikiPageDefinition wikiPageModel)
        {
            var wikiPageName = wikiPageModel.FileName;

            if (!wikiPageName.EndsWith(".aspx"))
            {
                wikiPageName += ".aspx";
            }

            return(wikiPageName);
        }
コード例 #8
0
        protected string GetWikiPageName(WikiPageDefinition wikiPageModel)
        {
            var pageName = wikiPageModel.FileName;

            if (!pageName.EndsWith(".aspx"))
            {
                pageName += ".aspx";
            }

            return(pageName);
        }
コード例 #9
0
        private void DeployWikiPage(List list, WikiPageDefinition wikiPageModel)
        {
            var context = list.Context;

            var newWikiPageUrl = string.Empty;
            var file           = GetWikiPageFile(list, wikiPageModel, out newWikiPageUrl);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = file,
                ObjectType       = typeof(File),
                ObjectDefinition = wikiPageModel,
                ModelHost        = list
            });

            if (file == null)
            {
                var newPageFile = list.RootFolder.Files.AddTemplateFile(newWikiPageUrl, TemplateFileType.WikiPage);

                context.Load(newPageFile);

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = newPageFile,
                    ObjectType       = typeof(File),
                    ObjectDefinition = wikiPageModel,
                    ModelHost        = list
                });

                context.ExecuteQuery();
            }
            else
            {
                // TODO,override if force

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = file,
                    ObjectType       = typeof(File),
                    ObjectDefinition = wikiPageModel,
                    ModelHost        = list
                });
            }
        }
コード例 #10
0
        public override ModelNode ReverseSingleHost(object reverseHost, ReverseOptions options)
        {
            var item = (reverseHost as WikiPageReverseHost).HostWikiPageFile;

            var def = new WikiPageDefinition();

            def.FileName = item.Name;
            def.Content  = ConvertUtils.ToString(item.ListItemAllFields[BuiltInInternalFieldNames.WikiField]);

            def.NeedOverride = true;

            return(new WikiPageModelNode
            {
                Options = { RequireSelfProcessing = true },
                Value = def
            });
        }
コード例 #11
0
        public void Deploy_WikiPage()
        {
            // Step 1, define security groups
            var aboutPage = new WikiPageDefinition
            {
                Title    = "About",
                FileName = "about.aspx"
            };

            var contactPage = new WikiPageDefinition
            {
                Title    = "Contact",
                FileName = "contact.aspx"
            };

            var faqPage = new WikiPageDefinition
            {
                Title    = "FAQ",
                FileName = "faq.aspx"
            };

            // Step 2, define web model and artifact relationships - add security groups t the web
            var model = SPMeta2Model
                        .NewWebModel(web =>
            {
                web
                .AddList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddWikiPage(aboutPage)
                    .AddWikiPage(contactPage)
                    .AddWikiPage(faqPage);
                });
            });

            // Step 3, deploy model
            DeployWebModel(model);
        }
コード例 #12
0
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanDeployWelcomePageToFolder()
        {
            var newFolderHomePage = new WikiPageDefinition
            {
                FileName = "A new landing page for folder.aspx",
                Content  = "Hello, this is a new folder landing page!"
            };

            var welcomePage = new WelcomePageDefinition
            {
                // should be relating to the folder!
                Url = newFolderHomePage.FileName
            };

            var landingPageFolder = new FolderDefinition
            {
                Name = "A folder with custom landing page"
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddFolder(landingPageFolder, folder =>
                    {
                        folder
                        .AddWikiPage(newFolderHomePage)
                        .AddWelcomePage(welcomePage);
                    });
                });
            });

            DeployModel(model);
        }
コード例 #13
0
        protected SPListItem FindWikiPage(SPList pageList, WikiPageDefinition wikiPageModel)
        {
            var file = pageList.ParentWeb.GetFile(GetSafeWikiPageUrl(pageList, wikiPageModel));

            return(file.Exists ? file.Item : null);
        }
コード例 #14
0
 public static ModelNode AddHostWikiPage(this ModelNode model, WikiPageDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }
コード例 #15
0
        protected SPListItem FindWikiPageItem(SPFolder folder, WikiPageDefinition wikiPageModel)
        {
            var file = folder.ParentWeb.GetFile(GetSafeWikiPageUrl(folder, wikiPageModel));

            return(file.Exists ? file.Item : null);
        }
コード例 #16
0
        private void DeployWikiPage(Web web, List list, Folder folder, WikiPageDefinition definition)
        {
            var context = folder.Context;

            var newWikiPageUrl = string.Empty;

            var contentTypeId = string.Empty;

            // pre load content type
            if (!string.IsNullOrEmpty(definition.ContentTypeId))
            {
                contentTypeId = definition.ContentTypeId;
            }
            else if (!string.IsNullOrEmpty(definition.ContentTypeName))
            {
                contentTypeId = ContentTypeLookupService
                                .LookupContentTypeByName(list, definition.ContentTypeName)
                                .Id.ToString();
            }

            var file = GetWikiPageFile(web, folder, definition, out newWikiPageUrl);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = file,
                ObjectType       = typeof(File),
                ObjectDefinition = definition,
                ModelHost        = folder
            });

            if (file == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new wiki page");

                var newPageFile = folder.Files.AddTemplateFile(newWikiPageUrl, TemplateFileType.WikiPage);

                context.Load(newPageFile);

                var currentListItem = newPageFile.ListItemAllFields;
                context.Load(currentListItem);
                context.ExecuteQueryWithTrace();

                FieldLookupService.EnsureDefaultValues(currentListItem, definition.DefaultValues);

                if (!string.IsNullOrEmpty(contentTypeId))
                {
                    currentListItem[BuiltInInternalFieldNames.ContentTypeId] = contentTypeId;
                }

                currentListItem[BuiltInInternalFieldNames.WikiField] = definition.Content ?? String.Empty;

                FieldLookupService.EnsureValues(currentListItem, definition.Values, true);

                currentListItem.Update();

                context.ExecuteQueryWithTrace();

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = newPageFile,
                    ObjectType       = typeof(File),
                    ObjectDefinition = definition,
                    ModelHost        = folder
                });

                context.ExecuteQueryWithTrace();
            }
            else
            {
                // TODO,override if force
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing wiki page");

                if (definition.NeedOverride)
                {
                    TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "NeedOverride = true. Updating wiki page content.");

                    var currentListItem = file.ListItemAllFields;
                    context.Load(currentListItem);
                    context.ExecuteQueryWithTrace();

                    FieldLookupService.EnsureDefaultValues(currentListItem, definition.DefaultValues);

                    if (!string.IsNullOrEmpty(contentTypeId))
                    {
                        currentListItem[BuiltInInternalFieldNames.ContentTypeId] = contentTypeId;
                    }

                    currentListItem[BuiltInInternalFieldNames.WikiField] = definition.Content ?? String.Empty;
                    currentListItem.Update();
                }
                else
                {
                    TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "NeedOverride = false. Skipping Updating wiki page content.");
                }

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = file,
                    ObjectType       = typeof(File),
                    ObjectDefinition = definition,
                    ModelHost        = folder
                });

                context.ExecuteQueryWithTrace();
            }
        }
コード例 #17
0
 protected string GetSafeWikiPageUrl(SPFolder folder, WikiPageDefinition wikiPageModel)
 {
     // TODO, fix +/ to SPUtility
     return(folder.ServerRelativeUrl + "/" + GetSafeWikiPageFileName(wikiPageModel));
 }
コード例 #18
0
        private void DeployWikiPage(Web web, Folder folder, WikiPageDefinition wikiPageModel)
        {
            var context = folder.Context;

            var newWikiPageUrl = string.Empty;
            var file           = GetWikiPageFile(web, folder, wikiPageModel, out newWikiPageUrl);

            InvokeOnModelEvent(this, new ModelEventArgs
            {
                CurrentModelNode = null,
                Model            = null,
                EventType        = ModelEventType.OnProvisioning,
                Object           = file,
                ObjectType       = typeof(File),
                ObjectDefinition = wikiPageModel,
                ModelHost        = folder
            });

            if (file == null)
            {
                TraceService.Information((int)LogEventId.ModelProvisionProcessingNewObject, "Processing new wiki page");

                var newPageFile = folder.Files.AddTemplateFile(newWikiPageUrl, TemplateFileType.WikiPage);

                context.Load(newPageFile);

                var currentListItem = newPageFile.ListItemAllFields;
                context.Load(currentListItem);
                context.ExecuteQueryWithTrace();

                currentListItem[BuiltInInternalFieldNames.WikiField] = wikiPageModel.Content ?? String.Empty;
                currentListItem.Update();

                context.ExecuteQueryWithTrace();

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = newPageFile,
                    ObjectType       = typeof(File),
                    ObjectDefinition = wikiPageModel,
                    ModelHost        = folder
                });

                context.ExecuteQueryWithTrace();
            }
            else
            {
                // TODO,override if force
                TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "Processing existing wiki page");

                if (wikiPageModel.NeedOverride)
                {
                    TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "NeedOverride = true. Updating wiki page content.");

                    var currentListItem = file.ListItemAllFields;
                    context.Load(currentListItem);
                    context.ExecuteQueryWithTrace();

                    currentListItem[BuiltInInternalFieldNames.WikiField] = wikiPageModel.Content ?? String.Empty;
                    currentListItem.Update();
                }
                else
                {
                    TraceService.Information((int)LogEventId.ModelProvisionProcessingExistingObject, "NeedOverride = false. Skipping Updating wiki page content.");
                }

                InvokeOnModelEvent(this, new ModelEventArgs
                {
                    CurrentModelNode = null,
                    Model            = null,
                    EventType        = ModelEventType.OnProvisioned,
                    Object           = file,
                    ObjectType       = typeof(File),
                    ObjectDefinition = wikiPageModel,
                    ModelHost        = folder
                });

                context.ExecuteQueryWithTrace();
            }
        }
コード例 #19
0
 protected string GetSafeWikiPageFileName(WikiPageDefinition wikiPageModel)
 {
     return(GetSafeWikiPageFileName(wikiPageModel.FileName));
 }
コード例 #20
0
 public static TModelNode AddHostWikiPage <TModelNode>(this TModelNode model, WikiPageDefinition definition,
                                                       Action <WikiPageModelNode> action)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(model.AddTypedDefinitionNodeWithOptions(definition, action, ModelNodeOptions.New().NoSelfProcessing()));
 }
コード例 #21
0
 public static TModelNode AddHostWikiPage <TModelNode>(this TModelNode model, WikiPageDefinition definition)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(AddHostWikiPage(model, definition, null));
 }
コード例 #22
0
 public static TModelNode AddWikiPage <TModelNode>(this TModelNode model, WikiPageDefinition definition,
                                                   Action <WikiPageModelNode> action)
     where TModelNode : ModelNode, IListItemHostModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
コード例 #23
0
 public static ModelNode AddWikiPage(this ModelNode model, WikiPageDefinition definition)
 {
     return(AddWikiPage(model, definition, null));
 }
コード例 #24
0
 public static ModelNode AddWikiPage(this ModelNode model, WikiPageDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }