Ejemplo n.º 1
0
        //protected override void InternalOnAfterWebPartProvision(WebPartProcessingContext provisionContext)
        //{
        //    base.InternalOnAfterWebPartProvision(provisionContext);

        //    var webPartModel = provisionContext.WebPartDefinition;

        //    var listItemModelHost = provisionContext.ListItemModelHost;
        //    var wpModel = webPartModel.WithAssertAndCast<ListViewWebPartDefinition>("model", value => value.RequireNotNull());

        //    var webPartStoreKey = provisionContext.WebPartStoreKey;
        //    var context = provisionContext.ListItemModelHost.HostWeb.Context;

        //    var bindContext = LookupBindContext(listItemModelHost, wpModel);

        //    if (bindContext.TargetViewId.HasValue
        //        && bindContext.TargetViewId != default(Guid)
        //        && provisionContext.WebPartStoreKey.HasValue
        //        && provisionContext.WebPartStoreKey.Value != default(Guid))
        //    {
        //        var list = LookupList(listItemModelHost, wpModel);

        //        var srcView = list.Views.GetById(bindContext.TargetViewId.Value);
        //        var hiddenView = list.Views.GetById(provisionContext.WebPartStoreKey.Value);

        //        context.Load(srcView, s => s.ViewFields);

        //        context.Load(srcView, s => s.RowLimit);
        //        context.Load(srcView, s => s.ViewQuery);
        //        context.Load(srcView, s => s.JSLink);

        //        context.Load(srcView, s => s.IncludeRootFolder);
        //        context.Load(srcView, s => s.Scope);

        //        context.Load(hiddenView);

        //        context.ExecuteQueryWithTrace();

        //        hiddenView.ViewFields.RemoveAll();

        //        foreach (var f in srcView.ViewFields)
        //            hiddenView.ViewFields.Add(f);


        //        hiddenView.RowLimit = srcView.RowLimit;
        //        hiddenView.ViewQuery = srcView.ViewQuery;
        //        hiddenView.JSLink = srcView.JSLink;

        //        hiddenView.IncludeRootFolder = srcView.IncludeRootFolder;
        //        hiddenView.Scope = srcView.Scope;

        //        hiddenView.Update();
        //        context.ExecuteQueryWithTrace();
        //    }
        //}

        private List LookupList(ListItemModelHost listItemModelHost, ListViewWebPartDefinition wpModel)
        {
            var web     = listItemModelHost.HostWeb;
            var context = listItemModelHost.HostWeb.Context;

            List list = null;

            if (!string.IsNullOrEmpty(wpModel.ListUrl))
            {
                list = web.QueryAndGetListByUrl(wpModel.ListUrl);
            }
            else if (!string.IsNullOrEmpty(wpModel.ListTitle))
            {
                list = web.Lists.GetByTitle(wpModel.ListTitle);
            }
            else if (wpModel.ListId != default(Guid))
            {
                list = web.Lists.GetById(wpModel.ListId.Value);
            }
            else
            {
                throw new SPMeta2Exception("ListUrl, ListTitle or ListId should be defined.");
            }

            return(list);
        }
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanBindListViewWebPartByListViewTitle()
        {
            var incidentsLibrary = new ListDefinition
            {
                Title        = "Incidents library",
                Description  = "A document library.",
                TemplateType = BuiltInListTemplateTypeId.DocumentLibrary,
                Url          = "m2Incidents"
            };

            var incidentsView = new ListViewDefinition
            {
                Title  = "Last Incidents",
                Fields = new Collection <string>
                {
                    BuiltInInternalFieldNames.Edit,
                    BuiltInInternalFieldNames.ID,
                    BuiltInInternalFieldNames.FileLeafRef
                },
                RowLimit = 10
            };

            var listView = new ListViewWebPartDefinition
            {
                Title     = "Last Incidents binding by List View Title",
                Id        = "m2LastIncidentsView",
                ZoneIndex = 10,
                ZoneId    = "Main",
                ListUrl   = incidentsLibrary.GetListUrl(),
                ViewName  = incidentsView.Title
            };

            var webPartPage = new WebPartPageDefinition
            {
                Title              = "M2 List View provision",
                FileName           = "listview-webpart-provision.aspx",
                PageLayoutTemplate = BuiltInWebPartPageTemplates.spstd1
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(incidentsLibrary, list =>
                {
                    list.AddListView(incidentsView);
                })
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list.AddWebPartPage(webPartPage, page =>
                    {
                        page.AddListViewWebPart(listView);
                    });
                });
            });

            DeployModel(model);
        }
        LookupBindContext(ListItemModelHost listItemModelHost, ListViewWebPartDefinition wpModel)
        {
            var result = new ClientXsltListViewWebPartDefinitionValidator.ListBindContext
            {
            };

            var web     = listItemModelHost.HostWeb;
            var context = listItemModelHost.HostWeb.Context;

            var list = LookupList(listItemModelHost, wpModel);

            View view = null;

            if (wpModel.ViewId.HasValue && wpModel.ViewId != default(Guid))
            {
                view = list.Views.GetById(wpModel.ViewId.Value);
            }
            else if (!string.IsNullOrEmpty(wpModel.ViewName))
            {
                view = list.Views.GetByTitle(wpModel.ViewName);
            }

            context.Load(list, l => l.Id);
            context.Load(list, l => l.DefaultViewUrl);
            context.Load(list, l => l.Title);
            context.Load(list, l => l.DefaultView);

            if (view != null)
            {
                context.Load(view);
                context.ExecuteQueryWithTrace();

                result.OriginalView   = list.DefaultView;
                result.OriginalViewId = list.DefaultView.Id;

                result.TargetView   = view;
                result.TargetViewId = view.Id;

                result.TitleUrl = view.ServerRelativeUrl;
            }
            else
            {
                context.ExecuteQueryWithTrace();
            }

            result.ListId = list.Id;

            if (wpModel.TitleUrl == null)
            {
                if (string.IsNullOrEmpty(result.TitleUrl))
                {
                    result.TitleUrl = list.DefaultViewUrl;
                }
            }

            return(result);
        }
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanBindListViewWebPartToCalendarView()
        {
            var companyEvents = new ListDefinition
            {
                Title        = "Company Events",
                Description  = "A document library.",
                TemplateType = BuiltInListTemplateTypeId.Events,
                Url          = "m2CompanyEvents"
            };

            var webPartPage = new WebPartPageDefinition
            {
                Title              = "M2 List View provision",
                FileName           = "listview-webpart-provision.aspx",
                PageLayoutTemplate = BuiltInWebPartPageTemplates.spstd1
            };

            var listView = new ListViewWebPartDefinition
            {
                Title     = "Company Events by List View Title",
                Id        = "m2CompanyEvents",
                ZoneIndex = 10,
                ZoneId    = "Main",
                ListUrl   = companyEvents.GetListUrl(),
                ViewName  = "Calendar"
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(companyEvents)
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list.AddWebPartPage(webPartPage, page =>
                    {
                        page.AddListViewWebPart(listView);
                    });
                });
            });

            DeployModel(model);
        }
        //[SampleMetadataTag(Name = BuiltInTagNames.SampleHidden)]
        public void CanBindListViewWebPartByListUrl()
        {
            var annualReviewsLibrary = new ListDefinition
            {
                Title        = "Annual Reviews",
                Description  = "A document library.",
                TemplateType = BuiltInListTemplateTypeId.DocumentLibrary,
                Url          = "m2AnnualReviews"
            };

            var listView = new ListViewWebPartDefinition
            {
                Title     = "Annual Reviews Default View by List Url",
                Id        = "m2AnnualReviewsView",
                ZoneIndex = 10,
                ZoneId    = "Main",
                ListUrl   = annualReviewsLibrary.GetListUrl()
            };

            var webPartPage = new WebPartPageDefinition
            {
                Title              = "M2 List View provision",
                FileName           = "listview-webpart-provision.aspx",
                PageLayoutTemplate = BuiltInWebPartPageTemplates.spstd1
            };

            var model = SPMeta2Model.NewWebModel(web =>
            {
                web
                .AddList(annualReviewsLibrary)
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list.AddWebPartPage(webPartPage, page =>
                    {
                        page.AddListViewWebPart(listView);
                    });
                });
            });

            DeployModel(model);
        }
        private ListBindContext LookupBindContext(ListItemModelHost listItemModelHost, ListViewWebPartDefinition wpModel)
        {
            var result = new ListBindContext
            {
            };

            var web     = listItemModelHost.HostWeb;
            var context = listItemModelHost.HostWeb.Context;

            List list = null;

            if (!string.IsNullOrEmpty(wpModel.ListUrl))
            {
                list = web.QueryAndGetListByUrl(wpModel.ListUrl);
            }
            else if (!string.IsNullOrEmpty(wpModel.ListTitle))
            {
                list = web.Lists.GetByTitle(wpModel.ListTitle);
            }
            else if (wpModel.ListId != default(Guid))
            {
                list = web.Lists.GetById(wpModel.ListId.Value);
            }
            else
            {
                throw new ArgumentException("ListUrl, ListTitle or ListId should be defined.");
            }

            context.Load(list, l => l.Id);
            context.Load(list, l => l.DefaultViewUrl);
            context.Load(list, l => l.Title);
            context.Load(list, l => l.DefaultView);

            context.ExecuteQueryWithTrace();

            result.ListId   = list.Id;
            result.TitleUrl = list.DefaultViewUrl;
            result.ViewId   = list.DefaultView.Id;

            return(result);
        }
 public static TModelNode AddListViewWebPart <TModelNode>(this TModelNode model, ListViewWebPartDefinition definition,
                                                          Action <ListViewWebPartModelNode> action)
     where TModelNode : ModelNode, IWebpartHostModelNode, new()
 {
     return(model.AddTypedDefinitionNode(definition, action));
 }
 public static TModelNode AddListViewWebPart <TModelNode>(this TModelNode model, ListViewWebPartDefinition definition)
     where TModelNode : ModelNode, IWebpartHostModelNode, new()
 {
     return(AddListViewWebPart(model, definition, null));
 }
 public static ModelNode AddListViewWebPart(this ModelNode model, ListViewWebPartDefinition definition, Action <ModelNode> action)
 {
     return(model.AddDefinitionNode(definition, action));
 }
 public static ModelNode AddListViewWebPart(this ModelNode model, ListViewWebPartDefinition definition)
 {
     return(AddListViewWebPart(model, definition, null));
 }
