Создание папок с помощью DriveApp.createFolder дает дубликаты - PullRequest
0 голосов
/ 08 октября 2018

Я использую цикл for для перебора более 105 записей в модели учеников в App Maker.Для каждой записи в модели я извлекаю имя папки из поля в модели.

Я использую имя папки в качестве ввода для DriveApp.createFolder().

Каждая папка создается внутрита же корневая папка, так что я получаю корневую папку, в которой есть 105 вновь созданных папок.

Для каждой созданной папки я назначаю владельца папки конкретному пользователю и удаляю права на редактирование из папки.creator.

В этом случае корневая папка имеет права на редактирование, предоставленные любому пользователю домена со ссылкой, поэтому созданная папка наследует этот параметр, поэтому я удаляю создателя папки как редактор.

Чтобы помочь с отладкой, я пишу в консоль после создания каждой папки и указываю, какая запись из модели ученика обрабатывается.

Что происходит, когда создается около 25-30 папок?в корневой папке цикл for начинается снова, но в то же время продолжается и с того места, где он остановился!

Вот фрагмент из консоли отладки ...

[1]

Вы видите, что цикл, кажется, начинается снова.

Вот мой код...

    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приведенный выше код взят из кнопки, которая обрабатывает сценарий сервера.

1 Ответ

0 голосов
/ 09 октября 2018

Насколько мне известно, не должно быть никаких проблем, если вы решите скрыть кнопку вместо ее отключения.Без проверки приложения почти невозможно определить, что может быть не так.Мое лучшее предположение заключается в том, что где-то в приложении есть некоторый код, вызывающий такое поведение или, менее вероятно, ошибку в системе разработчика приложений.Я полагаю, что последнее маловероятно, потому что я попробовал установку, подобную вашей, и ничего не пошло не так.

Так или иначе, попытка отключить виджет вместо скрытия может помочь:

console.log("Starting process");
widget.enabled= false; 
google.script.run.withFailureHandler(function(err){
    console.log("The error was "+err);}
).withSuccessHandler(function(){
    widget.enabled=true; 
    console.log("Finished process");
}).createEvidenceFolder();
...