Manual do Desenvolvedor - Buscas com AdvancedQuery
O 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.
