Это не то же самое, что Значения свойств объекта теряются на стороне сервера при передаче объекта через google.script.run
Я пытаюсь установить надстройку скрипта Google Apps.тестовые рамки.Поскольку тестирование как надстройка не может использоваться для тестирования устанавливаемых триггеров, мне интересно, могу ли я извлечь код на стороне сервера из ограниченного проекта для использования в качестве библиотеки для тестирования моих боковых панелей, которые вызывают функции на стороне сервера.
Если я запускаю приведенный ниже код, используя Run> Test as add-on ..., он показывает мое меню два раза
- Как пользовательское меню с именем "Sidebar", рядом сМеню справки
- В качестве дополнительного меню в меню «Дополнения»> «Мой проект»
- Когда я нажимаю боковую панель> Открыть, нажимая кнопки боковой панели
getMail()
возвращает undefined
- Когда я нажимаю «Надстройка»> «Мой проект»> «Открыть», при нажатии кнопок боковой панели
getMail()
, как и ожидалось, возвращается активный адрес электронной почты пользователя.
То же самое происходит, когда объект на стороне сервера теряется, когда я заменяю функцию getMail()
другой, использующей службу электронных таблиц, чтобы вернуть значение ячейки, или даже той, которая возвращает примитивную строку.
Чего мне не хватает?
Суть в том, что я хочу добавить кнопку на боковой панели, которая создает устанавливаемый триггер и получить некоторые значения из электронной таблицы.
Электронная таблица для использования в качестве библиотеки
Code.gs
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
var menu = ui.createMenu('Sidebar');
menu
.addItem('Open', 'showSidebar')
.addToUi();
}
function showSidebar() {
var ui = HtmlService.createHtmlOutputFromFile('Sidebar')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setTitle('A Sidebar');
SpreadsheetApp.getUi().showSidebar(ui);
}
function getEmail() {
return Session.getActiveUser().getEmail();
}
Sidebar.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function updateButton(email, button) {
console.log(email);
button.value = 'Clicked by ' + email;
}
</script>
</head>
<body>
<input type="button" value="Not Clicked" onclick="google.script.run
.withSuccessHandler(updateButton)
.withUserObject(this)
.getEmail()" />
<input type="button" value="Not Clicked" onclick="google.script.run
.withSuccessHandler(updateButton)
.withUserObject(this)
.getEmail()" />
</body>
</html>
ПримерДругие функции, используемые для замены getMail ()
function getCellValue(){
return SpreadsheetApp.getActiveCell().getValue();
}
function getGreeting(){
return 'Hello world';
}
Электронная таблица для использования в качестве клиента библиотеки
- Добавление библиотеки в проект
Добавьте приведенный ниже код
для функции onOpen (e) {aLib.onOpen (e);}
function showSidebar () {aLib.showSidebar ();}
function getEmail () {aLib.getEmail ();}
Тестировать как дополнение ...
- Нажмите Run> Test as add-on
- Добавить "Таблицу, чтобы бытьиспользуется как клиент библиотеки »как документ, который будет использоваться для тестирования в качестве дополнения
- Запустите документ