Обновление Classroom courseState с использованием патча - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь написать функцию скрипта приложений для архивирования целой группы курсов в Google Classroom.

function myFunction() {
  var response = Classroom.Courses.list();
  var optionalArgs = {'courseState': 'ARCHIVED'};

  var courses = response.courses;
  if (courses && courses.length > 0) {
    for (i = 0; i < courses.length; i++) {
      var course = courses[i];

      Classroom.Courses.update(course.name, course.id, {'updateMask':'courseState'}, body=optionalArgs); // Line 10
      //Logger.log('%s (%s) [%s]', course.name, course.id, course.enrollmentCode);
    }
  }
}

При выполнении приведенного выше кода появляется следующая ошибка:

Указано неверное количество аргументов.Ожидается только 2-3 (строка 10, файл "ArchiveAll")

Как правильно сделать это с помощью Google Apps Script и расширенной службы Classroom?

1 Ответ

0 голосов
/ 11 сентября 2018

Исходя из кода, похоже, что вы ранее уже использовали клиентские библиотеки Python (в частности, часть body=optionalArgs).В JavaScript / Google Apps Script назначение параметров ключевых слов не является чем-то особенным, по крайней мере, не так, как в Python.

Формат , ожидаемый методами классов в клиентских библиотеках Google "Advanced Services" получены из спецификации HTTP REST API для связанного API.Для вызова Classroom.Courses.update это courses#update (или для вашего заголовка courses#patch).

Спецификация REST API для update:для 1 параметра пути (идентификатор курса) и тела запроса с ресурсом Course.Как и во всех API Google, вы можете дополнительно добавить любой из Стандартных параметров запроса в качестве необязательного аргумента.Это количество - 2 обязательных, 1 необязательных) соответствует полученному вами сообщению об ошибке:

Указано неверное количество аргументов.Ожидается только 2-3

Таким образом, ваша функция должна выглядеть примерно так:

function updateCourse_(course) {
  course.courseState = 'ARCHIVED';
  const options = {
    fields: "id,name,courseState" // data sent back in the response.
  };
  return Classroom.Courses.update(course, course.id, options);
}

Метод patch имеет дополнительный необязательный аргумент, параметр запроса updateMask.Как и в случае с другими необязательными параметрами (например, стандартными параметрами запроса), он передается в объекте как последний параметр метода класса:

function patchCourse_(courseId) {
  const newMetaData = {
    courseState: 'ARCHIVED',
    // other options, must be valid Course fields per patch documentation:
    // https://developers.google.com/classroom/reference/rest/v1/courses/patch#query-parameters
  };
  const options = {
    updateMask: "courseState", // CSV string of things you alter in the metadata object 
    fields: "id,name,courseState" // data sent back in the response
  };
  return Classroom.Courses.patch(newMetaData, courseId, options);
}

updateMask позволяет использовать некоторый шаблон Course ресурси применять только указанные его части к указанному курсу.Если бы вы использовали update вместо patch, вы бы изменили все поля, чтобы использовать значения шаблона:

function patchedViaTemplate_(templateCourse, courseId, fieldsToAlter) {
  const options = { updateMask: fieldsToAlter };
  return Classroom.Courses.patch(templateCourse, courseId, options);
}
...