Como crear triggers con Google Apps Script


A medida que avanzamos en nuestros proyectos con Google Apps Script acabamos siempre con la necesidad de instalar triggers. Generalmente si son para uno mismo se setean los triggers a mano, pero, si estas vendiendo tu código lo mejor es que hagas una función para instalar triggers con Google Apps Script.

Triggers instalados con Google Apps Script


De esta manera, tu cliente sabe que solo debe ejecutar una función y tendrá todo el sistema seteado ( y tu te quitaras muchos dolores de cabeza explicandole como se hace para poner un trigger :) )

Hacer un instalador de triggers, aunque sea poco código ya es materia avanzada, así que ante cualquier duda, no vaciléis en preguntar.

No os pongo todos los triggers por que hay bastantes, pero si lo más usuales. No hace falta mucha explicación por que el nombre de las funciones lo dice todo.

1.Basados en tiempo
function CrearTriggerCiclico()
{
    ScriptApp.newTrigger('FuncionAEjecutar')
      .timeBased()
      .everyMinutes(5)
      .create();
}

function CrearTriggerDiario()
{
    ScriptApp.newTrigger("FuncionAEjecutar")
      .timeBased()
      .atHour(5)
      .everyDays(1)
      .create();
}
 
function CrearTriggerSemanal()
{
    ScriptApp.newTrigger('FuncionAEjecutar')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.SUNDAY)
      .atHour(12)
      .create();
}

function CrearTriggerMensual()
{
   ScriptApp.newTrigger("FuncionAEjecutar")
     .timeBased()
     .onMonthDay(1)
     .create();
}


2. Basados en formulario
function CrearTriggerFormulario()
{
    var form = FormApp.openById('id_del_formulario');
    ScriptApp.newTrigger('FuncionAEjecutar')
      .forForm(form)
      .onFormSubmit()
      .create();
}

Si os va mal tener el identificador del formulario y preferís usar los triggers con el identificador del spreadsheet se puede hacer exactamente lo mismo pero por otro camino.
function CrearTriggerFormulario()
{
   var sheet = SpreadsheetApp.getActive();
   ScriptApp.newTrigger("FuncionAEjecutar")
     .forSpreadsheet(sheet)
     .onFormSubmit()
     .create();
}

function CrearTriggerFormularioAlEditar()
{
    var form = FormApp.openById('id_del_formulario');
    ScriptApp.newTrigger('FuncionAEjecutar')
      .forForm(form)
      .onOpen()
      .create();
}

3. Basados en calendario
function CrearTriggerCalendario()
{
  ScriptApp.newTrigger('FuncionAEjecutar')
    .forUserCalendar(Session.getActiveUser().getEmail())
    .onEventUpdated()
    .create();
}

4. Basdados en cambios externos al spreadsheet ( APIs )
function CrearTriggerOnChange()
{
    var sheet = SpreadsheetApp.getActive();
    ScriptApp.newTrigger("FuncionAEjecutar")
      .forSpreadsheet(sheet)
      .onChange()
      .create();
}

5. Como eliminar los triggers
function EliminarTriggers()
{
  var allTriggers = ScriptApp.getProjectTriggers();
 
  for (var i = 0; i < allTriggers.length; i++)
  {
     ScriptApp.deleteTrigger(allTriggers[i]);
  }
}

Espero que os sirva, realmente el tema de instalar triggers aunque no es para nada fácil le da una potencia brutal a nuestros Google Apps Scripts.

Espero vuestras dudas y sugerencias

Nos vemos

6 comentarios:

  1. Me puedes explicar como debo interpretar cada vez que añado un triggers google me pide que de mi autorización para permitir Leer, modificar, eliminar y hasta compartir hojas de calculo en mi cuenta de Drive. Mi pregunta es si la persona que me ha dado el código puede de alguna cosa como las antes mencionadas. Yo no quiero que accedan a mis hojas de calculo por ningun medio, ni por código ni porque les de permiso. Ya que veo que no hay de otra al momento de instalar un trigger.

    ResponderEliminar
  2. hola, deseo hacerte una consulta es posible crear un trigger que se ejecute un dia y hora espeficico semanalmente, por ej: ejecutrar la funcion "horaActual" los dias martes a las 15:15 hs todas las semanas?

    ResponderEliminar
    Respuestas
    1. Esto no te sirve?
      function CrearTriggerSemanal()
      {
      ScriptApp.newTrigger('FuncionAEjecutar')
      .timeBased()
      .onWeekDay(ScriptApp.WeekDay.SUNDAY)
      .atHour(12)
      .create();
      }

      Eliminar
  3. disculpa, como podría ejecutar un script en forma continua intente ejecutar un script cada 0.5 minutos pero no lo ejecutaba mas que una sola vez

    ResponderEliminar
    Respuestas
    1. Te va a dar problemas si o si. Los limites de ejecución no te van a permitir ejecutar el script como tu quieres y sinceramente, por norma general no hace falta ejecutar tantas veces el script. Explica un poco más tu proyecto , tal vez podamos guiarte un poco o darte algún ejemplo de por donde tirar.
      Nos vemos!

      Eliminar
  4. Buenas, intente ejecutar un activador circular diario pero no consigo que repita todos los días a la misma hora, podrían ayudarme?

    ResponderEliminar

Tal vez te interese