SPSITEDATAQUERY를 사용하여 특정 사용자의 작업을 집계하려면 올바른 SPFIELDUSERVALUE를 사용할 수 있습니까?
-
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.
제휴하지 않습니다 sharepoint.stackexchange