Apps Script : Connaître l'id d'un champ GoogleForm afin de le pré-remplir

Bonjour à tous.

C’est mon premier message, et je suis bien content de trouver un tel forum francophone.

Le script de se trouvant dans mon Google sheet construit une URL sur base de celle d’un formulaire et d’une clé unique.

var key = Utilities.getUuid();

Cela donne quelque chose qui ressemble à ceci :

var url = ‹ https://docs.google.com/forms/d/e/IdFormulaireClient/viewform?usp=pp_url&entry.1375139745= › + encodeURIComponent(key);

Lorsque mon client clique sur le lien, cela ouvre son formulaire et devrait remplir le champ 1375139745 avec la clé.

Mais cela ne fonctionne pas.

Comme je n’ai pas trouvé facilement l’identifiant du champ « clé », j’ai utilisé ce script :

function getFormFieldIds() {
var form = FormApp.openById(‹ IdFormulaireAdmin ›);
var items = form.getItems();
for (var i in items) {
Logger.log('Title: ’ + items_.getTitle() + ', ID: ’ + items.getId());
}
}

Vous remarquerez au passage que je distingue d’une part l’identifiant du formulaire que j’ai en tant qu’administrateur (c’est-à-dire qu’éditeur), et d’autre part l’identifiant du formulaire de mon client.

Lorsque j’exécute mon script, j’obtiens ceci :

10:05:56 Infos Title: Clé du client, ID: 1375139745
10:05:56 Infos Title: , ID: 761264255
10:05:56 Infos Title: Civilité, ID: 2004664087
10:05:56 Infos Title: Prénom, ID: 1178533075
10:05:56 Infos Title: Nom, ID: 374041494
etc.

Dans le formulaire client, le champ de la clé n’est pas obligatoire, c’est un texte du type « réponse courte ». J’ai donc mis toutes les chances de mon côté pour que le contenu puisse être inséré.

J’ai tout essayé, y compris en navigation privée, et en inscrivant directement l’URL dans le navigateur.


_

Bonjour !

Je ne sais pas exactement ce qui coince de votre côté, mais je vous propose ce code que j’ai testé sur un de mes formulaires et marche très bien :

function getPrefilledURL() {
  // On récupère le formulaire
  const form = FormApp.openById(formID)

  // On récupère la question (item) qui nous intéresse, ici c’est la première.
  const idItem = form.getItems()[0].asTextItem();

  // On génère la clé ID aléatoire à pré-remplir
  const key = Utilities.getUuid();

  // On crée la réponse à la question
  const idItemResponse = idItem.createResponse(key);

  // On crée une "réponse" au formulaire qui va nous donner l’adresse pré-remplie
  const prefilledURL = form.createResponse()
                      .withItemResponse(idItemResponse)
                      .toPrefilledUrl();

  // On affiche dans la console pour vérification (identique à Logger.log() )
  console.log(prefilledURL);

  // On renvoie l’URL pour l’utiliser ailleurs dans le code
  return prefilledURL;
}

À noter que cette version présuppose que vous connaissez l’emplacement exacte de la question dans la liste des questions (ici, l’ID à remplir est la première, c’est donc à l’index 0), mais une version plus complexe de ce code récupérant la question en se basant sur son intitulé est aussi tout à fait possible. De la même manière, vous pouvez simplement ajouter un autre .withItemResponse(newItemResponse) si vous avez besoin de remplir plus de champs !

Je vous laisse tester, dites-moi si ça fonctionne !