[RESOLU] SCALA : pb pour lister les contacts

Bonjour,

Je me bats avec Scala et vos API (plus que très légèrement documentées …) afin de mettre en place un annuaire public pour tout le domaine.

nous bloquons sur un pb curieux :
quand on liste les membres du carnet : il retourne 67 entrées, mais si je parcours la liste obtenue => je n’en trouve que 10 …

      val cq = new ContactQuery()
      cq.setFields("_all")
      cq.setSuscribedFolderOnly(false)
      cq.setIncludePublicCollectedFolder(true)
      println("liste des contacts")
      val liste = ablocator.advancedSearchContact(gtoksudo, cq)
      println("nb de contacts retournés : " + liste.getNumFound)
      println("")
      var i=0
      for (c <- liste)
      {
        println(i+ " contact : " + c.getFirstname)
        i +=1
      }
      println("fin liste")

cela me retourne :

liste des contacts
nb de contacts retournés : 67

0 contact : CO Accueil-Standard
1 contact : Elektromechanik
2 contact : Extrakcia
3 contact : Fyzikálno-Chemický Cabák
4 contact : GL Accueil-Standard
5 contact : GL Fax Odbyt
6 contact : GL Fax Všeobecný
7 contact : GP Accueil-Standard
8 contact : HG Accueil-Standard
9 contact : Hotline SSI
fin liste

je peux sans aucun problème récupérer un contact autre que ceux affichés via le query en précisant son ID par exemple, mais impossible via la liste retournée

le pb vient probablement du code, mais je ne trouve pas où…

merci de votre aide :wink:

up

Visiblement cet appel là demande de définir explicitement la pagination.

#!/bin/sh

# create classpath from blue-mind client jars in current dir
d=`dirname $0`
cp="."
for jar in $d/bluemind-client-api/jars/*.jar; do
    cp="$cp:$jar"
done
exec scala -classpath $cp "$0" "$@"
!#

import net.bluemind.core.client.locators._
import net.bluemind.core.client._
import net.bluemind.core.api._
import net.bluemind.core.api.system._
import net.bluemind.core.api.user._
import net.bluemind.core.api.mailshare._
import net.bluemind.core.api.contact._
import net.bluemind.core.api.acl._
import scala.collection.JavaConversions._

object listContacts {
    def main(args: Array[String]) {
	if (args.length != 1) {
		println("usage: <core hostname>")
		sys.exit(1)
	}
	val url = "http://" + args(0) + ":8085/services"
	val sc = new SystemLocator().locate(url)
	
        val tokFile = scala.io.Source.fromFile("/etc/bm/bm-core.tok")
        val permSid = tokFile.mkString
        tokFile.close()
	println("token: " + permSid)
	val gtok = sc.login("admin0@global.virt", permSid, "script")
	val utok = sc.sudo(gtok, "admin@willow.vmw")
	val core = CoreClient.newCore(url)
	
	val cq = new ContactQuery()
	cq.setSuscribedFolderOnly(false)
	cq.setIncludePublicCollectedFolder(true)
	cq.setPagination(new Pagination(0, 10000))
	val liste = core.getAddressBook().advancedSearchContact(utok, cq)
	
	println("nb de contacts retournés : " + liste.getNumFound)
	println("")
	var i=0
	for (c <- liste)
	{
            println(i + " contact : " + c.getFirstname)
            i +=1
	}
	println("fin liste")
	
	sc.logout(utok)
	sc.logout(gtok)
	sys.exit(0)
    }
}

listContacts.main(args)

Pour informations, nous travaillons sur l’aspect simplicité/documentation de nos APIs.
Nous savons qu’actuellement, certaines ne sont pas simple du tout à utiliser - d’autant plus lorsqu’on passe par SOAP.

La version 3.5 devrait apporter une nette amélioration sur ce point.

Thomas :
OK ça fonctionne => merci :wink:

Anthony : en effet ce ne serait pas du luxe, et je me doute que c’est fastidieux
mais le gain à pouvoir utiliser simplement ces API sera énorme.