La clave de este ejemplo descansa en el uso de triggers o disparadores de "código" que son los que permiten que se ejecute el script que dependiendo de las circunstancias, en este caso determinadas horas, el formulario se cierre o se abra y se tenga disponible
Existe diferentes tipos de disparadores, pero en este momento nos limitaremos a usarlos ya que no es objetivo o materia de este articulo explicar los mismos, esto se hará en otro momento diferente. 😊
La recomendación es que se siga fielmente el ejemplo para garantizar el éxito de la tarea y una vez que ya se tenga dominado el código , se podrá pasar a realizar las adaptaciones a el caso concreto que se necesite.
creeanme e visto miles de veces intentar hacerlo de primera mano, esto no funcionara para personas sin conocimientos nulos o incipientes y les traera algunos dolores de cabeza, realizada la advertencia pasamos a explicar :)
Construir el formulario
como podemos ver el formulario de Google tiene una sola pregunta para facilitar y acelerar el proceso de prueba y verificación (no afecta si colocas mas preguntas ya que en este caso el código ira en función del tiempo)
ir al editor de secuencia de comandos y copiar-pegar el código( se encuentra al final )
ejecutar el script cerrar formulario y autorizar su ejecución, .-saldar una ventana para ese proceso, sin la autorización, no se ejecutara el código, así que este paso es crucial
deberás seguir todos los sub-pasos, hasta llegar a permitir la ejecución
La ejecución del script permitirá que el código corra sin problemas
Es evidente que si estas ejecutando código tuyo, no desconfiarias de ti mismo, por lo cual debes otorgar los permisos :)
al final podra verse el cerrado del formulario así:
Debes ejecutar por una única vez la creación de los triggers o disparadores tanto el de cierre como el de apertura
Nota: esta acción también puede hacerse manualmente.
Listo , es todo lo que necesitamos hacer.
las variables hora_de_inicio y hora_de_cierre indican el lapso de tiempo en que el formulario permanecerá abierto
la variable form hace referencia al formulario activo, es decir al ejemplo que estarás usando en ese momento
La función TiemposCierreApertura() es la función maestra que se ejecutara y revisara si se cumple con el rango de tiempo de apertura permitido y en su caso ejecutara 2 funciones auxiliares
La función AbrirForm() .- como su nombre lo indica , se ejecutara si y solo si se encuentra dentro del rango o franja horaria "programada", en caso contrario ejecutara la función CerrarForm()
La función CerrarForm().- cierra el formulario impidiendo que se pueda responder, siempre y cuando este fuera del rango horario pre programado en las variables hora_de_inicio y hora_de_cierre
Como puede apreciarse tanto AbrirForm() , como CerrarForm(), usan solo una sola línea de código que es prácticamente igual:
form.setAcceptingResponses(true); para aceptar respuestas y
form.setAcceptingResponses(false); para NO permitir responder.
y eso es todo ahora si!!! :)
Te recomiendo revisar este conjunto de consejos sobre formularios de Google
si tienes alguna consulta, por favor realízala en mi canal de YouTube en el vídeo respectivo, o el que más se parezca al tema.
Suscríbete y Síguenos en:
var hora_de_inicio = 19;
var hora_de_cierre = 21;
var form = FormApp.getActiveForm();
//---------------------------------------------------------------------------------------------
/* function obtenerHora() { //funcion auxiliar para mostrar la hora actual y hacer pruebas :)
var hora= new Date().getHours();
return hora
} */
//---------------------------------------------------------------------------------------------
function TiemposCierreApertura(){
if (new Date().getHours() >= hora_de_inicio && new Date().getHours()<=hora_de_cierre) {
//Logger.log('la hora es:' + obtenerHora() + ' y estas dentro del tiempo y puedes responder');
AbirForm()
} else {
//Logger.log('la hora es:' + obtenerHora() + ' y estas FUERA del tiempo y NO PUEDES RESPONDER');
CerrarForm()
}
}
function AbirForm(){
form.setAcceptingResponses(true);
}
function CerrarForm(){
form.setAcceptingResponses(false);
}
//================================ TRIGGERS ======================================================
/*NOTA: LA CREACION DE TRIGGERS O DISPARADORES SE EJEUCTA 1 SOLA VEZ, YA CREADOS ESTOS EJECUTARAN EL
CODIGO EN EL TIEMPO ESPECIFICADO */
function creaDisparadorApertura(){
//https://developers.google.com/apps-script/reference/script/clock-trigger-builder#nearminuteminute
ScriptApp.newTrigger("TiemposCierreApertura")
.timeBased()
.atHour(hora_de_inicio)
.nearMinute(0)
.everyDays(1) // Frequency is required if you are using atHour() or nearMinute()
.create();
}
function creaDisparadorCierre(){
//https://developers.google.com/apps-script/reference/script/clock-trigger-builder#nearminuteminute
ScriptApp.newTrigger("TiemposCierreApertura")
.timeBased()
.atHour(hora_de_cierre)
.nearMinute(1)
.everyDays(1) // Frequency is required if you are using atHour() or nearMinute()
.create();
}
//triggers sencillos en: https://developers.google.com/apps-script/reference/script/form-trigger-builder