Как я могу получить правильный SPFIELDUSERVALUE, чтобы использовать SpSitedataQuery для совокупных задач для определенного пользователя?
-
10-12-2019 - |
Вопрос
Я пытаюсь собрать все задачи определенного типа контента для определенного пользователя.Для достижения этого я использую SPSTALATATAQUERY, который выглядит так:
string where = String.Format(@"<Where>
<And>
<BeginsWith>
<FieldRef Name='ContentTypeId'/>
<Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
</BeginsWith>
<Eq>
<FieldRef Name='AssignedTo'/>
<Value Type='Text'>{0}</Value>
</Eq>
</And>
</Where>", userValue.ToString());
query.Query = where;
DataTable results = web.GetSiteData(query);
.
Это работает нормально, если я просто хочу фильтровать для типа содержимого, но фильтрация для пользователя не удается.
Вот то, что я думаю, проблема .. Назначенное поле содержит значения, которые выглядят так
17;#TestUser01
.
Но мое регулярное в системе loginnam содержит строку и домен претензий и выглядит так, как это
i:0#.w|test\TestUser01
.
Я пытался создать SPFieldUservalue, чтобы получить одну и ту же строку пользователя, которая находится в присвоенном поле .. Таким образом:
SPFieldUserValue userValue = new SPFieldUserValue(web, SPContext.Current.Web.CurrentUser.ID, SPContext.Current.Web.CurrentUser.LoginName);
.
.. но тогда я просто получаю значение, которое выглядит так:
17;#i:0#.w|test\TestUser01
.
.. и я все еще не получаю результатов от моего запроса ..
Как я могу получить правильную строку для выполнения моего запроса?
Решение
By changing the CAML like this:
string where = @"<Where>
<And>
<BeginsWith>
<FieldRef Name='ContentTypeId'/>
<Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
</BeginsWith>
<Eq>
<FieldRef Name='AssignedTo' LookupId='TRUE' />
<Value Type='Integer'><UserID /></Value>
</Eq>
</And>
</Where>";
query.Query = where;
DataTable results = web.GetSiteData(query);
it will fetch for current user :)
If you need to specify another user you can use:
string where = String.Format(@"<Where>
<And>
<BeginsWith>
<FieldRef Name='ContentTypeId'/>
<Value Type='Text'>0x0108010031C20CDC28544f93B27958D36ACBE2F5</Value>
</BeginsWith>
<Eq>
<FieldRef Name='AssignedTo' LookupId='TRUE' />
<Value Type='Integer'>{0}</Value>
</Eq>
</And>
</Where>", userValue.ToString());
query.Query = where;
DataTable results = web.GetSiteData(query);
and just make sue you have the ID of the user in userValue
Другие советы
The CAML Query for fetching the values for current user is:
"<Where><Eq><FieldRef Name='AssignedTo' /><Value Type='Integer'><UserID Type='Integer' /></Value></Eq></Where>";
And for another user it should be as mentioned by @Robert.