У меня есть 2 скрипта Google Apps Проекты .
- SheetsLib - это библиотека, которую я создал, она содержит мои go -функции.
- TestFile - это связанный с контейнером скрипт, который использует SheetsLib.
SheetsLib содержит следующие функции, которые имеют отношение к этому вопросу:
- displayDraftsSelector - отображает страница draftSelector Html на боковой панели.
- draftSelector - Html файл, который также содержит сценарий js, который вызывает внутреннюю функцию для заполнения
<select>
- getDraftsArr - Серверная функция, которая возвращает все черновики Gmail от пользователя.
Функции SheetsLib работают, т.е. у меня есть тестовые функции, чтобы подтвердить это. Моя цель - улучшить эту библиотеку, чтобы я мог использовать ее в нескольких проектах с функциональностью, позволяющей пользователю выбирать существующий черновик Gmail и отправлять его выбранным пользователям (в активной электронной таблице).
ПРОБЛЕМА В моем новом сценарии с привязкой к контейнеру, который имеет доступ к библиотеке, я могу отображать только боковую панель, но не вызывать внутреннюю функцию (которая находится в библиотеке), когда я нажимаю кнопку на боковой панели:
- Я успешно загружаю представление, используя
displayDraftsSelector()
, которое показывает представление draftSelector
. Это все функции библиотеки. - Затем представление вызывает
getDraftsArr()
, и это вызывает ошибку. Но эта функция существует в библиотеке (и работает по назначению).
Следующая ошибка, которую я вижу в консоли при загрузке боковой панели:
Uncaught TypeError: google.script.run.withSuccessHandler (...). WithFailureHandler (...). GetDraftsArr не является функцией
В идеале должно произойти то, что внутренняя функция * Вызывается 1043 *, и его результат заполняет элемент выбора. Затем пользователь может выбрать один черновик на боковой панели. Когда пользователь подтверждает с помощью кнопки, активные строки являются получателями. В целом, все это работает, когда я копирую-> вставляю, но не могу понять, как сохранить функциональность в библиотеке.
Следующая функция находится в библиотеке, которую я пытаюсь использовать вызов.
// back-end in Library Project
function getDraftsArr(){
let output = [];
const messages = GmailApp.getDraftMessages();
messages.forEach( message => {
output.push({
id: message.getId(),
subject: message.getSubject()
});
});
return JSON.stringify(output)
}
Следующее находится в бэкэнде библиотеки
// front-end in Library Project
<select id="draftsSelect"></select>
<script>
function getDrafts(){
const draftsSelect = document.getElementById("draftsSelect");
google.script.run
.withSuccessHandler( updateDrafts )
.getDraftsArr();
function updateDrafts( drafts ){
var options = "";
var draftsParsed = JSON.parse(drafts);
draftsParsed.forEach( draft => {
options += "<option value='" + draft.id + "'>" + draft.subject + "</option>";
});
draftsSelect.innerHTML = options; }
}
</script>