我正在使用Google Apps脚本更改多个Google课堂中几个主题的名称。我使用Classroom.Courses.Topics.patch()
来仅更改主题的“名称”值,但是当我看着教室时,我的脚本没有任何改变。
这里是一个示例:我有两个教室(课程ID为“ 100000000000”和“ 100000000001”)。在每个教室中,我有三个主题(主题名称为“ topic1”,“ topic2”和“ topic3”)。我想在两个教室中将前两个主题的名称分别更改为“ newtopic1”和“ newtopic2”。
我怀疑我做更新掩码的方式可能有问题,但是我尝试重新排序,但仍然无法解决...也可能是我嵌套的循环吗?
function updateTopicNames() {
var courseIds = ['100000000000','100000000001'];
var topicNamesOld = ['topic1','topic2'];
var topicNamesNew = ['newtopic1', 'newtopic2'];
for (var i = 0; i < courseIds.length; i++) {
var topics = Classroom.Courses.Topics.list(courseIds[i]).topic;
var topicObj = topics.reduce((o, e) => Object.assign(o, {[e.name]: e.topicId}), {});
for (var j = 0; j < topicObj.length; j++) {
for (var k = 0; k < topicNamesNew.length; k++) {
var topicId = topicObj[topicNamesOld[j]];
var newName = {'name':topicNamesNew[k]};
var extra = {'updateMask':'name'};
var exec = Classroom.Courses.Topics.patch(newName, topicId, courseIds[i], extra);
}
}
}
}
我签出了courses.topics.patch API,但是没有从中推断出更新掩码实现的示例。
我尝试从代码中引导其他.patch()
和StudentSubmissions.Patch UpdateMask Error和How to change course owner using Classroom.Courses.patch()的东西,但是当我尝试将它们转换为Topics.patch()
时,某些东西不起作用。
答案 0 :(得分:1)
我相信您的情况如下。
topicNamesOld
的索引对应于topicNamesNew
的索引。topicObj
不是数组。因此,您不需要使用for循环。当这反映到您的脚本时,它如下所示。
function updateTopicNames() {
var courseIds = ['100000000000','100000000001'];
var topicNamesOld = ['topic1','topic2'];
var topicNamesNew = ['newtopic1', 'newtopic2'];
for (var i = 0; i < courseIds.length; i++) {
var topics = Classroom.Courses.Topics.list(courseIds[i]).topic;
var topicObj = topics.reduce((o, e) => Object.assign(o, {[e.name]: e.topicId}), {});
for (var k = 0; k < topicNamesNew.length; k++) {
var topicId = topicObj[topicNamesOld[k]];
var newName = {'name': topicNamesNew[k]};
var extra = {'updateMask':'name'};
var exec = Classroom.Courses.Topics.patch(newName, courseIds[i], topicId, extra);
}
}
}