Изо всех сил, чтобы установить 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 меня действительно смутила - обратный вызов изначально не ожидал результатов, так что это полностью сбило меня с толку, поскольку оно асинхронно. Надеюсь, что это поможет кому-то еще (и если вы видите что-то, что я сделал неправильно, пожалуйста, кричите).