Получение отчетов об активности пользователей для заданного списка пользователей в G Suite - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь использовать службу отчетов Admin SDK, чтобы получить время последнего входа в систему и некоторые другие данные для 20 пользователей.Невозможно получить данные для всего домена, а затем выполнить фильтрацию из-за размера домена, поэтому я хочу получить данные только для этих 20 пользователей, но я не могу найти способ сделать это.Мой текущий код не работает с Admin user usage reports get failed with error: GoogleJsonResponseException: API call to reports.userUsageReport.get failed with error: Bad Request

Я знаю, что это неправильно, но, глядя на документы, я не уверен, что делать.Я могу использовать одного пользователя, и это прекрасно работает на веб-сайте, но кажется странным, что единственным вариантом будет получить всех пользователей или одного пользователя.Я пытался изменить свой код, чтобы один пользователь несколько раз подряд зацикливался, но не удается из-за вышеуказанной ошибки.значение userList берется из таблицы в пользовательском интерфейсе AppMaker.Я также могу без проблем использовать проводник API веб-сайта документации.

Вот моя текущая функция:

function generateLoginActivityReport(userList) {
  var today = new Date();
  var oneWeekAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000));
  var timezone = Session.getScriptTimeZone();
  var date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');

  userList = JSON.parse(userList);
  //console.log("server code: " + list);

  for (var a = 0; a < userList.length; a++) {
    //console.log(userList[a]);
    var parameters = [
      'accounts:last_login_time',
      'drive:num_items_created'
    ];
    var rows = [];
    var pageToken;
    var page;
    do {
    page = AdminReports.UserUsageReport.get('all', date, {
      parameters: parameters.join(','),
      maxResults: 1,
      pageToken: pageToken,
      userKey: userList[a]
    });

    var reports = page.usageReports;

    if (page.warnings) {
      for (var q = 0; q < page.warnings.length; q++) {
        var warning = page.warnings[a];
        Logger.log(warning.message);
      }
    }

    if (reports) {
      for (var i = 0; i < reports.length; i++) { 
        var report = reports[i];
        try {
          var parameterValues = getParameterValues(report.parameters);
          var row = [
            report.date,
            report.entity.userEmail,
            parameterValues['accounts:last_login_time'],
            //parameterValues['drive:num_items_created']
          ];
          rows.push(row);
          var ar = app.models.ActivityReport.newRecord();
          ar.LastLogin = parameterValues['accounts:last_login_time'];
          console.log(report.entity.userEmail);
          ar.DocsAdded = 0; //getting this value is another issue but unrelated so it's set to 0 for now.
          ar.Email = report.entity.userEmail.toString();
          app.saveRecords([ar]);
        }
        catch(error) {
          console.error("Error! Did not write last item to model: \n"+error);
        }
      }
    }
  } while (pageToken);
  }
}

1 Ответ

1 голос
/ 10 июля 2019

Проблема вызвана тем, как вы вызываете метод AdminReports.UserUsageReport(). Правильный синтаксис:

AdminReports.UserUsageReport.get(userKey, date, optionalArgs) 

Таким образом, вам нужно подставить ключ пользователя от ‘all’ до userList[a], а не вставлять userkey в параметры:

page = AdminReports.UserUsageReport.get(userList[a], date, {
  parameters: parameters.join(','),
  maxResults: 1,
  pageToken: pageToken,
});
...