Как я могу получить правильный SPFIELDUSERVALUE, чтобы использовать SpSitedataQuery для совокупных задач для определенного пользователя?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/91625

  •  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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top