membre.liste () dans l'API de répertoire du SDK d'administration Google (Java)


J'ai un morceau de code(en Java) pour lister tous les members d'un groupe sur un domaine Google Apps personnel. Cela utilise l'API google Directory.

Voici l'extrait:

public static void listMembers(String groupKey,Directory service) throws IOException {
        Members res = service.members().list(groupKey).execute();

        List<Member> members = res.getMembers();
        int count = 0;
        if (members == null || members.size() == 0) {
            System.out.println();
            System.out.println("No members found.");
        } else {
            System.out.println();
            System.out.println("Members of "+groupKey);
            for (Member member : members) {
                count++;
                System.out.println(member.getEmail());
            }
            System.out.println(count);
        }
    }

Cela fonctionne bien, mais pour n'importe quel groupe, pas plus de exactly 200 members sont répertoriés, bien qu'un groupe ait en fait plus d'utilisateurs. J'ai essayé de rechercher la limite sur la fonction members.list() que j'utilise, mais je ne l'ai pas trouvée dans la documentation Google pour l'API Directory. Est-il une limite? Si oui, puis-je en quelque sorte tout lister les utilisateurs?

Author: DaImTo, 2015-07-06

2 answers

Jetez un oeil aux attributs maxResults et pageToken sur les membres .liste(). La page ne spécifie pas mais je crois que 200 est à la fois la valeur par défaut maxResults et maximum. Votre application doit vérifier l'existence de l'attribut pageToken dans les résultats. S'il est défini, vous avez au moins une autre page de résultats à saisir. Continuez à parcourir les résultats jusqu'à ce que pageToken ne soit pas défini.

 3
Author: Jay Lee, 2015-07-06 11:31:41

J'ai modifié le code pour utiliser le pageToken attribut , comme ci-dessous:

public static void listMembers(String groupKey,Directory service) throws IOException {

        Directory.Members.List res = service.members().list(groupKey);
        Members mbrs;
        List<Member> members ;
        int count = 0;
        String pageToken;
        do{
                mbrs = res.execute();
                members = mbrs.getMembers();
                System.out.println();
                System.out.println("Members of "+groupKey);
                for (Member member : members) {
                    count++;
                    System.out.println(member.getEmail());
                }
                pageToken = mbrs.getNextPageToken();
                //System.out.println(res.getPageToken());   //The first pageToken of any Directory.Members.List is null.
                res.setPageToken(pageToken);
                System.out.println(count);
        }while(pageToken!=null);
    }

Je voudrais ajouter, la première pageToken de n'importe quel Répertoire.Membre.La liste est nulle. On peut vérifier cela, en changeant la condition de la boucle while de pageToken!=null à true. Ce changement listera tous les membres encore et encore à plusieurs reprises.

 3
Author: Piyush Jain, 2015-07-07 05:28:27