google.script.run XX не является ошибкой функции - PullRequest
0 голосов
/ 14 октября 2018

Привет. Я разрабатываю небольшое приложение для перемещения файлов по диску Google с помощью Google Appmaker.

У меня есть код, позволяющий выбрать файл и каталог назначения.Проблема в том, чтобы вызвать функцию сервера для запуска функций DriveApp следующим образом:

function onClickbtnMove(widget, event){
   var props = widget.root.properties;     
   fileids=props.FileIdList;
 //fileids is a list object of fileIDs, in the following text i removed the loop and just try with one fileID
   var i=0;

   google.script.run
    .withSuccessHandler (function (result) {
      console.log (result);
      })
    .withFailureHandler (function (error) {
     console.log (error);
      })
    .moveFiles_(fileids[i], props.FolderDestinationId);
      } 

Сценарий сервера:

function moveFiles_(sourceFileId, targetFolderId) {

   var file = DriveApp.getFileById(sourceFileId);
  // file.getParents().next().removeFile(file); // removed until i get it working!!
  DriveApp.getFolderById(targetFolderId).addFile(file);
  return "1";
 }

Я уверен, что что-то совершенно очевидно, но я получаю:

 google.script.run.withSuccessHandler(...)
.withFailureHandler(...).moveFiles_ is not a function`

любое руководство очень приветствуется.заранее спасибо.

1 Ответ

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

Проблема заключается в сокрытии серверного скрипта .Официальная документация гласит:

Важно отметить, что любая функция, определенная вами в серверном скрипте, открыта для всех пользователей вашего приложения, даже если вы не открываете ее впользовательский интерфейс.Если вы хотите написать служебную функцию, которую можно вызывать только из других серверных сценариев, вы должны добавить к имени подчеркивание.

Таким образом, добавляя подчеркивание к имени функции, вы скрываете ееот клиента, следовательно, вы получаете эту ошибку.Чтобы вызвать функцию, используя google.script.run, вы должны избавиться от подчеркивания , т. Е. Функцию moveFiles_(sourceFileId, targetFolderId) следует изменить на moveFiles(sourceFileId, targetFolderId).

.предоставлять конфиденциальную информацию клиенту, тогда в этом случае важно защитить ваши сценарии, реализовав свой собственный метод.Возьмем для примера следующее:

function moveFiles(sourceFileId, targetFolderId, role) {    
   if(role === "Manager" || role === "Admin"){
       var file = DriveApp.getFileById(sourceFileId);
       DriveApp.getFolderById(targetFolderId).addFile(file);
       return "1";
   }
 }
...