2
votes

Comment obtenir tous les déclencheurs de formulaire (pas seulement pour le script actuel)?

J'ai fait ce qui suit:

  1. Création d'un formulaire Google (par exemple, form ID = ABC)
  2. Création d'une feuille Google (appelons-la sheet1)

Dans l'éditeur de script de sheet1, j'ai installé un déclencheur dans mon formulaire avec un code tel que le suivant:

ScriptApp.getUserTriggers(form);

Quand j'appelle ce qui suit, je vois mon déclencheur a été installé correctement:

ScriptApp.newTrigger("testFunctionSheet2").forForm(form).onFormSubmit().create();

Tout va bien. Je peux exécuter du code chaque fois qu'un formulaire Google est soumis.

Le problème est que, plus tard, je crée une nouvelle feuille Google (appelons-la sheet2), qui a un code similaire:

ScriptApp.getUserTriggers(form);

Pour être sûr, cependant, j'essaye de supprimer tous les déclencheurs précédents de tous mes anciens scripts (ie sheet1). Cependant, lorsque je lance:

var form = FormApp.openById("ABC");
ScriptApp.newTrigger("testFunctionSheet1").forForm(form).onFormSubmit().create();

... il renvoie un résultat ( testFunctionSheet2 ) au lieu de renvoyer les deux testFunctionSheet1 et testFunctionSheet2 . Il s'avère que cela ne renvoie que les déclencheurs exécutés par le script actuel!

Ceci est problématique car cela peut signifier que j'ai accidentellement de nombreux scripts qui s'exécutent tous lors de la soumission d'un formulaire. Si je n'écrivais jamais quels scripts exécutent pour quels formulaires, je n'aurais aucune idée de ce qui est exactement exécuté à partir de chaque soumission. Certains de ces scripts peuvent soit faire la même chose (ce qui est au mieux un gaspillage de cycles CPU, soit interférer les uns avec les autres au pire), soit faire des choses complètement différentes et potentiellement entrer en conflit les uns avec les autres.

Je veux un moyen simple de trouver tous les déclencheurs de script qui seront exécutés lors de la soumission du formulaire. Quelque chose comme si la fonction se comportait réellement comme je m'y attendais ...

I.e. ScriptApp.getUserTriggers (formulaire) doit renvoyer quelque chose comme:

  • sheet1 : testFunctionSheet1
  • feuille2 : testFunctionSheet2

De cette façon, je peux facilement savoir quels scripts seront exécutés lors de la soumission du formulaire et supprimer manuellement les anciens, pour m'assurer que rien ne se heurte.

Existe-t-il un moyen de savoir quels déclencheurs s'exécutera sur tous mes scripts lors de la soumission du formulaire?


Mise à jour : la documentation de getUserTriggers () précise qu'il ne renverra jamais de déclencheurs pour différents scripts:

Obtient tous les déclencheurs installables appartenant à cet utilisateur sous la forme donnée, pour ce script ou module complémentaire uniquement. Cette méthode ne peut pas être utilisée pour voir les déclencheurs associés à d'autres scripts .

Comment, alors, pourrais-je connaître tous les déclencheurs associés à un formulaire Google donné? Remarque: cela ne doit pas nécessairement être une solution programmatique. S'il y avait un élément d'interface utilisateur dans Forms qui me fournissait ces informations, cela suffirait également.


0 commentaires

3 Réponses :


3
votes

Il ne semble pas y avoir de moyen de le faire, mais il existe des solutions de contournement qui peuvent rendre les choses un peu plus organisées:

  1. Au lieu d'installer le déclencheur de formulaire sur une feuille, installez-le sur le formulaire. Si vous prenez cette habitude, vous pouvez facilement savoir s'il y a des scripts installés car le premier endroit que vous vérifiez est dans le script du formulaire. Exécutez simplement la commande get all triggers comme vous l'avez essayé ci-dessus, et cela fonctionnera.

  2. Au lieu d'installer le déclencheur de formulaire sur un formulaire, définissez le formulaire pour qu'il envoie ses réponses à la feuille et utilisez la méthode onFormSubmit () dans SpreadsheetTriggerBuilder . Pour savoir quel déclencheur est associé à un formulaire devient aussi simple que d'ouvrir le formulaire, puis d'aller à sa destination, puis de chercher si ce script a un déclencheur pour le formulaire.

  3. Masquez les noms de script de déclenchement dans certaines propriétés du formulaire que vous ne prévoyez pas de montrer à l'utilisateur (par exemple, customClosedFormMessage ). Définissez-le sur quelque chose comme Ce script a un déclencheur actif associé à sheet1. Vous pouvez créer une fonction d'assistance qui, avant d'installer un déclencheur, garantit que le texte n'existe pas là (si vous souhaitez limiter à 1 déclencheur par formulaire, par exemple).


0 commentaires

1
votes

Comme l'OP l'a déjà mentionné sur la question, la documentation indique qu'un script ne peut pas obtenir les déclencheurs créés par d'autres scripts.

Si vous êtes le seul à créer des déclencheurs à partir de vos projets de script, accédez à https://script.google. com > Triggers, vous y trouverez une liste de tous les déclencheurs créés par votre compte.

Je ne l'ai pas encore essayé, mais je pense qu'une alternative consiste à activer l'API Google Apps Script sur les projets qui créent des déclencheurs et à ajouter une fonction à appeler via l'API Google Apps Script pour "consigner quelque part" les déclencheurs créé par ce projet.

En ce qui concerne "se connecter quelque part", le paramètre le plus simple est peut-être d'envoyer le journal par e-mail à "l'utilisateur actif".


0 commentaires

2
votes

Accédez à https://script.google.com/home/triggers ? trigger_type = 3 & document_id = ABC

Cela devrait donner une liste de tous les déclencheurs du formulaire avec l'ID ABC . Vous pouvez effacer les filtres et ajouter de nouveaux filtres.


2 commentaires

C'est très proche de ce que je recherche, mais cela semble ne fonctionner que pour les déclencheurs que j'ai installés. Idéalement, si quelqu'un d'autre a exécuté ce code qui installe le déclencheur sur le formulaire, je devrais également pouvoir voir son déclencheur dans la liste.


@Senseful Vous ne pouvez pas voir les déclencheurs de quelqu'un d'autre. Il ouvre des vulnérabilités de sécurité et son exploitation est facile. Les déclencheurs ne sont pas exactement associés au document. Il est plus lié à un compte utilisateur qu'à un document spécifique. Un compte donné ne peut pas voir les déclencheurs installés à partir d'un deuxième compte, même si le premier compte peut toujours activer ces déclencheurs.