Usando SPQuery com SPList.GetItems(SPView)
-
10-12-2019 - |
Pergunta
Eu tenho um web-parte que apresenta uma variedade de itens em um spgridview com base em uma SPView
.
Além disso, eu tenho implementado um módulo de pesquisa que, quando uma palavra-chave é inserida deve obter todos os itens que tem um Título que contém uma parte de a inserção de palavra-chave, usando SPQuery
.
Usando SPList.GetItems()
funciona bem quando usando o SPQuery
=>
var itemCollection = SPList.GetItems(SPQuery);
O código acima dá-me os itens que eu quero, mas infelizmente também todas as que eu não quero.O que eu quero é conseguir todos os itens do SPView
que correspondem a inserção de palavra-chave.
Eu descobri que você pode usar SPQuery juntamente com SPView =>
var itemCollection = SPList.GetItems(SPQuery, "viewName");
O que parece muito bom, mas quando estudado mais de perto, revela que o "viewName", na verdade, deve ser o SPView
s ID ToString
ed.E que se o SPQuery
contém um <Where>
cláusula, o "viewName" substitui a consulta e retorna apenas a cada item em que o modo de exibição específico.
Então a minha pergunta, não existe uma forma de se consultar um SPView
diretamente ou tenho que fazer um doloroso contornar?
Solução de código
Obrigado, Simon Doy, para a dica.
var query = new SPQuery(SPList.GetView(ListViewId))
{
Query = string.Format(string.Concat(
"<Where>",
"<Or>",
"<Or>",
"<Contains>",
"<FieldRef Name='Title'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"<Contains>",
"<FieldRef Name='FieldAutoGeneratedName'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"</Or>",
"<Contains>",
"<FieldRef Name='FieldATTCode'/>",
"<Value Type='Text'>{0}</Value>",
"</Contains>",
"</Or>",
"</Where>"
), param)
};
var items = SPList.GetItems(query);
Código acima retorna todos os itens do especificado listview correspondente a param
Solução
Como sobre a criação do SPQuery objeto usando o construtor, onde você pode passar o adequado SPView.
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.spquery.aspx
Em seguida, você pode adicionar uma consulta para incluir os itens apropriados, algo como:-
var query = new SPQuery(spView);
query.Query = String.Format("<Where><Eq><FieldRef Name='Title'/><Value Type='Text'>{0}</Value></Eq></Where>", keyword);
SPListItemCollection listItems = oList.GetItems(query);
Outras dicas
Se o SPQuery retorna todos os itens da Lista e, em seguida, na maioria dos casos, a QueryString é simplesmente errado.O (na minha optionion estranho) padrão de comportamento é que, em caso de errado QueryStrings um Caml-Consulta retorna TODOS os itens.
Por exemplo, de um erro comum:A QueryString para SPQuery.Consulta NÃO deve incluir o "<Query>"A Tag.Se assim for, ele retorna todos os itens e ignora Cláusula Onde se completamente.