Warning: count(): Parameter must be an array or an object that implements Countable in E:\Vhosts\mysticslayer.com\httpdocs\wp-includes\post-template.php on line 275

Warning: count(): Parameter must be an array or an object that implements Countable in E:\Vhosts\mysticslayer.com\httpdocs\wp-includes\post-template.php on line 275

Warning: count(): Parameter must be an array or an object that implements Countable in E:\Vhosts\mysticslayer.com\httpdocs\wp-includes\post-template.php on line 275

Warning: count(): Parameter must be an array or an object that implements Countable in E:\Vhosts\mysticslayer.com\httpdocs\wp-includes\post-template.php on line 275
André Krijnen

Use Content by Query Web Part on a Fixed List created dynamic in an onet.xml

by on Nov.07, 2011, under features, Programming, SharePoint 2010

There is nothing as worse as a Content By Query Web Part that you can’t use when you want to fix it against a List which will be made automatically for example.

I would like to create a Team Site based on a Custom Web template with an extra sub-site with blogging functionality. This blogging functionality is used for exposing news of the Team or Department.

But when using the functionality like

<Property name=”WebUrl” type=”string”>~site/News</Property>

and using the property

<Property name=”ListName” type=”string”>Posts</Property>

and you removed the value of the property

<Property name=”ListGuid” type=”string”></Property>

it won’t render the CQWP web part by default. The reason is that the ListGuid is needed to render the Web Part.

But also an issue is that, when your list is created it has a changed ListGuid. The ListGuid is never the same when you create a new List.

So basically I created the follow code which will fix that issue.

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Publishing;
using Microsoft.SharePoint.Publishing.WebControls;

namespace AK.Custom.CQWP 
{
    [ToolboxItemAttribute(false)]
    public class AKCQWP : ContentByQueryWebPart
    {        

        protected override void  OnLoad(EventArgs e)
        {
 	        if(!string.IsNullOrEmpty(this.WebUrl) && 
                !string.IsNullOrEmpty(this.ListName) && 
                string.IsNullOrEmpty(this.ListGuid))
            {
                SPWeb webRoot = SPContext.Current.Site.OpenWeb();
                if (this.WebUrl.StartsWith("~site"))
                {
                    this.WebUrl = this.WebUrl.Replace("~site", "");
                    using(SPWeb web = SPContext.Current.Site.OpenWeb(webRoot.ServerRelativeUrl 
+ this.WebUrl, true))
                    {
                        SPList list = web.Lists[this.ListName];
                        this.ListGuid = list.ID.ToString();
                        //this.ListUrl = webRoot.ServerRelativeUrl + this.WebUrl;
                        this.WebUrl = webRoot.ServerRelativeUrl + this.WebUrl;
                    };
                    
                }
                else if(this.WebUrl.StartsWith("/News"))
                    return;
                else
                {
                    using(SPWeb web = SPContext.Current.Site.OpenWeb(this.WebUrl, true))
                    {
                        SPList list = web.Lists[this.ListName];
                        this.ListGuid = list.ID.ToString();
                        this.WebUrl = this.WebUrl;
                    };
                }
                
            }
            base.OnLoad(e);

            
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
        }
    }
}

When you have created this part of your solution ensure that you Export the standard CQWP and edit it like you want to. First of all, what you need is to ensure that it takes your assembly instead of the default CQWP assembly.

    <metaData>
      <type name="AK.Custom.CQWP.AKCQWP, $SharePoint.Project.AssemblyFullName$" />
      <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
    </metaData>

Change the properties as following:

<Property name=”WebUrl” type=”string”>~site/News</Property>
<Property name=”ListName” type=”string”>Posts</Property>
<Property name=”ListGuid” type=”string”></Property>
:, , , , , ,


Warning: count(): Parameter must be an array or an object that implements Countable in E:\Vhosts\mysticslayer.com\httpdocs\wp-includes\class-wp-comment-query.php on line 405

Leave a Reply

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Blogroll

A few highly recommended websites...