google-apps-script - Update Classroom courseState using patch
问题描述
I am trying to write an Apps Script function to archive a whole bunch of courses in 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);
}
}
}
I get the following error when running the above code:
Invalid number of arguments provided. Expected 2-3 only (line 10, file "ArchiveAll")
What is the correct way of doing this with Google Apps Script and the Classroom
advanced service?
解决方案
根据代码,您可能以前使用过 Python 客户端库(特别是该body=optionalArgs
部分)。在 JavaScript / Google Apps 脚本中,关键字参数分配不是一件事,至少不像在 Python 中那样。
Google 的“高级服务”客户端库中的类方法所期望的格式源自相关 API 的 HTTP REST API 规范。对于Classroom.Courses.update
通话,这是courses#update
(或根据您的标题,courses#patch
)。
REST API 规范适用update
于 1 个路径参数(课程 ID)和带有Course
资源的请求正文。与所有 Google API 一样,您可以另外添加任何标准查询参数作为可选参数。此计数 - 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);
}
推荐阅读
- c# - 如何将属性设置为零
- javascript - 如何从firebase函数中删除最后一个文档
- java - 如何仅在 doinbackground 中的方法完成时调用 onPostExecute?
- node.js - DynamoDB FilterExpressions 与 BETWEEN
- flutter - 动画期间按钮宽度不变
- pandas - pandas 如何以矢量化方式获得满足特定条件的行索引?
- alignment - 如何在 TableView 的一行中的 ImageView 上方和下方添加空间?
- java - Spring Boot multipartfile 是不可修改的吗?
- matlab - 如何专门 fprintf 文件上的数组
- magento2 - Magento 2图像上传错误:未捕获的语法错误:无效或意外令牌