使用补丁更新Classroom courseState

时间:2018-09-11 15:31:53

标签: google-apps-script google-classroom

我正试图编写一个Apps脚本函数,以在Google课堂中归档一堆课程。

function myFunction() {
  var response = Classroom.Courses.list();
  var optionalArgs = {'courseState': 'ARCHIVED'};

  var courses = response.courses;
  if (courses && courses.length > 0) {
    for (i = 0; i < courses.length; i++) {
      var course = courses[i];

      Classroom.Courses.update(course.name, course.id, {'updateMask':'courseState'}, body=optionalArgs); // Line 10
      //Logger.log('%s (%s) [%s]', course.name, course.id, course.enrollmentCode);
    }
  }
}

运行上面的代码时出现以下错误:

  

提供的参数数量无效。仅预期2-3(第10行,文件“ ArchiveAll”)

使用Google Apps脚本和Classroom高级服务执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

根据代码,您似乎以前使用过Python客户端库(特别是body=optionalArgs部分)。在JavaScript / Google Apps脚本中,关键字参数分配不是问题,至少与Python一样。

format expected by class methods in Google's "Advanced Services" client libraries源自相关API的HTTP REST API规范。对于Classroom.Courses.update呼叫,该呼叫为courses#update(或您的标题为courses#patch)。

update的REST API规范适用于1个路径参数(课程ID),以及具有Course资源的请求正文。与所有Google API一样,您还可以添加任何Standard Query Parameters作为可选参数。此计数-必填2,必填1)与您收到的错误消息相对应:

  

提供的参数数量无效。预计只有2-3个

因此,您的功能应类似于:

function updateCourse_(course) {
  course.courseState = 'ARCHIVED';
  const options = {
    fields: "id,name,courseState" // data sent back in the response.
  };
  return Classroom.Courses.update(course, course.id, options);
}

patch方法有一个附加的可选参数,即updateMask查询参数。与其他可选参数(例如标准查询参数)一样,此参数作为对象的最后一个参数传递给类方法:

function patchCourse_(courseId) {
  const newMetaData = {
    courseState: 'ARCHIVED',
    // other options, must be valid Course fields per patch documentation:
    // https://developers.google.com/classroom/reference/rest/v1/courses/patch#query-parameters
  };
  const options = {
    updateMask: "courseState", // CSV string of things you alter in the metadata object 
    fields: "id,name,courseState" // data sent back in the response
  };
  return Classroom.Courses.patch(newMetaData, courseId, options);
}

updateMask允许您使用某些模板Course资源,并且仅将其指定部分应用于指定课程。如果要使用update而不是patch,则可以更改所有字段以使用模板的值:

function patchedViaTemplate_(templateCourse, courseId, fieldsToAlter) {
  const options = { updateMask: fieldsToAlter };
  return Classroom.Courses.patch(templateCourse, courseId, options);
}