Как создать всплывающее окно в Google Apps Script?

Что такое всплывающее окно и зачем оно нужно в Google Apps Script?

Всплывающее окно в Google Apps Script (GAS) – это небольшое диалоговое окно, которое появляется поверх основного интерфейса скрипта или веб-приложения. Оно позволяет взаимодействовать с пользователем, запрашивать у него информацию или уведомлять о чем-либо, не переходя на другую страницу. В отличие от полностраничных интерфейсов, всплывающие окна не прерывают рабочий процесс пользователя, а лишь кратковременно привлекают его внимание.

В контексте GAS, всплывающие окна часто используются для:

Запроса пользовательского ввода (например, имя, адрес электронной почты, числовое значение).

Отображения уведомлений об успешном или неуспешном выполнении операций.

Подтверждения действий, которые могут привести к потере данных (например, удаление записи).

Основные варианты использования всплывающих окон: ввод данных, уведомления, подтверждения

Как было упомянуто выше, всплывающие окна в GAS можно использовать в различных сценариях:

Ввод данных: Всплывающие окна предоставляют удобный способ запросить у пользователя ввод данных, необходимых для работы скрипта. Например, можно запросить ID рекламной кампании в Google Ads, чтобы получить статистику.

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

Подтверждения: Перед выполнением потенциально опасных действий (например, удаление больших объемов данных или отправка электронных писем большому списку рассылки) можно использовать всплывающее окно для подтверждения намерения пользователя.

Ограничения стандартных всплывающих окон Google Apps Script

Стандартные методы alert(), prompt() и ui.alert() предоставляют базовый функционал для создания всплывающих окон. Однако они имеют ряд ограничений:

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

Ограниченный набор элементов управления. Доступны только текстовые поля для ввода и стандартные кнопки (OK, Cancel, Yes, No).

Сложность реализации сложных взаимодействий. Например, реализация асинхронного взаимодействия со скриптом.

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

Создание простого всплывающего окна с alert()

Синтаксис и пример использования alert()

Функция alert() является самым простым способом отображения всплывающего окна в Google Apps Script. Она принимает один аргумент – текст сообщения, который будет отображен во всплывающем окне. Синтаксис: Browser.msgBox(message);

Отображение простого сообщения во всплывающем окне

Пример кода:

/**
 * Displays a simple alert message.
 */
function showAlert() {
  Browser.msgBox('Hello, world!');
}

Преимущества и недостатки использования alert() для отображения информации

Преимущества:

Простота использования. Для отображения сообщения требуется всего одна строка кода.

Не требует сложной настройки.

Недостатки:

Ограниченные возможности кастомизации.

Блокирует выполнение скрипта до тех пор, пока пользователь не закроет всплывающее окно.

Создание всплывающего окна с prompt() для ввода данных

Синтаксис и пример использования prompt()

Функция prompt() позволяет запросить у пользователя ввод данных. Она принимает два аргумента:

Текст сообщения, отображаемый во всплывающем окне.

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

Синтаксис: Browser.inputBox(prompt, buttons)

Получение данных, введенных пользователем во всплывающем окне

Пример кода:

Реклама
/**
 * Prompts the user for their name and displays a greeting.
 */
function askForName() {
  const name: string = Browser.inputBox('Please enter your name:');
  if (name) {
    Browser.msgBox('Hello, ' + name + '!');
  } else {
    Browser.msgBox('You did not enter your name.');
  }
}

Валидация введенных данных и обработка ошибок

Важно валидировать данные, введенные пользователем, чтобы избежать ошибок в работе скрипта. Например, можно проверить, является ли введенное значение числом или соответствует ли оно определенному формату. Добавьте проверку, что пользователь не нажал отмену.

/**
 * Prompts the user for a number and validates the input.
 */
function askForNumber() {
  const numberString: string = Browser.inputBox('Please enter a number:');
  if(numberString === '') return;
  const number: number = Number(numberString);
  if (isNaN(number)) {
    Browser.msgBox('Invalid input. Please enter a number.');
  } else {
    Browser.msgBox('You entered: ' + number);
  }
}

Примеры использования prompt() для различных типов данных

Запрос числа: Как показано в примере выше.

Запрос даты: Можно использовать текстовое поле для ввода даты, а затем преобразовать введенную строку в объект Date.

Запрос адреса электронной почты: Можно использовать регулярное выражение для проверки формата введенного адреса.

Создание всплывающего окна с ui.alert() для более сложных взаимодействий

Синтаксис и возможности ui.alert()

Метод ui.alert() позволяет создавать всплывающие окна с кнопками подтверждения (Yes/No, OK/Cancel). Он предоставляет более гибкий способ взаимодействия с пользователем, чем alert() и prompt(). ui.alert(title, body, buttons).

Использование кнопок подтверждения (Yes/No, OK/Cancel)

Пример кода:

/**
 * Asks the user to confirm an action using Yes/No buttons.
 */
function confirmAction() {
  const ui = SpreadsheetApp.getUi();
  const result = ui.alert(
      'Confirm Action',
      'Are you sure you want to proceed?',
      ui.ButtonSet.YES_NO);

  if (result == ui.Button.YES) {
    Browser.msgBox('Action confirmed!');
  } else {
    Browser.msgBox('Action cancelled.');
  }
}

Обработка нажатий кнопок и выполнение соответствующих действий

В зависимости от нажатой кнопки можно выполнять различные действия. Например, если пользователь нажал кнопку "Yes", можно выполнить удаление записи, а если нажал кнопку "No", можно отменить действие.

Пример создания всплывающего окна для подтверждения удаления записи

/**
 * Confirms deletion of a record before proceeding.
 */
function confirmDeleteRecord() {
  const ui = SpreadsheetApp.getUi();
  const result = ui.alert(
      'Confirm Deletion',
      'Are you sure you want to delete this record?',
      ui.ButtonSet.OK_CANCEL);

  if (result == ui.Button.OK) {
    // Code to delete the record
    Browser.msgBox('Record deleted.');
  } else {
    Browser.msgBox('Deletion cancelled.');
  }
}

Альтернативные способы создания всплывающих окон: HTML Service

Краткое описание HTML Service и его возможностей

HTML Service позволяет создавать веб-страницы и диалоговые окна с использованием HTML, CSS и JavaScript. Он предоставляет широкие возможности для кастомизации внешнего вида и функциональности всплывающих окон.

Преимущества и недостатки использования HTML Service для создания всплывающих окон

Преимущества:

Полный контроль над внешним видом и функциональностью всплывающего окна.

Возможность использования HTML, CSS и JavaScript.

Возможность реализации сложных взаимодействий с пользователем.

Недостатки:

Более сложный процесс разработки.

Требуется знание HTML, CSS и JavaScript.

Пример создания простого всплывающего окна с использованием HTML Service и Google Apps Script

Code.gs:

/**
 * Opens a dialog using HTML Service.
 */
function openDialog() {
  const html = HtmlService.createHtmlOutputFromFile('dialog')
      .setWidth(300)
      .setHeight(200);
  SpreadsheetApp.getUi()
      .showModalDialog(html, 'My Custom Dialog');
}

dialog.html:




  


  

Hello from HTML Service!

This is a custom dialog.

Этот пример показывает базовую структуру для создания всплывающего окна с использованием HTML Service. HTML-файл содержит HTML-код для отображения содержимого всплывающего окна. Кнопка "Close" использует google.script.host.close() для закрытия всплывающего окна.

HTML Service – это мощный инструмент для создания сложных и кастомизированных всплывающих окон в Google Apps Script.


Добавить комментарий