通过代码扩展内容查询Web部件

时间:2011-09-03 09:08:29

标签: sharepoint-2010 web-parts extend cqwp

我正在尝试理解通过代码扩展cqwp的机制。

可能很难相信,但我找不到一篇文章来创建从content by query web part继承的网络部分。

我需要做的是在Web部件属性中键入listname。然后,所有分组,排序和查询都将通过扩展Web部件中的代码实现。

我已经阅读过waldek的帖子,但是它们有点高级用作备忘单。

Msdn的示例显示了itemstyle的自定义和在webpart属性工具栏上设置queryoverride。我需要通过代码设置它。

注意:如果这不是自定义cqwp的方法,请告诉我。我的目的是将wp放在母版页中并设置listname并等待结果显示(:

我试图通过代码分别通过OnInit和ModifyXsltArgument方法设置listguid和queryoverride。没有返回,当我导出wp时,似乎没有设置listguid和queryoverride。

我确定我做了一些基本错误,所以我很感激你的帮助。 提前谢谢..

2 个答案:

答案 0 :(得分:3)

要继承ContentQueryWebPart,只需执行以下操作:

using System;
using System.ComponentModel;
using Microsoft.SharePoint.Publishing.WebControls;
using Microsoft.SharePoint;
using Microsoft.Office.Server.UserProfiles;

namespace YOURNAMESPACE
{
    [ToolboxItemAttribute(false)]
    public class CustomContentQueryWebPart : ContentByQueryWebPart
    {
        protected override void OnLoad(EventArgs e)
        {
            try
            {
                //Reemplazamos [UserContext:<field>] por su valor
                string val, field;
                UserProfile userProfile = getCurrentUserProfile();

                val = this.FilterValue1;
                if (val.StartsWith("[UserContext:") && val.EndsWith("]"))
                {
                    field = val.Substring(13, val.Length - 14);
                    this.FilterValue1 = userProfile[field].Value.ToString();
                }

                val = this.FilterValue2;
                if (val.StartsWith("[UserContext:") && val.EndsWith("]"))
                {
                    field = val.Substring(13, val.Length - 14);
                    this.FilterValue2 = userProfile[field].Value.ToString();
                }

                val = this.FilterValue3;
                if (val.StartsWith("[UserContext:") && val.EndsWith("]"))
                {
                    field = val.Substring(13, val.Length - 14);
                    this.FilterValue3 = userProfile[field].Value.ToString();
                }
            }
            catch (Exception ex) { }
            finally
            {
                base.OnLoad(e);
            }
        }

        private UserProfile getCurrentUserProfile()
        {
            SPUser user = SPContext.Current.Web.CurrentUser;
            //Create a new UserProfileManager
            UserProfileManager pManager = new UserProfileManager();
            //Get the User Profile for the current user
            return pManager.GetUserProfile(user.LoginName);
        }
    }
}

在这个例子中,我刚刚添加了一个过滤器来从UserProfile获取一个字段,就像原始webpart使用查询字符串一样。你到底需要什么?

答案 1 :(得分:0)

  

然后所有的分组,排序和查询都将通过实现   代码,在扩展的Web部分中。

为什么要编码CQWP中已有的所有功能。也许我错过了这一点。关于扩展Web部分,您只需要进行扩展即可。

请参见此处的示例:

http://www.andrewconnell.com/blog/archive/2008/02/18/Subclassing-the-Content-Query-Web-Part-Adding-Dynamic-Filtering.aspx

http://ecqwp.codeplex.com/

让我知道你的具体目标是什么,我可以帮助你完成它。