Google Script / Sheet не знает, как получить информацию для раздела «Сведения о сотруднике» из профиля пользователя, например, «Идентификатор сотрудника» и «Должность» - PullRequest
1 голос
/ 13 марта 2020

У меня есть скрипт, который может заполнять лист необходимой информацией, но я не уверен, как получить данные из раздела «Информация о сотруднике» в профиле пользователя. Я хотел бы 4 ниже пунктов, что я пропускаю ?? Я также взглянул на API API Admin Directory , но мне не повезло в добавлении externalIds []. Пожалуйста, помогите указать правильное направление, если вы можете

  1. ID сотрудника
  2. Должность
  3. Тип работника
  4. Отдел

function listAllUsers() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Users');
  sheet.getRange(1, 8).setValue(Utilities.formatDate(new Date(), "GMT", "HH:mm dd/MM/yyyy"));
 
  var pageToken;
  var page;
  n = 0;
  do {
    page = AdminDirectory.Users.list({
      domain: 'domain.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];
        sheet.getRange(n + i + 2, 1).setValue(user.name.fullName);      
        sheet.getRange(n + i + 2, 2).setValue(user.name.givenName); 
        sheet.getRange(n + i + 2, 3).setValue(user.name.familyName); 
        sheet.getRange(n + i + 2, 4).setValue(user.primaryEmail);  
        sheet.getRange(n + i + 2, 5).setValue(user.orgUnitPath);
        SpreadsheetApp.flush();
      }
    } else {
      Logger.log('No users found.');
    }
    n+=100;
    pageToken = page.nextPageToken;
  } while (pageToken);
   
}

1 Ответ

1 голос
/ 13 марта 2020

Я предполагаю, что вам нужны следующие данные:

enter image description here enter image description here

Оба externalIds и organizations являются массивами. Они допускают несколько наборов данных для одного человека.

Если в вашей базе данных есть только один набор данных для каждого человека, вы можете попробовать:

user.externalIds[0].value

user.organizations[0].title

user.organizations[0].type

user.organizations[0].department

PS: я не использовал этот API, и эти предложения основаны на моем чтении документов. Дайте мне знать, если это работает. Желаем удачи.


PPS: Я бы также предложил отправить все данные на лист за один go, чтобы свести к минимуму количество обращений к листу

sheet.getRange(n + i + 2, 1, 1, 5).setValues([user.name.fullName, user.name.givenName, user.name.familyName, user.primaryEmail, user.orgUnitPath]);  

Это может быть даже более эффективно помещать все пользовательские данные в массив и публиковать их на листе в один go.

. Кроме того, можно избежать вызова SpreadsheetApp.flush() для каждого пользователя. Лучше всего сделать это один раз в конце публикации данных.


Редактировать

Чтобы не пропустить пропуски externalId, вы можете попробовать:

  if (user.externalIds) {
    var extID = user.externalIds[0].value;
  } else {
    extID = null;
  }

а затем опубликуйте extId на листе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...