J'ai un formulaire d'intégration qui place toutes les réponses dans une feuille Google qui a un script d'application en cours d'exécution pour ajouter un utilisateur à l'administrateur Google et à différents groupes en prenant les valeurs de la dernière ligne de la feuille. Cela fonctionne bien, c'est juste que je dois exécuter le script à chaque fois que le formulaire est rempli, donc je veux créer un déclencheur de formulaire.
Il était logique de créer un déclencheur de soumission de formulaire sur le script d'application attaché au formulaire Google et j'ai ajouté la bibliothèque et l'identifiant de script de l'autre appscipt et j'ai extrait une méthode à partir de là comme telle
// Create a form submit installable trigger
// using Apps Script.
function createFormSubmitTrigger() {
// Get the form object.
var form = FormApp.getActiveForm();
// Since we know this project should only have a single trigger
// we'll simply check if there are more than 0 triggers. If yes,
// we'll assume this function was already run so we won't create
// a trigger.
var currentTriggers = ScriptApp.getProjectTriggers();
if(currentTriggers.length > 0)
return;
// Create a trigger that will run the onFormSubmit function
// whenever the form is submitted.
ScriptApp.newTrigger("onFormSubmit").forForm(form).onFormSubmit().create();
}
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
function onFormSubmit() {
wait(7000);
AddingUserAutomation.createUserFromSheets()
}
Le problème est que j'obtiens l'erreur
TypeError: Cannot read property 'getLastRow' of null
at createUserFromSheets(Code:43:19)
My createUserFromSheets function is taking the active sheet
function createUserFromSheets(){
let data = SpreadsheetApp.getActiveSheet();
let row = data.getLastRow();
let firstname = data.getRange(row,2).getValue();
let lastname = data.getRange(row,3).getValue();
... etc etc
}
Je pense qu'il est incapable d'extraire la partie getActiveSheet, c'est pourquoi j'avais ajouté la fonction wait() sur formSubmit() mais cela ne fonctionnerait toujours pas.
Existe-t-il un moyen de résoudre ce problème ou une meilleure façon de le faire?
function createWorkspaceUser(recentResponse) {
console.log("Creating account for:\n"+recentResponse[1]);
debugger;
var user = {"primaryEmail": recentResponse[0] + '.' + recentResponse[1] + '@' + recentResponse[3],
"name": {
"givenName": recentResponse[0],
"familyName": recentResponse[1]
},
"password": newPassword(),
};
try {
user = AdminDirectory.Users.insert(user);
console.log('User %s created with ID %s.', user.primaryEmail, user.id);
}catch(err) {
console.log('Failed with error %s', err.message);
}
}
Je le fais de cette façon mais il exécute une erreur sur primaryemail
Solution du problème
Suggestion [MISE À JOUR]Comme mentionné par RemcoE33
Pour avoir une configuration plus simplifiée, ignorez peut-être la partie bibliothèque et faites tout le script (script lié ) dans votre formulaire Google lui-même.
Étant donné que nous n'avons pas la vue d'ensemble complète de votre formulaire Google actuel. Voir cet exemple ci-dessous comme référence :
Script de formulaire Google
function onFormSubmit() {
var form = FormApp.getActiveForm();
var count = 0;
var recentResponse = [];
var formResponses = form.getResponses();
for (var i in formResponses) {
count += 1;
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
for (var j = 0; j < itemResponses.length; j++) {
if(formResponses.length === count){ //Process only the recently submitted response
var itemResponse = itemResponses[j];
recentResponse.push(itemResponse.getResponse())
}
}
}
createWorkspaceUser(recentResponse);
}
function createWorkspaceUser(recentResponse){
console.log("Creating account for:\n"+recentResponse[2]);
var user = {"primaryEmail": recentResponse[2],
"name": {
"givenName": recentResponse[0],
"familyName": recentResponse[1]
},
"password":recentResponse[3],
"orgUnitPath":recentResponse[4]
};
try{
user = AdminDirectory.Users.insert(user);
console.log('User %s created with ID %s.', user.primaryEmail, user.id);
}catch (err) {
console.log('Failed with error %s', err.message);
}
}
REMARQUE: vous n'avez plus besoin de créer un on form submit
déclencheur puisque leonFormSubmit()
fonction s'exécutera automatiquement juste après avoir appuyé sur le bouton d'envoi.
1. Soumettez les données utilisateur à partir d'un exemple de formulaire :
2. Un compte utilisateur test sera créé sur les utilisateurs de la console d'administration Workspace :
Référence
- https://developers.google.com/apps-script/reference/forms/form-response
- https://developers.google.com/apps-script/guides/triggers
Aucun commentaire:
Enregistrer un commentaire