代码之家  ›  专栏  ›  技术社区  ›  Ian Hyzy

获取G套件中给定用户列表的用户活动报告

  •  0
  • Ian Hyzy  · 技术社区  · 7 年前

    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);
      }
    }
    
    0 回复  |  直到 7 年前
        1
  •  2
  •   ziganotschka    7 年前

    问题是由调用方法的方式引起的 AdminReports.UserUsageReport() 正确的语法是:

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

    因此,您需要替换userkey ‘all’ userList[a] userkey 在参数中:

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