2017-04-04 32 views
0

我正在使用Google Apps腳本在Google應用程序中編寫所有超級管理員和委派管理員的列表。如何使用pagetoken google應用程序腳本

我的腳本工作正常,但它將結果限制爲500個用戶,因爲這是Google的限制,而谷歌建議爲它使用pageToken,但我不知道如何使用它。

誰能幫助我瞭解我如何在以下腳本 - 使用PageToken:

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

此[示例代碼](https://developers.google.com/apps-script/advanced/admin-sdk-directory#list_all_users)完全符合您的需求。簡而言之,每次打電話都會返回一個nextPageToken(即一個用於標識結果中下一頁的標記),您需要在下一次呼叫中包含該標記以獲取該頁面等等。 –

+0

非常感謝,我想了解如何在for循環或我的腳本中使用它。 –

回答

0

要了解pageToken您需要了解的返回值(或響應)

AdminDirectory.Users.list(optionalArgs) 

此函數返回一個reponse of the format

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

要訪問u SER信息您使用「用戶」鍵,像這樣

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 

你可以從響應對象,你也有nextPageToken這個關鍵,它定義了什麼是在應對接下來的頁面中看到,你抓住這個nextPageToken這個像這樣:

pageToken = page.nextPageToken; 

然後傳遞到pageToken新呼叫AdminDirectory像這樣:

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

這將檢索下一個頁面上的搜索,也是nextPageToken這個,如果有的話,NE xt頁面在搜索。直到您不再擁有pageToken,纔會進行遞歸調用。

下面的代碼應該完全做到這一點,並通過合併代碼example code on google developer page和上面寫的代碼@GlodyArora來完成。從字面上看,剛剛添加了一個do while循環,如示例代碼中所述。

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) 
} 

希望它有助於澄清事情!

+0

非常感謝,非常樂於助人! –

相關問題