我正在尝试理解通过代码扩展cqwp的机制。
可能很难相信,但我找不到一篇文章来创建从content by query web part继承的网络部分。
我需要做的是在Web部件属性中键入listname。然后,所有分组,排序和查询都将通过扩展Web部件中的代码实现。
我已经阅读过waldek的帖子,但是它们有点高级用作备忘单。
Msdn的示例显示了itemstyle的自定义和在webpart属性工具栏上设置queryoverride。我需要通过代码设置它。
注意:如果这不是自定义cqwp的方法,请告诉我。我的目的是将wp放在母版页中并设置listname并等待结果显示(:
我试图通过代码分别通过OnInit和ModifyXsltArgument方法设置listguid和queryoverride。没有返回,当我导出wp时,似乎没有设置listguid和queryoverride。
我确定我做了一些基本错误,所以我很感激你的帮助。 提前谢谢..
答案 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部分,您只需要进行扩展即可。
请参见此处的示例:
让我知道你的具体目标是什么,我可以帮助你完成它。