Изо всех сил, чтобы установить 1-ую папку просмотра в сборщике

Я борюсь с тем, как получить идентификатор из листа скриптов Google обратно в лист HTML. Я надеюсь использовать идентификатор родительской папки activespreadsheet в качестве папки, которая открывается вместе со средством выбора. Электронная таблица будет находиться только в одной папке, поэтому будет иметь только одного родителя.

Это код, который я собирался использовать, чтобы найти идентификатор папки

function ThisFilePF() {
  var FileID = SpreadsheetApp.getActiveSpreadsheet().getId()
  var ThisFileParentFolders = DriveApp.getFileById(FileID).getParents()
  return ThisFileParentFolders.next().getId()
}

Затем я хочу, чтобы этот идентификатор папки (pkrPF) использовался в листе HTML при сборке сборщика.

function createPicker(token) {
  if (pickerApiLoaded && token) {
    google.script.run.ThisFilePF()
    var PickFolder =  new google.picker.DocsView().setParent(pkrPF)
      .setIncludeFolders(true)
      .setSelectFolderEnabled(true);
    var picker = new google.picker.PickerBuilder()
        .addView(PickFolder)
        .setSelectableMimeTypes('application/vnd.google-apps.folder')
        .enableFeature(google.picker.Feature.NAV_HIDDEN)
        .hideTitleBar()
        .setOAuthToken(token)
        .setDeveloperKey(DEVELOPER_KEY)
        .setCallback(pickerCallback)
        .setOrigin(google.script.host.origin)
        .setSize(DIALOG_DIMENSIONS.width - 2,
                DIALOG_DIMENSIONS.height - 2)
        .build();
    picker.setVisible(true);
  } else {
    showError('Unable to load the file picker.');
  }
}

Я знаю, что я делаю некоторые основные ошибки здесь, но любые указатели будут оценены.

РЕДАКТИРОВАТЬ: Возможно, немного ближе, но все еще не уверен, как получить переменные данные в функцию createpicker.

Я изменил google.script.run.ThisFilePF() на google.script.run.withSuccessHandler(getPkrFdrView).ThisFilePF();и добавил эту функцию

function getPkrFdrView(pkrPF) {
  pkrPFID = pkrPF
  alert("pkrPFID = " + pkrPFID)
}

Во всплывающем окне с предупреждением указывается идентификатор папки. Мне просто нужно выяснить, как это происходит в функции createpicker. Я прочитал, что вы должны избегать использования глобальных переменных в javascript, так что это следующее препятствие.

1 ответ

Размещение ответа, так что это будет закрыто.

Я исправил это, запустив код для получения FileID одновременно с созданием токена. Таким образом, у меня уже были данные при запуске createpicker, и я мог использовать их в функции. Я возвратил массив из стандартного getOAuthCall(), так как именно здесь я добавил код на стороне сервера.

соответствующие фрагменты кода:
(HTML-лист)

</head>
<body>
  <div>
    <p> Please select the property you wish the ticket folder to be created in. </p>
    <button onclick='getOAuthToken()'>Select a Folder</button>
    <br>

...

function getOAuthToken() {
      google.script.run.withSuccessHandler(createPicker)
          .withFailureHandler(showError).getOAuthTokenGS();
    }

...

function createPicker(returned) {
  var token = returned.token
  var pkrPF = returned.pkrPF
  if (pickerApiLoaded && token) {
    var PickFolder =  new google.picker.DocsView().setParent(pkrPF)
      .setIncludeFolders(true)
      .setSelectFolderEnabled(true);

И на листе Code.gs на стороне сервера
(Я переименовал пример функции getOAuthToken в getOAuthTokenGS для моего понимания)

function getOAuthTokenGS() {
  DriveApp.getRootFolder();
  var token = ScriptApp.getOAuthToken()
  var FileID = SpreadsheetApp.getActiveSpreadsheet().getId()
  var ThisFileParentFolders = DriveApp.getFileById(FileID).getParents()
  var pkrPF = ThisFileParentFolders.next().getId()
  return {token : token, pkrPF : pkrPF}
}

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

Передача этих переменных из скрипта в HTML меня действительно смутила - обратный вызов изначально не ожидал результатов, так что это полностью сбило меня с толку, поскольку оно асинхронно. Надеюсь, что это поможет кому-то еще (и если вы видите что-то, что я сделал неправильно, пожалуйста, кричите).

Другие вопросы по тегам