如何使用 Classroom.Courses.patch() 更改课程所有者

How to change course owner using Classroom.Courses.patch()

我正在尝试使用 Apps 脚本更改 Google 课堂课程的所有者。

根据文档,我可以使用 .patch() 来完成。这是相关的脚本:

   var body = {            
     ownerId: owner
   }
   var mask={
     mask:'ownerId'
   }
       var optArgs = (mask, body); 

    var course = {
      name: classname,
      courseState: state,
      description: desc,
      descriptionHeading: descHead,
      room: room,
      section: section
    };
       Classroom.Courses.patch(course, courseId,  optArgs )

当我运行更新所有者时,我收到以下错误消息

Could not be updated Invalid JSON payload received. Unknown name "ownerId": Cannot bind query parameter. Field 'ownerId' could not be found in request message.

只是为了演示对比,当我 运行 .update() 改为:

Classroom.Courses.update(course, courseId)

...其余课程详情已完美更新,但.update()不允许您更改所有者;它必须是 .patch() 才能做到这一点。

根据文档,这是按预期工作的。

courses.update 没有 ownerId 参数,只有 id.

但是如果您检查 courses.patch 它有 updateMask 参数接受 ownerId 作为有效字段。

有关此服务的详细信息,请参阅课堂 API 的 reference documentation

刚遇到同样的问题,问题出在 optArgs - 您只需要掩码,而不是更改后的数据。

var optArgs = { mask: 'ownerId' }; 

var course = {
  name: classname,
  courseState: state,
  description: desc,
  descriptionHeading: descHead,
  room: room,
  section: section,
  ownerId: owner 
};

Classroom.Courses.patch(course, courseId,  optArgs );

我刚才试过这个并且成功了。考虑到,要使此功能生效,用户必须已经是特定 class 中的教师,然后这将使该教师成为所有者。

function changeTeacherOwner() { 
var course = { 'ownerId': "EMAIL OF TEACHER" };
Classroom.Courses.patch(course, "COURSE ID",  {'updateMask':'ownerId'}); 
}