如何更改主题名称Classroom.Courses.Topics.patch()

时间:2020-07-07 23:58:50

标签: google-apps-script google-classroom

我正在使用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 ErrorHow to change course owner using Classroom.Courses.patch()的东西,但是当我尝试将它们转换为Topics.patch()时,某些东西不起作用。

1 个答案:

答案 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);
    }
  }
}

注意:

  • 在这种情况下,似乎可以更新使用同一GAS项目创建的主题。例如,似乎其他客户端创建的主题无法更新。看来这是当前的规范。请注意这一点。

参考: