Vous avez 2 possibilités:
[list=*] ]vous vous authentifiez en tant qu’admin0: il faut que l’attribut domain de FolderQuery soit renseigné, et que le domainId de l’attribut domain contienne l’ID du domaine que vous souhaitez requêter - il n’est pas possible de requêter l’ensemble des domaines d’un coups, il faut faire une requête par domaine/] ]soit vous vous authentifiez en tant qu’utilisateur/administrateur du domaine visé, et dans ce cas l’attribut domaine de FolderQuery peut ne pas être renseigné, par contre seul les carnets d’adresses sur lequel cet utilisateur a des droits seront remontés/]
[/list]
Bon fonctionne avec l’admin du domaine, je récupère bien le Folder… (En fait j’avais supprimé l’admin du domaine, on ne veut pas de compte administrateur générique)
Connexion OK avec admin0 mais toujours rien… malgré avoir ajouté le Domain dans le FolderQuery
SystemClient sc = new SystemLocator().locate(prop.getProperty("core.url"));
ICore coreClient = CoreClient.newCore(prop.getProperty("core.url"));
AccessToken token = sc.login(prop.getProperty("core.login"), prop.getProperty("core.password"), "EB");
Domain dom = sc.getDomainFromId(token, token.getDomainId());
System.out.println(dom);
FolderQuery fq = new FolderQuery();
fq.setDomain(dom);
fq.setDomainBookOnly(true);
fq.setName("Mairie");
List<Folder> folders = coreClient.getAddressBook().findFolders(token, fq);
for (Folder f : folders) {
System.out.println(f.getDomain() + " " + f.getName());
}
Maintenant autre problématique, je vais devoir mettre à jour les contacts de ce carnet d’adresse.
Je mets à jour le post…
J’avais dans l’idée de supprimer le carnet d’adresse et de le recrééer…
Finalement, j’essaie de tester l’existence du contact dans le carnet, s’il existe je le met à jour sinon je le créé.
Problème, le seul champs vraiment fiable sur lequel je peux faire la vérification est le code géographique de la commune (carnet d’adresse des mairies) que je vais mettre dans le champs externalID de la fiche contact.
J’essai de faire çà :
ContactQuery cq = new ContactQuery();
cq.setQuery("extid:"+vCODEGEO);
ResultList<Contact> contacts= ab.advancedSearchContact(token, cq);
et j’ai cette erreur là dans les log elascticsearch :
[2016-01-29 13:09:36,432][DEBUG][action.search.type ] [Dark Angel] [contact][3], node[HHo4ZYTmQua2PGSnYJaCaw], [P], s[STARTED]: Failed to execute [org.elasticsearch.action.search.SearchRequest@36e08fd5] lastShard [true]
org.elasticsearch.search.SearchParseException: [contact][3]: from[0],size[10]: Parse Failure [Failed to parse source [{"from":0,"size":10,"query":{"filtered":{"query":{"query_string":{"query":"extid:89001","fields":["_all"],"default_operator":"and","analyze_wildcard":true,"minimum_should_match":"100%"}},"filter":{"bool":{}}}},"fields":"id","sort":{"sortable":{"order":"asc"}}]}]]
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:681)
at org.elasticsearch.search.SearchService.createContext(SearchService.java:537)
at org.elasticsearch.search.SearchService.createAndPutContext(SearchService.java:509)
at org.elasticsearch.search.SearchService.executeQueryPhase(SearchService.java:264)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:231)
at org.elasticsearch.search.action.SearchServiceTransportAction$5.call(SearchServiceTransportAction.java:228)
at org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:559)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.index.query.QueryParsingException: [contact] [bool] filter has no inner should/must/must_not elements
at org.elasticsearch.index.query.BoolFilterParser.parse(BoolFilterParser.java:130)
at org.elasticsearch.index.query.QueryParseContext.executeFilterParser(QueryParseContext.java:343)
at org.elasticsearch.index.query.QueryParseContext.parseInnerFilter(QueryParseContext.java:324)
at org.elasticsearch.index.query.FilteredQueryParser.parse(FilteredQueryParser.java:74)
at org.elasticsearch.index.query.QueryParseContext.parseInnerQuery(QueryParseContext.java:277)
at org.elasticsearch.index.query.IndexQueryParserService.innerParse(IndexQueryParserService.java:382)
at org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:281)
at org.elasticsearch.index.query.IndexQueryParserService.parse(IndexQueryParserService.java:276)
at org.elasticsearch.search.query.QueryParseElement.parse(QueryParseElement.java:33)
at org.elasticsearch.search.SearchService.parseSource(SearchService.java:665)
... 9 more
Mettez nous le code dans un ticket, nous pourrons valider que tout est bon.
Cependant il va falloir utiliser un token d’un utilisateur ayant les droits de lecture/écriture sur ce carnet pour en gérer son contenu. Celui d’admin0 ne conviendra pas.