Você está aqui: Página Inicial Documentação Manual do Desenvolvedor - Buscas com AdvancedQuery

Manual do Desenvolvedor - Buscas com AdvancedQuery

por Ramiro B. da Luz última modificação 13/11/2011 09:56
Uma breve explanação sobre uso do AdvancedQuery como alternativa para simplificar buscas complexas com o ZCatalog.

 

AdvancedQuery é um produto excelente para contornar algumas limitações presentes no ZCatalog. Uma documentação mais completa pode ser encontrada aqui.

Para instalá-lo, adicione no setup.py do seu produto:

      install_requires=[
          'setuptools',
          'Products.AdvancedQuery',
          ]

 

Trabalhar com o AdvancedQuery é extremamente fácil. Num cenário simplificado, pode-se realizar uma busca de maneira análoga à de uma consulta ao ZCatalog:

from Products.CMFCore.utils import getToolByName cat = getToolByName(context, 'portal_catalog')
aq = cat.makeAdvancedQuery({'portal_type' : 'Event', 'review_state' : 'pending'})
brains = cat.evalAdvancedQuery(aq)

 

À primeira vista, parece somente uma maneira mais complicada de fazer o que você já sabe. Contudo, o AdvancedQuery possibilita várias coisas que seriam muito mais complexas utilizando consultas diretas ao ZCatalog. Por exemplo, se quiséssemos selecionar todos os documentos publicados ordenados pelo criador e sub-ordenados pela data de publicação:

from Products.CMFCore.utils import getToolByName
cat = getToolByName(context, 'portal_catalog')
aq = cat.makeAdvancedQuery({'portal_type' : 'Document', 'review_state' : 'published'})
brains = cat.evalAdvancedQuery(aq, ( ('Creator', 'asc'), ('effective', 'asc'), ) )

 

Como realizar a mesma ordenação obtendo os documentos que tenham itens relacionados?

from Products.AdvancedQuery import Ge
from Products.CMFCore.utils import getToolByName
cat = getToolByName(context, 'portal_catalog')
aq = cat.makeAdvancedQuery({'portal_type' : 'Document', 'review_state' : 'published'})
aq &= Ge('getRawRelatedItems', None)
brains = cat.evalAdvancedQuery(aq, ( ('Creator', 'asc'), ('effective', 'asc'),  ) )

Como podemos ver, o AdvancedQuery provê o que quisermos do catálogo de uma maneira mais fácil. Sua adoção é bastante simples, já que utiliza os mesmos formatos e parâmetros de consulta que você já está habituado. Quando estiver pronto para utilizá-lo, poderá mesclar critérios mais avançados de busca sem afetar o modo de trabalho com o  portal_catalog ou alguma outra ferramenta de catálogo.

É extremamente recomendada a leitura da documentação do AdvancedQuery para obter detalhes de opções mais avançadas.