Como posso obter o correto SPFieldUserValue usar SPSiteDataQuery para agregar tarefas para um determinado usuário?

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

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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top