编程语言
首页 > 编程语言> > javascript-使用nextpagetoken在Google Apps脚本查询中提取500多个结果

javascript-使用nextpagetoken在Google Apps脚本查询中提取500多个结果

作者:互联网

在对this post的有用答复中,我了解到可以一次从域目录中提取最多500个用户结果.现在,我试图获取一个脚本以继续运行并批量提取500个脚本,直到它从域(或本例中的OU)中拉出所有用户并将它们全部添加到同一电子表格中为止.

现在,我的代码如下所示:

function writeToSpreadsheet(){
  var values = [];
  var users = AdminDirectory.Users.list({
    domain:'klht.org',
    maxResults: 500,
    query: "orgUnitPath=/CleverTeachers/King"
  }).users; 
  for (var i=0; i<users.length; i++){
    values.push([users[i].name.fullName, users[i].primaryEmail]);   
  }
  var spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';
  SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}

我上一篇文章的评论者指出“返回的对象的一部分将是’nextPageToken’,您可以将其添加到一个或多个后续查询中,直到拥有所有用户为止.”他包括以下片段:

var usersPage2 = AdminDirectory.Users.list({
                                      domain: 'klht.org',
                                      maxResults: 500,
                                      query: "orgUnitPath=/OU",
                                      pageToken: nextPageToken
                                      }).users;

我发现只是将其附加在上面的代码下面会引发“ ReferenceError:未定义“ nextPageToken”.(第13行,文件“代码”)”.现在,我再次陷入困境.你能帮我做这个工作吗?

解决方法:

我在上一个答案中提到的nextPageToken是第一个查询结果的属性.

为了最好地应对示例中未确定的最大用户数,最好通过while循环将查询包装到AdminSDK来实现此目的,该循环将在没有更多用户找到时立即终止:

function writeToSpreadsheet(){
  var values = [],
      users = [],
      userListQuery = {},
      nextPageToken = '',
      listObject = {
          domain:'klht.org',
          maxResults: 500,
          query: "orgUnitPath=/CleverTeachers/King"
      },
      i = 0,
      spreadsheetID = '1JLDD2wm0_udmTn9ZHvdKhL_Ok3SvKYFqkBeiA1GdnYc';

  do {

    if (nextPageToken && nextPageToken !== '') {
      listObject.pageToken = nextPageToken;
    }  

    userListQuery = AdminDirectory.Users.list(listObject);

    // if there are more users than fit in the query a nextPageToken is returned
    nextPageToken = userListQuery.nextPageToken;

    // Add the query results to the users array
    users = users.concat(userListQuery.users);

  } while (nextPageToken);

  for (i = 0; i < users.length; i += 1) {
    values.push([users[i].name.fullName, users[i].primaryEmail]);   
  }

  SpreadsheetApp.openById(spreadsheetID).getSheets()[0].getRange(1, 1, values.length, values[0].length).setValues(values);
}

标签:google-admin-sdk,google-apps-script,javascript
来源: https://codeday.me/bug/20191119/2034828.html