如何更改主题名称 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好像不能更新。这似乎是当前的规范。请注意这一点。

参考: