2017-04-04 2 views
0

Ich benutze Google Apps Script, um eine Liste aller Super-Admins und delegierten Admins in unserer Google Apps-Liste zu schreiben.So verwenden Sie pagetoken Google App-Skript

mein Skript funktioniert gut, aber es begrenzt das Ergebnis auf 500 Benutzer als das ist die Grenze, die Google hat, und Google schlägt vor, pageToken dafür zu verwenden, aber bin mir nicht sicher, wie es zu verwenden.

Kann jemand mir helfen zu verstehen, wie ich token in folgenden Script- verwenden Sie:

function getAdmins(){ 
var fileArray = [["First Name", "Last Name", "Email", "Admin Role"]] 

    var optionalArgs = {"customer":"my_customer", maxResults: 500} 
    var allUsers = AdminDirectory.Users.list(optionalArgs).users 

    for (i=0; i<allUsers.length; i++){ 
    userDetails = allUsers[i] 
    var fName = userDetails.name.givenName 
    var lName = userDetails.name.familyName 
    var pEmail = userDetails.primaryEmail 
    var Admin = userDetails.isAdmin 
    var dAdmin = userDetails.isDelegatedAdmin 

    if (Admin === true) { 
    Admin = "Super Administrator" 
    } 
    else if (dAdmin === true){ 
     Admin = "Delegated Administrator" 
    } 
    Logger.log(Admin) 

    } 
    var ss = SpreadsheetApp.getActive() 
    var sheet = ss.getSheetByName("Admin Users") 
    fileArray.push([fName, lName, pEmail,Admin]); 

    Logger.log(fileArray) 



    sheet.getRange(1, 1, fileArray.length, 4).setValues(fileArray) 


    }} 
+0

Dieser [Beispielcode] (https://developers.google.com/apps-script/advanced/admin-sdk-distriction#list_all_users) funktioniert genau so, wie Sie möchten. Kurz gesagt, jeder Aufruf, den Sie ausführen, gibt ein nextPageToken zurück (d. H. Ein Token, um die nächste Seite im Ergebnis zu identifizieren), die Sie beim nächsten Aufruf einbeziehen müssen, um diese Seite zu erhalten, und so weiter. –

+0

vielen Dank, ich möchte lernen, wie kann ich das in der for-Schleife oder mein Skript selbst verwenden. –

Antwort

0

Um zu verstehen, token Sie den Rückgabewert (oder Antwort)

AdminDirectory.Users.list(optionalArgs) 

zu verstehen, müssen diese Funktion gibt eine reponse of the format:

{ 
    "kind": "admin#directory#users", 
    "etag": etag, 
    "users": [ 
    users Resource 
    ], 
    "nextPageToken": string 
} 

Um die u zugreifen ser Informationen, die Sie verwenden, um die „Benutzer“ -Taste wie so

var allUsers = AdminDirectory.Users.list(optionalArgs).users 
//below the same is written in two seperate lines 
var page = AdminDirectory.Users.list(optionalArgs) 
var allUsers = page.users 

Wie Sie aus dem Response-Objekt sehen können Sie auch nextpagetoken Schlüssel haben, die definiert, was die nächste Seite in der Antwort ist, Sie greifen diese nextpagetoken wie so:

pageToken = page.nextPageToken; 

Dann passieren Sie die token auf einen neuen Anruf wie so AdminDirectory:

var optionalArgs = {"customer":"my_customer", maxResults: 500, pageToken: pageToken} 
      page = AdminDirectory.Users.list(optionalArgs) 

Dies wird die nächste Seite auf der Suche abgerufen werden und auch die nextpagetoken, falls vorhanden, für ne xt Seite in der Suche. Sie führen einen rekursiven Aufruf aus, bis Sie pageToken nicht mehr haben.

Der folgende Code sollte genau das tun und wurde durch Zusammenführen von Codes aus example code on google developer page und dem oben von @GlodyArora geschriebenen Code erstellt. Wörtlich nur eine do while-Schleife hinzugefügt, wie im Beispielcode erwähnt.

function getAdmins(){ 
    var fileArray = [["First Name", "Last Name", "Email", "Admin Role"]] 
    var pageToken, page; 
    do { 
     var optionalArgs = {"customer":"my_customer", maxResults: 500, pageToken: pageToken} 
     page = AdminDirectory.Users.list(optionalArgs) 
     var allUsers = page.users 

     for (i=0; i<allUsers.length; i++){ 
     userDetails = allUsers[i] 
     var fName = userDetails.name.givenName 
     var lName = userDetails.name.familyName 
     var pEmail = userDetails.primaryEmail 
     var Admin = userDetails.isAdmin 
     var dAdmin = userDetails.isDelegatedAdmin 

     if (Admin === true) { 
     Admin = "Super Administrator" 
     }else if (dAdmin === true){ 
     Admin = "Delegated Administrator" 
     } 
     Logger.log(Admin) 
     var ss = SpreadsheetApp.getActive() 
     var sheet = ss.getSheetByName("Admin Users") 
     fileArray.push([fName, lName, pEmail,Admin]); 
     } 
     pageToken = page.nextPageToken; 
    } 
    while(pageToken); 
    Logger.log(fileArray) 
    sheet.getRange(1, 1, fileArray.length, 4).setValues(fileArray) 
} 

Hoffe, es hilft und klärt die Dinge!

+0

vielen Dank, so hilfreich! –