He estado intentando durante horas codificar un AppsScript simple. Cuando una función en un servidor de WebApp finaliza con éxito, quiero enviar los resultados a mi cliente (index.html) y llamar a la siguiente función en el servidor. Por alguna razón, no puedo llamar a una nueva función de servidor desde mi función de devolución de llamada. Se ejecuta la primera devolución de llamada: se muestra la alerta "Callback1", pero no se llama después a la nueva función de servidor createSheetsLogfile(selectedLabel)
. ¿Qué estoy haciendo mal? ¿No es posible llamar a una función en el servidor desde una función de devolución de llamada?
¡Muchas gracias por su ayuda! Mis mejores deseos Ben
índice.html
<button onclick="archiveSBEmails()">Start archiving</button> <script> var selectedLabel = ""; function archiveSBEmails(){ selectedLabel = "Testlabel_1"; google.script.run.withSuccessHandler(callbackFolderCreated).createFolder(selectedLabel); } function callbackFolderCreated(){ alert("Callback1"); google.script.run.withSuccessHandler(callbackLogfileCreated).createSheetsLogfile(selectedLabel); } function callbackLogfileCreated(logfileURL){ alert("Callback2"); google.script.run.withSuccessHandler(callbackBackupCompleted).BackupGmailToDrive(selectedLabel); } function callbackBackupCompleted(){ /... } </script>
código.gs
function doGet() { return HtmlService.createHtmlOutputFromFile('index') .setSandboxMode(HtmlService.SandboxMode.IFRAME); } function createFolder(selectedLabel){ //function is called from index.html // some code ... return true; } function createSheetsLogfile(selectedLabel){ //function is called from index.html //some code... return logfileURL; } function BackupGmailToDrive(selectedLabel){ //function is called from index.html //some code.. return true; }
Declaré e inicialicé una variable global fuera de cualquier función anterior en el código que luego se restableció a "" nuevamente cada vez que se llamó a una función en code.gs. Para resolver el problema, eliminé la variable global e introduje otro parámetro para transferirlo a las funciones donde fuera necesario.