Pergunta

Eu tenho um que apresenta uma variedade de itens em um 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 SPViews ID ToStringed.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

Foi útil?

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.

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