Ejemplo n.º 11
0
        public void CanDeploy_WebpartToWikiPageContent_As_AddToPageContent()
        {
            // Some web part provision on wiki page give empty markup
            // https://github.com/SubPointSolutions/spmeta2/issues/693

            // web part ID, zone and AddToPageContent must be as such
            // you can move these params into your web part definition

            var listViewWebPartDef = new ListViewWebPartDefinition
            {
                Title            = String.Format("ListViewWebPartDefinition - {0}", Rnd.String()),
                Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_'),
                ZoneIndex        = 10,
                ZoneId           = "wpz",
                AddToPageContent = true,
                ListUrl          = BuiltInListDefinitions.SitePages.CustomUrl
            };

            var webModel = SPMeta2Model
                           .NewWebModel(web =>
            {
                web
                .AddHostList(BuiltInListDefinitions.SitePages, list =>
                {
                    list
                    .AddRandomWikiPage(page =>
                    {
                        page.RegExcludeFromValidation();

                        page
                        .AddListViewWebPart(listViewWebPartDef)
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        .AddRandomWebpart(wpNode =>
                        {
                            var wp = wpNode.Value as WebPartDefinition;

                            wp.Id               = "g_" + Guid.NewGuid().ToString("D").Replace('-', '_');
                            wp.ZoneId           = "wpz";
                            wp.AddToPageContent = true;
                        })
                        ;
                    });
                });
            });

            TestModel(webModel);
        }