Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用谷歌应用程序脚本从管理目录API获取部门用户_Google Apps Script_Google Sheets_Google Admin Sdk - Fatal编程技术网

Google apps script 使用谷歌应用程序脚本从管理目录API获取部门用户

Google apps script 使用谷歌应用程序脚本从管理目录API获取部门用户,google-apps-script,google-sheets,google-admin-sdk,Google Apps Script,Google Sheets,Google Admin Sdk,我有以下(大部分)使用管理目录API的工作脚本。但是,我不想拉整个域,我只想拉一个特定部门的信息 function listAllUsers() { var ss = SpreadsheetApp.getActive(); var pageToken, page, count = 0; var listArray = []; listArray.push(['full name', 'first name', 'last name', 'email', 'department',

我有以下(大部分)使用管理目录API的工作脚本。但是,我不想拉整个域,我只想拉一个特定部门的信息

function listAllUsers() {
  var ss = SpreadsheetApp.getActive();
  var pageToken, page, count = 0;
  var listArray = [];
  listArray.push(['full name', 'first name', 'last name', 'email', 'department', 'ID'])
  do {
    page = AdminDirectory.Users.list({
      domain: 'example.co.uk',
      orderBy: 'givenName',
      maxResults: 100,
      pageToken: pageToken
    });
    var users = page.users;
    if (users) {
      for (var i = 0; i < users.length; i++) {
        var user = users[i];
        listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, user.organizations, user.id,]);
      }
    }
    pageToken = page.nextPageToken;
    break; // This means you only get one page
  } while (pageToken);
  try {
    var outputSheet = ss.getSheetByName('allMembers');
    outputSheet.getDataRange();
  } catch(err) {
    var outputSheet = ss.insertSheet('allMembers', 2);
  }
  outputSheet.getDataRange().clear();
  outputSheet.getRange(1, 1, listArray.length, listArray[0].length).setValues(listArray);
  outputSheet.getRange(1, 6, outputSheet.getLastRow(), 4).setHorizontalAlignment("center");
  outputSheet.getRange(1, 1, outputSheet.getLastRow(), 1).setHorizontalAlignment("center");
  var width = [150, 150, 180, 250, 250, 200];
  formatSheet(outputSheet, width);
}
函数listalUsers(){
var ss=SpreadsheetApp.getActive();
var pageToken,page,count=0;
var listary=[];
push(['full name','first name','last name','email','department','ID'])
做{
page=AdminDirectory.Users.list({
域名:“example.co.uk”,
订购人:“givenName”,
最大结果:100,
pageToken:pageToken
});
var users=page.users;
如果(用户){
对于(var i=0;i
我尝试使用user.organization[].domain筛选到域,但刚收到错误消息。我将参数
user.organizations
更改为
user.organizations[].department
,如文档所示

这最初抛出了一个语法错误,当更改为
user.organizations[0]。department
时抛出错误消息:

TypeError:无法从未定义中读取属性“0”

我完全省略了括号,使用了
user.organizations.department
,但得到了:

TypeError:无法从未定义中读取属性“department”

另外,如果可能的话,我想把部门和职位分开列出。目前,它以以下格式导出信息:

{customType=work,name=,location=002,title=Technical Support Manager,department=Technical Support,primary=true}

当前显示:

我想要的输出格式:

您收到这些错误是因为您域中的某些用户没有department/title user属性

添加2个变量并
尝试。。catch
块应允许代码按预期工作

以下是更新的代码:

function listAllUsers() {
    var ss = SpreadsheetApp.getActive();
    var pageToken,
    page,
    count = 0;
    var listArray = [];
    listArray.push(['full name', 'first name', 'last name', 'email', 'department', 'title', 'ID'])
    do {
        page = AdminDirectory.Users.list({
                domain : 'example.com',
                orderBy : 'givenName',
                pageToken : pageToken
            });
        var users = page.users;
        if (users) {
            for (var i = 0; i < users.length; i++) {
                var user = users[i];
                var department,
                title; // Addded two new variables 
                try { // Try to get the users department if there is an error push the error to the array
                    department = user.organizations[0].department;
                } catch (e) {
                    department = e
                }
                try {// Try to get the users title if there is an error push the error to the array
                    title = user.organizations[0].title;
                } catch (e) {
                    title = e
                }
                listArray.push([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, department, title, user.id, ]);

            }
        }
        pageToken = page.nextPageToken;
        break; // This means you only get one page
    } while (pageToken);
    try {
        var outputSheet = ss.getSheetByName('allMembers');
        outputSheet.getDataRange();
    } catch (err) {
        var outputSheet = ss.insertSheet('allMembers', 2);
    }
    outputSheet.getDataRange().clear();
    outputSheet.getRange(1, 1, listArray.length, listArray[0].length).setValues(listArray);
    outputSheet.getRange(1, 6, outputSheet.getLastRow(), 4).setHorizontalAlignment("center");
    outputSheet.getRange(1, 1, outputSheet.getLastRow(), 1).setHorizontalAlignment("center");
    var width = [150, 150, 180, 250, 250, 200];
    formatSheet(outputSheet, width);
}

使用ADMINSDK和查询,您可以基于OrgName、ManagerId、Ref Link等属性进行查询。 在您的请求中传递查询

     var queryStr="orgDepartment=HR"
     var page = AdminDirectory.Users.list({
                    domain : 'example.com',
                    orderBy : 'givenName',
                    pageToken : pageToken,
                    query:queryStr
                });

如果您尝试以一种方式执行此操作并获取错误消息,那么共享所述代码和所述错误消息是否有意义?您是否尝试过其他查询?另外,你的部门和职位已经是独立的价值观,所以我不确定你有什么困难。我已经更新了帖子,展示了我的尝试,并提供了一些截图来更好地解释事情。谢谢詹姆斯,我会看看这个。我使用的是目录API文档(它适用于我试图查找的其他值)。对不起,用户|目录API文档。是的,文档非常分散。如果它不起作用,请发回并通知我们,我将设置字段并在我的域上测试它们。看起来我们没有使用这些字段。只是作为未定义的返回。我们使用GADs将AD同步到G套件中,这是它从中提取部门信息的地方。即使是我也面临着同样的问题——我使用的任何解决方案都是“user.organizations[0]。Department o和user.organizations[0]。title”
     var queryStr="orgDepartment=HR"
     var page = AdminDirectory.Users.list({
                    domain : 'example.com',
                    orderBy : 'givenName',
                    pageToken : pageToken,
                    query:queryStr
                });