Problemas con Apps Script y Google Calendar

49 views
Skip to first unread message
Assigned to mauricio...@gmail.com by me

Instituto Paysandú

unread,
May 15, 2023, 11:00:02 AM5/15/23
to Apps Script en Español
Buen día, tenemos un formulario de Google para inasistencias de docentes que se publican en un Calendar, estaba funcionando todo bien y de repente comenzó a duplicar o triplicar los datos en el calendario, el código es el siguiente:
//para que se actualice automáticamente al recibir
//una nueva inasistencia
function CrearTriggerFormulario()
{
   var sheet = SpreadsheetApp.getActive();
   ScriptApp.newTrigger("crearAgenda")
     .forSpreadsheet(sheet)
     .onFormSubmit()
     .create();
}

//función que crea la nota en el Calendario
function crearAgenda(){
  //obtengo el calendario
  var calInasistencias = CalendarApp.getCalendarById('idDelCalendario');
  Logger.log('Calendario: ' + calInasistencias.getName());

//Obtengo la hoja
//  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  spreadsheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Agenda");
  Logger.log('Hoja' + spreadsheet.getName());
   
  //var datos = spreadsheet.getRange("A2:B500").getValues();
  var datos = spreadsheet.getDataRange().getValues();



  for (x=1; x<datos.length; x++){
    var nombre = datos[x][0]; //Logger.log('nombre: ' + nombre);
    var fechaIni = new Date(datos[x][1]); //Logger.log('fechaIni: ' +fechaIni);
    var fechaFin = new Date(datos[x][2]); //Logger.log('fechaFin: ' +fechaFin);
    var materias = datos[x][3]; //Logger.log('Materias: ' +materias);
    var grupos = datos[x][4]; //Logger.log('Grupos: ' +grupos);
    var estado = datos[x][5];//Logger.log('Estado: ' +estado);
    if (estado=='Confirmado') {  //El formulario por defecto se crea con 'Confirmado'

      if(fechaIni.getDay()==fechaFin.getDay() && fechaIni.getMonth()==fechaFin.getMonth() && fechaIni.getFullYear()==fechaFin.getFullYear()){ //(fechaIni==fechaFin){
       
        calInasistencias.createAllDayEvent(nombre + ' ' + materias + ' ' + grupos, fechaIni);
        spreadsheet.getRange(x+1,6).setValue('Agendado');  //Para que no repita la agenda
      }
      else{
        calInasistencias.createEvent(nombre + ' ' + materias + ' ' + grupos, fechaIni, fechaFin);
        spreadsheet.getRange(x+1,6).setValue('Agendado');  //Para que no repita la agenda
      }
      }
}
Agradezco si alguien nos puede ayudar.

Omar Raygoza

unread,
May 15, 2023, 2:55:14 PM5/15/23
to Apps Script en Español
Creo que deberías revisar bien tu ciclo que recorre los datos y verifricar que se cumplan las conficiones de IF que tienes.
Para poder revisar bien qué sucede, sería conveniente poder acceder a la hoja de datos para poder correr el script y ver qué está fallando.
Saludos.

Instituto Paysandú

unread,
May 17, 2023, 9:49:29 AM5/17/23
to Apps Script en Español
Hola, el problema es que estaba funcionando perfectamente desde marzo y ahora en mayo comenzó con ese error, si ejecuto únicamente la función crearAgenda ejecuta correctamente, pienso que el problema surge cuando se ejecuta el Trigger. Las columnas que lee son las siguientes

Nombre del/a docente

Fecha de inicio de la inasistencia (fecha desde)

Fecha de fin de la inasistencia (fechas hasta)

Asignatura/s que no va a dictar

Grupo/s a los que no asistirá

Confirmar inasistencia

Al enviar el formulario en la columna "Confirmar inasistencia" queda con la leyenda "Confirmado" que es lo que revisa el código y luego lo modifica a "Agendado", precisamente para evitar agendar 2 veces el mismo evento.

No entiendo por qué dejó de funcionar.

Watari N

unread,
Aug 9, 2023, 7:24:38 AM8/9/23
to Apps Script en Español
Estimado, creo que debes redefinir tu función para que se ejecute de manera síncrona. Presumo que tu función se está ejecutando de manera asíncrona y por ello se desencadenan 2 o mas veces. 

Watari N

Reply all
Reply to author
Forward
0 new messages