Я использую цикл for для перебора более 105 записей в модели учеников в App Maker.Для каждой записи в модели я извлекаю имя папки из поля в модели.
Я использую имя папки в качестве ввода для DriveApp.createFolder()
.
Каждая папка создается внутрита же корневая папка, так что я получаю корневую папку, в которой есть 105 вновь созданных папок.
Для каждой созданной папки я назначаю владельца папки конкретному пользователю и удаляю права на редактирование из папки.creator.
В этом случае корневая папка имеет права на редактирование, предоставленные любому пользователю домена со ссылкой, поэтому созданная папка наследует этот параметр, поэтому я удаляю создателя папки как редактор.
Чтобы помочь с отладкой, я пишу в консоль после создания каждой папки и указываю, какая запись из модели ученика обрабатывается.
Что происходит, когда создается около 25-30 папок?в корневой папке цикл for начинается снова, но в то же время продолжается и с того места, где он остановился!
Вот фрагмент из консоли отладки ...
[![1]](https://i.stack.imgur.com/EocUI.jpg)
Вы видите, что цикл, кажется, начинается снова.
Вот мой код...
function createEvidenceFolder(){
var person = Session.getActiveUser().getEmail();
var pupils = app.models.Pupils.newQuery();
pupils.filters.EvidenceFolder._equals = null;
pupils.filters.Roll._equals = "Current";
var pupil = pupils.run();
var folder = "XXXThe Root Folder IDXXX";
for (var x = 0; x < pupil.length; x++){
var fname = pupil[x].Folder_Name;
console.log("Processing record "+x+" for "+fname);
var root = DriveApp.getFolderById(folder);
var createdfolder = root.createFolder(fname).getId();
Utilities.sleep(1000);
DriveApp.getFolderById(createdfolder).setOwner("The email address of the User").removeEditor(person);
pupil[x].EvidenceFolder = createdfolder;
}
app.saveRecords(pupil);
console.log("Processed "+x+" evidence folders");
}
Я вернулся и добавил Utilities.sleep(1000)
, когда я искал ответы.
Так почему я получаю вдвое больше папок, чем должно быть?
Почему цикл for работает одновременно?
Кстати, скрипт запускается из события onclick на кнопке.Событие onclick
сразу же скрывает кнопку (widget.visible = false)
перед вызовом сценария с помощью google.script.run
, поэтому я надеюсь, что удаляю возможность фактически дважды щелкнуть!
Я затрудняюсь объяснить это, но ятакже очень плохо знаком с App Maker и программированием.
Есть ли у кого-нибудь какие-либо идеи?
Редактировать .. Неправильно читать раздел комментариев после ответа от Morfinismo!
widget.visible = false;
google.script.run.withFailureHandler(function(err,user){
console.log("The error was "+err+" and the user was "+user);}).createEvidenceFolder();
Theприведенный выше код взят из кнопки, которая обрабатывает сценарий сервера.