Como posso obter o correto SPFieldUserValue usar SPSiteDataQuery para agregar tarefas para um determinado usuário?
-
10-12-2019 - |
Pergunta
Estou tentando reunir todas as tarefas de um determinado tipo de conteúdo para um determinado usuário.Para fazer isso, estou usando uma SPSiteDataQuery que se parece com isso:
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);
Ele funciona bem se eu só quiser filtrar o tipo de conteúdo, mas de filtragem para o usuário falha.
Aqui está o que eu acho que o problema é..o campo AssignedTo contém valores que esta aparência
17;#TestUser01
Mas a minha regulares LoginName contém as declarações de seqüência de caracteres e de domínio e se parece com isso
i:0#.w|test\TestUser01
Eu tentei criar o SPFieldUserValue para obter o mesmo usuário de seqüência de caracteres que é encontrado no AssignedTo-campo..assim:
SPFieldUserValue userValue = new SPFieldUserValue(web, SPContext.Current.Web.CurrentUser.ID, SPContext.Current.Web.CurrentUser.LoginName);
..mas, em seguida, acabei de receber um valor que tem esta aparência:
17;#i:0#.w|test\TestUser01
..e eu ainda não obter resultados a partir de minha consulta.
Como posso obter a seqüência correta para executar a minha consulta?
Solução
Alterando o CAML como este:
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);
ele vai buscar para o usuário atual :)
Se você precisar especificar outro usuário, você pode usar:
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);
e só fazer sue você tem o ID do usuário no userValue
Outras dicas
A Consulta CAML para buscar os valores para o usuário atual é:
"<Where><Eq><FieldRef Name='AssignedTo' /><Value Type='Integer'><UserID Type='Integer' /></Value></Eq></Where>";
E por outro usuário, ele deve ser como mencionado pelo @Robert.