API de requête
L'API de requête fournit des options de requête beaucoup plus performantes que les méthodes "findBy" de la classe d'espace de travail.
L'exemple suivant montre comment extraire et utiliser le service QueryService dans le but de rechercher directement sous la zone de site parentSiteArea le premier contenu comportant un élément nommé "myElement" :
Content contentWithMyElement; QueryService queryService = workspace.getQueryService(); Query query = queryService.createQuery(Content.class); query.addParentId(parentSiteArea.getId(), QueryDepth.CHILDREN); try { ResultIterator resultIterator = queryService.execute(query); if (resultIterator.hasNext()) { Content childContent = (Content) resultIterator.next(); while (childContent.hasComponent("myElement")) { contentWithMyElement = childContent; break; } } } catch (QueryServiceException e) { // Handle exception }
L'exemple ci-après montre comment créer une requête avec des conditions 'AND' et 'OR' à l'aide des fonctions Conjunction et Disjunction. Dans le cadre de cet exemple, l'ensemble du contenu dont le nom commence par 'news' ou dont le nom commence par 'article' et comporte un mot clé 'news', est traité :
QueryService queryService = workspace.getQueryService(); Query query = queryService.createQuery(Content.class); Disjunction or = new Disjunction(); or.add(Selectors.nameLike("news%")); Conjunction and = new Conjunction(); and.add(Selectors.nameLike("article%")); and.add(ProfileSelectors.keywordsContain("news")); or.add(and); query.addSelector(or); try { ResultIterator resultIterator = queryService.execute(query); while (resultIterator.hasNext()) { Content content = (Content) resultIterator.next(); // Process Content result } } catch (QueryServiceException e) { // Handle exception }