A função não está em execução no serviço HTML do google script

Oct 30 2020

Estou desenvolvendo uma ferramenta para mim e meus colegas de classe que criará um google doc e o enviará por e-mail para o professor selecionado, usando todos os campos que estão preenchidos e preenchendo todos aqueles que não estão com os padrões para a disciplina selecionada, por exemplo, artes da linguagem, mas a função que pega as informações selecionadas e as usa para enviar o e-mail não está executando. Verifiquei as execuções do projeto e a função customDoc(),, não foi executada nenhuma vez. Suspeito que seja um problema com meu HTML, pois não vi nenhuma mensagem de erro quando testei a função no editor para ver se havia algum erro de sintaxe, mas estava limpo, apenas nunca executado. Aqui está meu código e, embora o erro seja provável no HTMl, irei fornecer meu JS também.

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index.html');
}

function showDialoge() {
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutputFromFile('Index.html'), 'Test');
}

function customDoc(clicked_id) {
  var d = new Date();
  var s = (d.getDate()) + '/' + (d.getMonth() + 1) + '/' + d.getFullYear();
  console.log(s);
  var cycler = clicked_id
  var math = ['[email protected]', 'math for ']
  var LA = ['[email protected]', 'la for ']
  var science = ['[email protected]', 'science for ']
  var is = ['[email protected]', 'I&S for ']
  var span = ['[email protected]', 'Espanol para ']
  var presets = [math, LA, science, is, span]
  var email1 = document.getElementById('Email')
  var subject1 = document.getElementById('Sub')
  var docName1 = document.getElementById('docName')
  var message1 = document.getElementById('message')
  var email = null
  if (email1 != ' ') {
    email = email1
  } else {
    email = presets[cycler];
    [1];
  }
  var subject = null
  if (subject1 != ' ') {
    subject = subject1
  } else {
    subject = presets[cycler];
    [2]; + s
  }
  var doc = null
  if (docName1 != ' ') {
    doc = docName1
  } else {
    doc = presets[cycler];
    [2]; + s
  }
  var document = documentApp.create(doc)
  var url = document.getUrl();
  var message = null
  if (message1 != ' ') {
    message = message1 + '' + url
  } else {
    message = url
  }

  GmailApp.sendEmail(email, subject, message);
}
<!DOCTYPE html>
<script src="Code.gs"></script>
<html>
<h1>CREATE DOC</h1>

<body>


</body>
<p>Email</p>
<input type='text' id='Email' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p style=" font-family: Times New Roman, Times, serif;">Doc name</p>
<input type='text' id='docName' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p>Subject</p>
<input type='text' id='Sub' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">
<p>message</p>
<input type='text' id='message' value=' ' style="border-radius: 20px; border-color: crimson; border-width:20px; ">

<h2>Fill blanks for subject: </h2>


<button id='2' onclick=c ustomDoc(this.id)> LA </button>
<button id='3' onclick=c ustomDoc(this.id)> Science </button>
<button id='4' onclick=c ustomDoc(this.id)> Individuals and societies </button>
<button id='5' onclick=c ustomDoc(this.id)> Spanish  </button>
<button id='1' onclick=c ustomDoc(this.id)> math </button>


</html>

Respostas

1 Diego Oct 31 2020 at 01:49

Resumindo, customDoc()é uma função de servidor e você precisa usar google.script.runpara dizer ao Apps Script para executar uma função de servidor específica. Então, em vez de ligar onclick="customDoc(this.id)", tente onclick="google.script.run.customDoc(this.id)". Não inclua Code.gs em seu arquivo HTML, pois é um código do lado do servidor e não funcionará. Eu recomendo fortemente a leitura do guia de comunicação cliente-servidor .

Sua customDoc()função é outra história :) Abaixo está uma maneira muito simples de reorganizar seus diferentes presets (por exemplo, assuntos) usando objetos . Também substituí seu código de formatação de data por Utilities.formatDate(), que pode ser um pouco mais fácil de compreender.

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index.html');
}

function customDoc(subject) {
  var subjects = {
    'math': {
      email: '[email protected]',
      preSubject: 'math for '
    },
    'la': {
      email: '[email protected]',
      preSubject: 'la for '
    },
    'science': {
      email: '[email protected]',
      preSubject: 'science for '
    },
    'is': {
      email: '[email protected]',
      preSubject: 'I&S for '
    },
    'spanish': {
      email: '[email protected]',
      preSubject: 'Español para '
    }
  };

  var formattedDate = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'M/d/yyyy');
  
  console.log('Today: ' + formattedDate);
  console.log('Subject: ' + subject);
  console.log(subjects[subject]);
}
<!DOCTYPE html>
<html>
  <body>
    <h1>CREATE DOC</h1>
    <p>Email</p>
    <input type="text" id="Email" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
    
    <p style="font-family: Times New Roman, Times, serif">Doc name</p>
    <input type="text"  id="docName" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
    
    <p>Subject</p>
    <input type="text" id="Sub" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />
    
    <p>message</p>
    <input type="text" id="message" value=" " style="border-radius: 20px; border-color: crimson; border-width: 20px" />

    <h2>Fill blanks for subject:</h2>

    <button id="la" onclick="google.script.run.customDoc(this.id)">LA</button>
    <button id="science" onclick="google.script.run.customDoc(this.id)">Science</button>
    <button id="is" onclick="google.script.run.customDoc(this.id)">Individuals and societies</button>
    <button id="spanish" onclick="google.script.run.customDoc(this.id)">Spanish</button>
    <button id="math" onclick="google.script.run.customDoc(this.id)">math</button>
  </body>
</html>

Tente executar o procedimento acima e clicar no botão ciência. Você deve obter um log de execução como:

Today: 10/30/2020
Subject: science
{preSubject=science for , [email protected]}

Agora que customDoc()está realmente em execução, você pode começar a tentar consertar a geração do Google Doc. Parece-me que você está criando um Documento Google completamente em branco, o que provavelmente não é o que você deseja. Acho que você precisa trabalhar mais nisso e depois voltar se tiver perguntas mais específicas sobre a geração do documento. Boa sorte!