Я использую функцию копирования Google Drive API v3 для копирования электронной таблицы (согласно https://developers.google.com/drive/api/v3/reference/files/copy)
Однако, когда файл копируется, в то время как сценарии также копируются сценарии больше не работают и выдают странные ошибки, такие как
Иногда возникают другие ошибки, которые всплывают sh, но исчезают очень быстро, поэтому я не совсем уверен, что они говорят, и не могу найти какой-либо журнал их.
Мне интересно, если это ошибка, или есть какой-то особый прием для копирования документ листов Google через API привода, когда у них есть сценарии? может быть странная проблема с правами доступа?
Для справки, код, который выполняет копирование, использует. 1071 * core google libs для доступа к API
, который я написал в виде простой оболочки: -
public File CopyFile(File destination, string sourceId)
{
var copyRequest = _driveService.Files.Copy(destination, sourceId);
copyRequest.Fields = "id";
return copyRequest.Execute();
}
, который до сих пор отлично работает для всего, кроме листов Google и скриптов.
Сами сценарии, кажется, не имеют эффекта, самый простой сценарий, такой как
function onEdit(e){ Logger.log("hi") }
, не будет работать.
одна интересная вещь, когда он копирует файл, у проекта, похоже, нет владельца, как у исходного файла, из которого он был скопирован. Доступ к API осуществляется через учетную запись службы Google, которая (кажется) не является первоклассным пользователем «G Suite». Не уверен, если это является частью проблемы или нет.
ОБНОВЛЕНИЕ: 13 / февраля / 2020
Это похоже на проблему с разрешениями, связанную с учетными записями служб, я пока не знаю, как ее полностью решить.
Существует как минимум три основных шага, чтобы начать исправление этой проблемы
- вам нужно включить «делегирование по всему домену» в своей учетной записи службы в разделе учетных данных консоли google
- Вам необходимо получить администратора GSuite для предоставления разрешений учетной записи службы согласно https://developers.google.com/admin-sdk/directory/v1/guides/delegation Самая большая проблема заключается в том, чтобы знать, какие области назначить его, до сих пор я назначил его
https://www.googleapis.com/auth/drive
и https://www.googleapis.com/auth/spreadsheets
- При подключении к API при аутентификации вам нужно сказать, кого вы хотите выдать себя за другого ... C# выглядит следующим образом ...
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
Scopes = Scopes,
User = "realuserinGsuite@yourdoman.wherever"
}.FromCertificate(certificate));
Это означает, что учетная запись службы будет действовать так, как если бы это был пользователь.
Это заставляет все это работать. Однако, кажется, есть неприятный побочный эффект, который я не совсем уверен, почему он существует. Это также происходит, если я просто делаю копию оригинальной таблицы. Проблема в том, что требуется много времени, прежде чем скрипт начнет работать. Как только он начинает работать, он работает быстро, как обычно
, смотря на выполнение, которое потребовалось около 12 минут, чтобы начать работать. Я не уверен, почему, и я не уверен, есть ли легкое решение для этого.
Так что мне интересно, есть ли еще что-то, что я делаю неправильно? или это просто странный эффект, который может произойти в G-Suite?