如何更改主题名称 Classroom.Courses.Topics.patch()
How to change Topic names Classroom.Courses.Topics.patch()
我正在使用 Google Apps 脚本更改几个 Google 教室中的几个主题的名称。我使用 Classroom.Courses.Topics.patch()
仅更改主题的 'name' 值,但是当我查看教室时我的脚本没有任何更改。
这是一个示例:我有两个教室(课程 ID“100000000000”和“100000000001”)。在每个教室中,我都有三个主题(主题名称 'topic1'、'topic2' 和 'topic3')。我想在两个教室中将前两个主题的名称分别更改为 'newtopic1' 和 'newtopic2'。
我怀疑我执行更新掩码的方式可能有问题,但我已经尝试重新排序,但我仍然无法完成...也可能是我的问题嵌套 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 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()
的代码中 bootstrap:StudentSubmissions.Patch UpdateMask Error and 但是当我尝试将这些转换为 Topics.patch()
.[=17 时有些东西不起作用=]
我相信你的情况如下。
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);
}
}
}
注:
- 这样的话,同一个GAS项目创建的topic好像可以更新了。比如其他client创建的topic好像不能更新。这似乎是当前的规范。请注意这一点。
参考:
我正在使用 Google Apps 脚本更改几个 Google 教室中的几个主题的名称。我使用 Classroom.Courses.Topics.patch()
仅更改主题的 'name' 值,但是当我查看教室时我的脚本没有任何更改。
这是一个示例:我有两个教室(课程 ID“100000000000”和“100000000001”)。在每个教室中,我都有三个主题(主题名称 'topic1'、'topic2' 和 'topic3')。我想在两个教室中将前两个主题的名称分别更改为 'newtopic1' 和 'newtopic2'。
我怀疑我执行更新掩码的方式可能有问题,但我已经尝试重新排序,但我仍然无法完成...也可能是我的问题嵌套 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 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()
的代码中 bootstrap:StudentSubmissions.Patch UpdateMask Error and Topics.patch()
.[=17 时有些东西不起作用=]
我相信你的情况如下。
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);
}
}
}
注:
- 这样的话,同一个GAS项目创建的topic好像可以更新了。比如其他client创建的topic好像不能更新。这似乎是当前的规范。请注意这一点。