Передача дополнительных параметров объекту события Apps Script

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

function createAttachmentsSection( attachments ){

  var widget = CardService.newSelectionInput()
    .setFieldName( 'selectedFiles' )
    .setType( CardService.SelectionInputType.CHECK_BOX )
    .setOnChangeAction(
      CardService.newAction()
        .setFunctionName( 'checkboxAltered' )
    );

  for ( var i = 0 ; i < attachments.length; i++ )
    widget.addItem( attachments[i].getName(), '' + i ,  true )

  return CardService.newCardSection().addWidget( widget );
}

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

function checkboxAltered( e ){

  Logger.log( e );
  Logger.log( selections.length );
}

e, объект события, всегда undefined здесь. И selections, (ранее инициализированный и проверенный) глобальный логический массив с элементом для каждого вложения, всегда просто [] внутри checkboxAltered.

Что я делаю не так? Как я могу использовать setParameters( Object ), чтобы сообщить внутри функции обратного вызова, какой флажок был нажат пользователем? Доступны ли глобальные переменные из функций обратного вызова?


person Manuel Herrera Ojea    schedule 11.02.2018    source источник


Ответы (1)


Глядя на документацию CardService, класс Action имеет setParameters(). Если вы хотите передать пользовательские параметры обратному вызову, вам нужно будет использовать этот метод.

person TheAddonDepot    schedule 11.02.2018
comment
Теперь решено. Я до сих пор понятия не имею, из-за чего объект события был пустым, но теперь это не так, и я могу без проблем получить доступ к его дополнительным параметрам. Кроме того, массив selections всегда был пуст, потому что каждый раз, когда вызывается функция обратного вызова, сценарий выполняется с нуля, в совершенно новом контексте, которого я раньше не знал. - person Manuel Herrera Ojea; 15.02.2018
comment
И ключ, и значение объекта, переданного в Action.setParameters(), должны быть строкой. Я упорядочил и передал объект события, созданный contextualTriggers, даже тогда, когда он выдает ошибку. Мне нужно получить доступ к объекту события, чтобы извлечь информацию о вложении в другую карточку. Есть идеи? - person Safal Pillai; 22.09.2020