SPSITEDATAQUERY를 사용하여 특정 사용자의 작업을 집계하려면 올바른 SPFIELDUSERVALUE를 사용할 수 있습니까?

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

  •  10-12-2019
  •  | 
  •  

문제

특정 사용자에 대해 특정 콘텐츠 유형의 모든 작업을 수집하려고합니다.이것을 달성하기 위해 다음과 같이 보이는 spsitedataQuery를 사용합니다.

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);
.

단지 콘텐츠 유형을 필터링하지만 사용자에 대한 필터링을 필터링하고자하는 경우 잘 작동합니다.

여기에 문제가있는 것입니다. AssignedTo 필드에는 다음과 같이 표시되는 값이 포함됩니다.

17;#TestUser01
.

그러나 정기적 인 LoginName에는 클레임 문자열 및 도메인이 포함되어 있으며 다음과 같습니다

i:0#.w|test\TestUser01
.

SpfieldUservalue를 만들려고했는데, assignedto-field에서 찾은 동일한 사용자 문자열을 얻으려고합니다.

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