我正在尝试编写一个Apps Script功能来存档Google Classroom中的一大堆课程。
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
高级服务执行此操作的正确方法是什么?
根据代码,您可能以前使用过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);
}