Fonction non exécutée dans le service HTML de script google

Oct 30 2020

Je suis en train de coder un outil pour moi-même et mes camarades de classe qui créera un google doc et l'envoyer par e-mail au professeur sélectionné, en utilisant tous les champs qui sont remplis et en remplissant tous ceux qui ne sont pas avec les valeurs par défaut pour le sujet sélectionné, par exemple les arts du langage mais la fonction qui prend les informations sélectionnées et les utilise pour envoyer l'e-mail ne s'exécute pas. J'ai vérifié les exécutions pour le projet et la fonction,, customDoc()n'a pas été exécutée une seule fois. Je soupçonne que c'est un problème avec mon HTML, car je n'ai vu aucun message d'erreur lorsque j'ai testé la fonction dans l'éditeur pour voir s'il y avait des erreurs de syntaxe, mais c'était impeccable, mais jamais exécuté. Voici mon code, et bien que l'erreur soit probable dans le HTMl, je fournirai également mon JS.

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>

Réponses

1 Diego Oct 31 2020 at 01:49

En bref, il customDoc()s'agit d'une fonction serveur et vous devez l'utiliser google.script.runpour indiquer à Apps Script d'exécuter une fonction serveur spécifique. Alors au lieu d'appeler onclick="customDoc(this.id)", essayez onclick="google.script.run.customDoc(this.id)". N'incluez pas Code.gs dans votre fichier HTML car c'est du code côté serveur et cela ne fonctionnera pas. Je recommande vivement de lire le guide de communication client-serveur .

Votre customDoc()fonction est une autre histoire :) Voici un moyen très simple de réorganiser vos différents préréglages (par exemple des sujets) à l'aide d' objets . J'ai également remplacé votre code de mise en forme de la date par Utilities.formatDate(), qui peut être un peu plus facile à comprendre.

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>

Essayez d'exécuter ce qui précède et cliquez sur le bouton Science. Vous devriez obtenir un journal d'exécution comme:

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

Maintenant que cela customDoc()est en cours d'exécution, vous pouvez commencer à essayer de corriger la génération de Google Doc. Il me semble que vous créez un document Google complètement vierge, ce qui n'est probablement pas ce que vous voulez. Je pense que vous devez y travailler un peu plus et revenir ensuite si vous avez des questions plus spécifiques sur la génération du document. Bonne chance!