Программная установка CAML-запроса для члена QueryOverride пользовательской веб-части, которая наследуется от ContentByQueryWebPart
Название в значительной степени подводит итог, что я ищу. Я создал пользовательскую веб-часть в Visual Studio 2010 для решения SharePoint 2010, которая является производной от ContentByQueryWebPart. Цель WebPart - показать пользователям обзор их собственных задач, взятых из нескольких списков задач. Пока проблем нет.
Но я переопределил OnInit-метод, чтобы получить некоторые данные из URL-запроса (используя Page.Request), чтобы выполнить некоторую пользовательскую фильтрацию, группировку и сортировку. Проблема в том, что пользовательский CQWP не будет принимать созданную мной строку CAML.
Я уже попробовал некоторые подходы, но ни один из них, казалось, не работал. Я даже сократил его до минимума. Возможно, место, где я установил QueryOverride, неверно. (OnInit / OnLoad / до или после базы. На ****(e);?) На данный момент это выглядит так:
protected override void OnInit(EventArgs e)
{
string query = "<Query><Where><Eq><FieldRef Name=\"AssignedTo\" /><Value Type=\"User\"><UserID /></Value></Eq></Where></Query>";
this.QueryOverride = query;
base.OnInit(e);
}
Я надеюсь, что у кого-то есть идея. Любая помощь приветствуется. Если все еще что-то неясно, пожалуйста, не стесняйтесь спрашивать.
Маркус Швальбе
Примечание: английский не мой родной язык, поэтому, пожалуйста, извините меня за каждую ошибку, которую я сделал в этом посте.:)
1 ответ
Я нашел решение сделать это. Похоже, что он не хотел UserID-тег в качестве значения.
Это работает как талисман, когда вы используете атрибут Name текущего (или любого другого) объекта SPUser и меняете тип значения на "Текст": (Кроме того, вы можете оставить Query-тег и " can" заменить на ', который выглядит чище)
this.QueryOverride = "<Where><Eq><FieldRef Name='AssignedTo' /><Value Type='Text'>" + SPContext.Current.Web.CurrentUser.Name + "</Value></Eq>";
Надеюсь, это поможет любому, у кого такая же проблема. задушевно,
Маркус Швальбе