Невозможно добавить владельца на сайт Google с помощью скрипта Google Apps.
Я написал скрипт Служб Google, чтобы сделать копию шаблона сайта Google, а затем добавить нового владельца в эту копию. Я использую функцию copySite, которая является асинхронной, как указано в документации:
Копия асинхронная, и операция копирования может продолжаться, даже если ссылка на сайт была возвращена
После того, как сайт скопирован, я хочу добавить нового владельца на сайт с помощью функции addOwner, вот так:
var template = SitesApp.getSiteByUrl(TEMPLATE_URL); // Retrieve the template
var copyOfTemplate = SitesApp.copySite(domain, url, googleSiteName, summary, template);
copiedTemplateURL = copyOfTemplate.getUrl();
copyOfTemplate.addOwner(adminMail); // Add the customer as owner of the new site
Сценарий работает хорошо (без ошибок), сайт Google создан, но владелец не добавлен, и иногда функция getUrl() ничего не возвращает. Я пытался добавить задержку (Utilities.sleep) в 20 секунд, но она, похоже, не работает, и я думаю, что это "грязное" решение. Кто-нибудь может придумать обходной путь для этого случая? Спасибо
1 ответ
Я наконец нашел способ обойти мою проблему.
Похоже, что если копируемый вами сайт Google содержит много страниц, время обработки этой копии будет больше, и если вы попытаетесь добавить владельца в течение этого времени, это не сработает. Более того, если вы используете функцию getOwners() после добавления владельца (во время копирования), он вернет вам правильных владельцев. Однако, когда сайт полностью копируется, добавленный вами владелец не упоминается в настройках общего доступа и поэтому не может получить доступ к копии шаблона вашего сайта.
Идея состоит в том, чтобы дождаться завершения копирования, подсчитав количество страниц-потомков, возвращаемых функцией getAllDescendants() в скопированном шаблоне, и сравнив его с числом, возвращенным той же функцией в исходном шаблоне. Затем вы можете смело добавлять нового владельца.
var timer = 1000;
var template = SitesApp.getSiteByUrl("https://sites.google.com/a/domain.ext/yourtemplate"); // Retrieve the template
var copyOfTemplate = SitesApp.copySite(domain, url, googleSiteName, summary, template);
var descendants = copyOfTemplate.getAllDescendants().length;
var numberOfPages = template.getAllDescendants().length;
while(descendants < numberOfPages || descendants === null) {
Utilities.sleep(timer);
timer = timer + 5000; // sort of "additionnal backoff"
descendants = copyOfTemplate.getAllDescendants().length;
}
//At this point the copy should be completed
copyOfTemplate.addOwner("yourNewOwner@domain.ext"); // Add the customer as owner of the new site
Мой шаблон содержит 41 дочернюю страницу, для правильного копирования требуется примерно 35 секунд.