La mayoría de los complementos, además de presentar datos, requieren que el usuario ingrese información. Cuando creas un complemento basado en tarjetas, puedes usar widgets interactivos como botones, elementos del menú de la barra de herramientas o casillas para solicitar al usuario los datos que el complemento o brindar otros controles de interacción.
Cómo agregar acciones a los widgets
Para que los widgets sean interactivos, debes vincularlos a acciones específicas y, luego, implementar el comportamiento requerido en una devolución de llamada . Consulta las acciones de los complementos para obtener más detalles.
En la mayoría de los casos, puedes seguir este procedimiento general para configurar un widget para realizar una acción específica cuando se seleccionan o actualizan:
- Crea un objeto
Action
. la especificación de la función de devolución de llamada que se debe ejecutar, junto con cualquier los parámetros obligatorios. - Vincula el widget a
Action
llamando al Función del controlador del widget. - Implementa la función de devolución de llamada para implementar el comportamiento requerido.
Ejemplo
En el siguiente ejemplo, se configura un botón que muestra una notificación al usuario
después de hacer clic en ella. El clic activa la función de devolución de llamada notifyUser()
.
con un argumento que especifique el texto de la notificación. Muestra una compilación
ActionResponse
mostrará una notificación.
/**
* Build a simple card with a button that sends a notification.
* @return {Card}
*/
function buildSimpleCard() {
var buttonAction = CardService.newAction()
.setFunctionName('notifyUser')
.setParameters({'notifyText': 'Button clicked!'});
var button = CardService.newTextButton()
.setText('Notify')
.setOnClickAction(buttonAction);
// ...continue creating widgets, then create a Card object
// to add them to. Return the built Card object.
}
/**
* Callback function for a button action. Constructs a
* notification action response and returns it.
* @param {Object} e the action event object
* @return {ActionResponse}
*/
function notifyUser(e) {
var parameters = e.parameters;
var notificationText = parameters['notifyText'];
return CardService.newActionResponseBuilder()
.setNotification(CardService.newNotification()
.setText(notificationText))
.build(); // Don't forget to build the response!
}
Diseña interacciones efectivas
Cuando diseñes tarjetas interactivas, ten en cuenta lo siguiente:
Generalmente, los widgets interactivos necesitan al menos un método de controlador para definir su de tu modelo.
Usa el widget
setOpenLink()
. controlador cuando tienes una URL y solo quieres abrirla en una pestaña. Esto evita la necesidad de definir Objeto y devolución de llamadaAction
. Si necesitas crear la URL primero o tomar cualquier otra pasos antes de abrir la URL, define unAction
y usasetOnClickOpenLinkAction()
en su lugar.Cuando uses
setOpenLink()
osetOnClickOpenLinkAction()
funciones del controlador de widgets, debes proporcionarOpenLink
para definir la URL que se abrirá. También puedes usar este objeto para especificar el comportamiento de apertura y cierreOpenAs
y EnumsOnClose
.Es posible que más de un widget use el mismo Objeto
Action
. Sin embargo, debes definir diferentes ObjetosAction
si lo deseas para proporcionar diferentes parámetros a la función de devolución de llamada.Mantén las funciones de devolución de llamada simples. Para que los complementos sigan siendo responsivos, El servicio de tarjetas limita las funciones de devolución de llamada a un máximo de 30 segundos de tiempo de ejecución. Si la ejecución demora más tiempo, es posible que la IU del complemento no actualice la visualización de su tarjeta correctamente en respuesta al
Action
Si el estado de los datos en un backend de terceros cambia como resultado de la acción de un usuario interacción con la IU de tu complemento, se recomienda que el conjunto de complementos un “estado cambiado” bit a
true
para que cualquier caché existente del cliente se borrar. Consulta laActionResponseBuilder.setStateChanged()
descripción del método para obtener detalles adicionales.