Alle prese con il caricamento collettivo degli utenti in Google Workspace, ci si imbatte spesso nel problema di gestire gli username duplicati che derivano dalle omonimie. E sappiamo che la console interpreta questa situazione non come un errore, ma come una nostra volontà di aggiornare l’utente in questione, piuttosto che crearne uno nuovo. Talvolta questo ci fa risparmiare molto tempo – se vogliamo aggiornare massivamente tutti o un gruppo di utenti. Altre volte invece, per una ‘svista’, crea problemi inattesi che dobbiamo poi risolvere manualmente.
Abbiamo già affrontato il problema tempo fa, proponendo una soluzione semi-automatizzata, che richiede comunque di lavorare su più fogli di lavoro. Ho ripreso in mano il tutto, e preparato un foglio che semplifica la procedura, riunendo le varie fasi in un’unica operazione.
La nuova procedura in sintesi
Questa, in sintesi, la novità. Nel nuovo foglio il controllo di eventuali duplicati (omonimi già presenti in piattaforma) avviene prima della generazione del file csv.
L’admin – o chi per lui – inserisce nel foglio nome e cognome degli utenti (volendo anche altri dati come plesso e classe, vedi sotto). Le formule nel foglio generano automaticamente tutti i dati necessari per il csv. A questo punto una funzione nel foglio fa partire la generazione del csv. Lo script scorre ogni username generato dalle formule, e verifica se esiste già in piattaforma. In caso affermativo, modifica lo username aggiungendo il suffisso numerico .02 (volendo si può modificare lo standard). Quindi ripete la verifica per il nuovo username: se trova nuovamente un duplicato, incrementa il suffisso numerico fino a trovare uno username libero.
Solo quando non ci sono più potenziali conflitti vengono generati i dati definitivi per il csv, e scritti nel foglio dedicato. Non resta che scaricare i dati nel formato csv e caricarli in piattaforma, senza ulteriori problemi.
Istruzioni veloci
Se non hai bisogno di indicazioni dettagliate, che trovi sotto, ecco in sintesi cosa c’è da fare per utilizzare il foglio:
- crea una copia del fogli nel tuo Drive (vedi link più in basso)
- dal menu personalizzato Genera CSV scegli Impostazioni primo utilizzo, e concedi le autorizzazioni
- personalizza le formule, in particolare la struttura dello username in H2 e la struttura delle unità organizzative in J2, e copia le formule per tutto il foglio (per altre modifiche, vedi le avvertenze più in basso)
- inserisci i dati nel foglio generazione utenti (usa le prime 5 colonne, o eventualmente solo le prime 2)
- nel menu Genera CSV scegli genera dati CSV
- vai nel foglio per csv, scarica i dati in formato .csv e caricali in console di amministrazione
Preparazione del foglio
Se ti è sufficiente utilizzare il foglio, e non ti interessa approfondire o modificare lo script che ne gestisce il funzionamento, puoi seguire queste prime indicazioni e sei pronto per partire.
Questo foglio è pensato specificamente per gli alunni. Per loro la creazione dell’unità organizzativa può essere leggermente più articolata. Con poche modifiche puoi adattarlo anche per la creazione degli altri utenti della tua scuola.
Copia del file ed impostazioni iniziali
Copia il foglio di lavoro nel tuo Drive, cliccando su questo link (assicurati di usare un browser in cui hai fatto l’accesso a Google con il tuo account Workspace di amministratore):
Creazione csv caricamento utenti – con controllo preliminare duplicati
Nella scheda che si apre, scegli Crea una copia. Eventualmente, potrai poi rinominare il file.
Attendi che accanto alla voce Guida compaia il nuovo menu Genera CSV, quindi scegli Impostazioni primo utilizzo. Alla richiesta di impostare le autorizzazioni clicca su Continua.
Scegli ora l’account di amministratore, ed acconsenti alle richieste. Nel dubbio se hai già impostato le autorizzazioni o meno, puoi ripetere l’operazione senza problemi. Se lo hai già fatto in precedenza, non ti verranno chieste nuovamente le autorizzazioni.
Nel primo foglio di lavoro trovi indicazioni dettagliate sia per quanto visto finora, sia per i prossimi passaggi.
Personalizza il formato del nome utente
Prima di tutto devi modificare la formula per la generazione del nome utente, che si trova nella cella H2. Nel foglio viene utilizzato il formato nome.cognome@dominioscuola.it: se questo formato va bene, sostituisci solamente il testo all’interno delle virgolette “dominioscuola.it” con il dominio della tua scuola. Se invece utilizzate un formato diverso, modifica la parte di formula che concatena i dati in base alle tue esigenze. Fai attenzione a modificare solamente la parte all’interno della parentesi della funzione replaceDiacritics:
replaceDiacritics(F2&"."&G2&"@dominioscuola.it")
Sostituisci F2&”.”&G2&”@dominioscuola.it” con quello che ti serve. Non toccare il resto della formula, perché compie operazioni utili di normalizzazione del nome utente:
- sostituisce le accentate con le corrispondenti non accentate
- elimina gli spazi
- elimina gli apostrofi (presenti ad esempio in alcuni cognomi)
- riduce tutto a caratteri minuscoli
- verifica che siano presenti sia nome che cognome, prima di generare lo username
Quando hai personalizzato la formula, testala, poi riportala per le righe successive. Il foglio ha formule per la creazione di 100 utenti (quindi fino a riga 101), estendile tu a piacere se ti serve.
Personalizza il formato del percorso unità organizzativa
Nella cella J2 viene generato il percorso dell’unità organizzativa. Questo dato in realtà è molto variabile, e diversificato a seconda della gerarchia delle UO che ogni scuola ha strutturato nel tempo. Qui viene proposta una struttura standard per il primo ciclo (normalmente più articolato), in cui gli utenti alunni si posizionano in una unità organizzativa dalla struttura tipo /Alunni/OrdineScuola/Plesso/Classe. La formula di J2 concatena i dati inseriti nelle colonne del foglio relative per ottenere il percorso dell’UO in automatico.
Adatta questa formula alla struttura delle UO della tua piattaforma. In alcuni casi potresti preferire un inserimento diretto del dato invece della formula. Alcune scuole inseriscono tutti gli alunni nella stessa UO, o li diversificano solo per ordine di scuola: in questi casi la formula è superflua. Se non usi i dati di ordine di scuola, plesso e classe puoi tranquillamente eliminare tutte (o alcune di) queste colonne.
Al contrario, se ti servono dati diversi, o più colonne, puoi modificare le intestazioni di queste 3 colonne o aggiungerne quante vuoi. Tiene presente che per il corretto funzionamento dello script:
- le prime due colonne devono rimanere Nome e Cognome
- le colonne dalla F in poi (intestazione nome csv) devono rimanere per ultime, in questo ordine e con quelle precise intestazioni
Se quindi vuoi aggiungere, modificare o eliminare colonne, devi farlo in quello spazio tra la colonna Cognome e la colonna nome csv.
Inserisci i dati degli utenti
Inserisci i dati utente nelle colonne relative del foglio generazione utenti. Se usi la struttura proposta, completa le prime 5 colonne; diversamente, inserisci i dati a seconda delle modifiche che hai apportato al foglio.
Puoi inserire nome e cognome con la combinazione di maiuscole/minuscole che preferisci. Le formule del foglio normalizzeranno questi dati in modo che nome e cognome visualizzati abbiano solo l’iniziale maiuscola. Questo ti permette di fare copia/incolla di nome e cognome dalle liste che la segreteria, il gestionale o SIDI ti forniscono – e capita che siano tutte in maiuscolo – senza doverci mettere mano. Se utilizzi le colonne Ordine scuola, Plesso e Classe (o gli analoghi da te impostati), fai attenzione ad inserire maiuscole, minuscole e spazi. Devono corrispondere esattamente alla grafia adottata in console per nominare le relative unità e sotto-unità organizzative. Diversamente riceverai un errore in fase di caricamento del file in console.
Non scrivere direttamente nelle altre celle del foglio: contengono le formule per la generazione automatica dei dati, se le sovrascrivi smetteranno di funzionare. Ciò non vale ovviamente per le modifiche intenzionali indicate sopra (ad esempio UO impostata a mano, anziché con formula).
Una nota sulla password
La cella password utilizza una funzione definita all’interno dello script. Genera una password casuale di 10 caratteri, presi dalla lista della variabile caratteriPassword (la trovi anche più sotto, nel codice alla riga 34).
var caratteriPassword = "123456789ABCDEFGHJKLMNPQRSTUVWXTZabcdefghikmnopqrstuvwxyz?!-#";
Se hai necessità di farlo, la lista è modificabile senza conseguenze per lo script.
Nota che:
- sono stati eliminati alcuni caratteri di facile confusione per gli utenti (‘i’ maiuscola ed ‘elle’ minuscola, ‘o’ maiuscola e zero…)
- è presente un set limitato di caratteri speciali, più semplici da digitare sulla maggior parte delle tastiere
- la casualità assoluta per un computer non esiste, ma questa funzione è una buona approssimazione, più che adeguata allo scopo di creare una password temporanea
Genera i dati per il file .csv
Quando il foglio generazione utenti è pronto, clicca sul menu Genera CSV, e scegli genera dati CSV. In pochi secondi il foglio per csv verrà completato con i dati per il caricamento in piattaforma. Sostanzialmente trovi gli stessi dati del foglio precedente, ad eccezione del nome utente.
Quando avvii la funzione, lo script scorre ogni username generato dalle formule del primo foglio, e verifica se è già in uso per un altro utente sulla piattaforma. Se non lo è, viene mantenuto immutato. Se invece è già utilizzato, lo script modifica lo username aggiungendo un suffisso numerico, in modo che diventi del tipo nome.cognome.02@dominioscuola.it. A questo punto lo script ripete la verifica, e se di nuovo lo username è in uso (raro, ma possibile) incrementa il suffisso numerico di 1; così via fino a che viene trovato un nome utente libero.
Tutto questo avviene senza il tuo intervento: nel csv vedrai direttamente gli username con suffisso in caso di omonimi già esistenti, e tu non dovrai rinominare manualmente nessun utente. Questo meccanismo progressivo, tra l’altro, economizza gli username progressivi anche per il futuro. Immaginiamo che per uno username della tua scuola siate arrivati alla numerazione 05. L’anno prossimo è in uscita l’alunno senza suffisso numerico, oppure quello con il suffisso 02. Tra due anni un eventuale ulteriore username omonimo non prenderà il suffisso 06, ma riprenderà lo username senza suffissi (primo caso), oppure quello con suffisso 02 (secondo caso).
Utilizza il csv generato
Ora tutto è pronto. Posizionati nel foglio per csv, clicca su File > Scarica > Valori separati da virgola (.csv, foglio corrente). Carica il file in console di amministrazione senza fare altro, e gli utenti verranno creati. In caso di errore, scarica il log (icona della clessidra in alto a destra), e cerca il tipo di errore. Molto spesso potrai rimediare con un piccolo intervento sui dati del foglio, o sulle formule che li generano.
Il codice
Se sei interessato al codice che gestisce il funzionamento del foglio, puoi aprirlo dal menu Strumenti > Editor di script. Attenzione, ogni modifica anche minima al codice potrebbe compromettere il funzionamento di tutto il foglio: modifica solo con consapevolezza.
Per comodità, riporto anche qui sotto il codice (in caso di modifiche o cancellazioni accidentali, puoi fare copia/incolla da qui per riportare lo script allo stato originale).
// crea il menu personalizzato nel foglio di lavoro function onOpen() { var ui = SpreadsheetApp.getUi(); ui.createMenu('Genera CSV').addItem('Impostazioni primo utilizzo', 'primoUtilizzo').addItem('Genera dati CSV', 'generaCsv').addToUi(); } // sostituisce le accentate con le corrispondenti non accentate // viene utilizzata direttamente nelle celle del foglio, all'interno della formula per creare lo username function replaceDiacritics(rng) { var ACCENTED = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÕÖØòóôõöøÈÉÊËèéêëðÇçÐÌÍÎÏìíîïÙÚÛÜùúûüÑñŠšŸÿýŽžęłćń诹żŁ'; var REGULAR = 'AAAAAAaaaaaaOOOOOOOooooooEEEEeeeeeCcDIIIIiiiiUUUUuuuuNnSsYyyZzelcncZazL'; var REGEXP = new RegExp('[' + ACCENTED + ']', 'g'); function replace(match) { var p = ACCENTED.indexOf(match); return REGULAR[p]; } if (typeof rng === 'object' && rng.length !== undefined) { // if rng is an array return rng.map(function (cell) { return replaceDiacritics(cell); }); } else { return rng.replace(REGEXP, replace); } } // genera una password casuale di 10 caratteri, presi dalla lista della variabile caratteriPassword // la lista è modificabile senza conseguenze per lo script // sono stati eliminati alcuni caratteri di facile confusione per gli utenti ('i' maiuscola ed 'elle' minuscola, 'o' maiuscola e zero...) // è presente un set limitato di caratteri speciali, più semplici da digitare sulla maggior parte delle tastiere function generaPassword() { var pw = ''; var caratteriPassword = "123456789ABCDEFGHJKLMNPQRSTUVWXTZabcdefghikmnopqrstuvwxyz?!-#"; for (var j = 0; j < 10; j++) { var posizioneCasuale = Math.floor(Math.random() * caratteriPassword.length); pw += caratteriPassword.substring(posizioneCasuale, posizioneCasuale + 1); } return pw; } // genera i dati per il csv e li scrive nel foglio relativo // verifica eventuali username duplicati, e nel caso apporta le modifiche necessarie function generaCsv() { var foglio = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('generazione utenti'); var datiIntestazione = foglio.getRange(1, 1, 1, foglio.getLastColumn()).getValues(); var colonnaIniziale; for (c = 0; c < datiIntestazione[0].length; c++) { if (datiIntestazione[0][c] === 'nome csv') { colonnaIniziale = c + 1; } } var datiFoglio = foglio.getRange(2, colonnaIniziale, foglio.getLastRow() + 1, 5).getValues().filter(x => x[0] !== '').map(y => y.concat("TRUE")); for (i = 0; i < datiFoglio.length; i++) { let username = datiFoglio[i][2]; var duplicato; var nuovoUsername = username; // verifica se lo username generato dalle formule è già utilizzato in piattaforma do { Logger.log(nuovoUsername); // se è username duplicato, aggiunge suffisso numerico ed effettua nuovamente la verifica // se di nuovo username duplicato, incrementa il suffisso numerico fino a trovare uno username libero try { duplicato = AdminDirectory.Users.get(nuovoUsername); let usernameParziale = nuovoUsername.split("@")[0]; if (usernameParziale.split(".")[2]) { let nuovoProgressivo = ('0' + (parseInt(usernameParziale.split(".")[2]) + 1)).substring(-2); nuovoUsername = `${usernameParziale.slice(0, -3)}.${nuovoProgressivo}@${nuovoUsername.split('@')[1]}`; } else { nuovoUsername = `${usernameParziale}.02@${nuovoUsername.split('@')[1]}`; } } // se non viene trovato duplicato, interrompe il ciclo e continua con il resto dello script catch (e) { duplicato = false; } } while (duplicato) Logger.log(nuovoUsername); if (nuovoUsername !== username) { datiFoglio[i][2] = nuovoUsername; } } // scrive i dati sul foglio var foglioCsv = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('per csv'); var intestazioni = foglioCsv.getRange(1, 1, 1, foglioCsv.getLastColumn()).getValues(); foglioCsv.clear(); SpreadsheetApp.flush(); foglioCsv.getRange(1, 1, 1, intestazioni[0].length).setValues(intestazioni); foglioCsv.getRange(2, 1, datiFoglio.length, datiFoglio[0].length).setValues(datiFoglio); } // funzione di impostazione autorizzazioni // la funzione è vuota, in quanto serve solo a richiamare la finestra delle autorizzazioni function primoUtilizzo() { }
Per agevolare le operazioni di cambio anno scolastico, sto ultimando un foglio per la rimozione degli utenti filtrati per gruppo di appartenenza. Questa operazione, non direttamente possibile da console di amministrazione, può risultare particolarmente utile per eliminare gli alunni delle classi in uscita, se non sono già inseriti un unità organizzative che ricalcano le classi.
Per le scuole che invece inseriscono gli alunni in unità organizzative per classe, può risultare un doppio lavoro gestire ingressi e uscite dei singoli alunni modificando ogni volta sia l’unità organizzativa che il gruppo. Per questo scenario sto preparando uno script che simula i gruppi dinamici, attualmente disponibili sono per le versioni di Google Workspace a pagamento. Attivando lo script, basterà aggiungere o togliere gli alunni dalle unità organizzative classe, e di conseguenza verranno aggiunti o rimossi anche dai rispettivi gruppi classe.
Pubblicherò qui i due lavori non appena pronti. Se vuoi rimanere aggiornato, puoi iscriverti alla Newsletter.
ciao. ho cercato di seguire le tue istruzioni, ma non mi carica il file. mi dice che nelle righe ci sono errori. ho modificato il nome del dominio e ho forzato la stessa password per tutti gli studenti. non ho modificato l’Unità organizzativa che per noi è solo Alunni (nel file viene scritto /Alunni///. dove sbaglio? grazie mille per la pazienza
ciao Germana. sicuramente il problema è nell’unità organizzativa, così com’è ora ti da errore. se hai tutti gli alunni nell’unità organizzativa Alunni, che non è contenuta in nessun’altra uo di livello superiore, cambia la colonna che calcola l’unità organizzativa. non ti serve la formula, scrivi direttamente /Alunni (solo slash iniziale, non finale) e la copia per tutte le righe necessarie. così quel problema è risolto, se caricando ti dovesse dare altri problemi posta l’errore preciso che vediamo
grazie ho risolto da sola. c’era un errore nel nome dell’unità organizzativa di cui non mi ero accorta. ha funzionato tutto benissimo
a me compare questa scritta
Formato file non corretto o nome colonna “Nome” sconosciuto
ciao Maria, forse stai cercando di scaricare il file in formato .csv quando ti trovi sul foglio ‘generazione utenti’. se è così, posizionati invece sul foglio ‘per csv’ come da istruzioni, scarica in formato .csv e poi carica in piattaforma. non dovresti più trovare quell’errore
Buonasera, quando trova un nome già esistente non funziona. Esempio: Antonio Sanzo già esistente, mi da questo: antonio.sanz.0NaN@iischiaravalle.edu.it. Come posso risolvere? Grazie.
buonasera Marcello. per caso hai messo mano al codice nello script per tentare qualche modifica?
No, assolutamente, ho solo eliminato la colonna Plesso, modificato la formula che crea lo user perché io uso nome.cognome.s@dominio.it e cancellato la formula della password, perché io uso “cambiami” per tutti, ma no nello script, nel foglio.
capito. la modifica che hai fatto richiede anche un adattamento nello script perché funzioni correttamente. una domanda prima di indicarti: in caso di duplicati in quale formato vorresti il secondo ‘omonimo’? forse troppo spezzettato non è comodo. sottintendendo il @dominio.it sono possibili ad esempio nome.cognome.02.s, nome.cognome02.s (senza un punto), nome.cognome.s.02, o forse ne hai in mente uno più comodo. se mi dici quale vorresti, ti do indicazioni precise per modificare lo script. cambiando un paio di righe sistemi velocemente
Ho modificato a mano in questo modo: nome.cognome.02.s quindi mi conviene continuare così. Mille grazie, gentilissimo. Buona serata, e complimenti per l’ottimo lavoro che hai fatto.
Scusa volevo precisare che la colonna che ho eliminato è: “ordine scuola” e non “plesso”.
bene. se in futuro ne hai bisogno ancora e vuoi automatizzare il tutto, come prevedeva lo script originale, nel tuo caso basta modificare le righe dalla 71 alla 76 sostituendole con queste:
if (usernameParziale.split(".")[3]) {
let nuovoProgressivo = ('0' + (parseInt(usernameParziale.split(".")[2]) + 1)).substring(-2);
nuovoUsername = `${usernameParziale.split(".")[0]}.${usernameParziale.split(".")[1]}.${nuovoProgressivo}.${usernameParziale.split(".")[3]}@${nuovoUsername.split('@')[1]}`;
} else {
nuovoUsername = `${usernameParziale.split(".")[0]}.${usernameParziale.split(".")[1]}.02.${usernameParziale.split(".")[2]}@${nuovoUsername.split('@')[1]}`;
}
Se fai copia/incolla del codice dal commento, controlla gli eventuali spazi o a capo aggiuntivi che dovessero crearsi.
Grazie mille, l’ho provato e funziona perfettamente. Buona giornata.
Buongiorno, intanto ringrazio per aver condiviso una preziosa risorsa (soprattutto per chi come me è a digiuno di Apps script). Io avrei bisogno di inserire anche l’indirizzo privato dell’utente, da caricare nel foglio csv, come potrei fare? grazie
Buona sera
Ho testato lo script modificando alcune cose per adattare la generaizone degli utenti ai criteri in uso nel mio istituto:
– ho eliminato le colonne ORDINE SCUOLA – PLESSO – CLASSE;
– nella colonna NOME CSV ho inserito il cognome, tutto in maiuscolo;
– nella colonna COGNOME CSV ho inserito il nome, tutto in maiuscolo;
– nella formula per la generazione degli indirizzi ho invertito le colonne C e D;
– Ho sostituito la formula per la password con una password inventata da me, che è uguale per tutti;
– per la colonna UNIA’ ORGANIZZATIVA ho creato un menù a tendina con l’elenco delle unità fra cui scegliere.
I test hanno dato tutti buon esito, l’unica cosa che non funziona è il riconoscimento degli utenti duplicati.
Scorrendo i commenti, ho trovato un utente che aveva avuto il medesimo problema dopo aver fatto delle modifiche simili alle mie: posso usare anche nel mio caso il codice modificato che aveva mandato all’altro utente? In quel caso, dove lo devo copiare/incollare?
La ringrazio per l’attenzione, buona serata!
bisogna anzitutto capire il problema preciso. dà un errore? se sì, quale? o la procedura va avanti creando nuovi utenti anche se esistono duplicati? o sbaglia il formato del nome utente non duplicato? serve qualche dettaglio in più
La procedura va avanti creando nuovi utenti duplicati. Ho fatto alcuni test, inserendo utenti di prova omonimi intenzionalmente: lo script genera correttamente gli indirizzi, ma senza differenziare con i numeri progressivi.
domanda che può essere dirimente per capire: come hai inserito i duplicati intenzionali? a. in console c’era già pinco.pallino@miodominio.it, e tu hai caricato dal csv utente con username uguale; b. in console non c’era pinco.pallino, e tu hai caricato nel csv due utenti con username pinco.pallino. quale dei due scenari? così proviamo a circoscrivere il problema
Buonasera Daniele,
ho utilizzato il tuo script per il caricamento massivo dei nuovi studenti per le classi prime della secondaria di primo grado. Nessun problema con i nuovi arrivati, tutto funziona benissimo. Tuttavia, ovviamente, generando il csv a partire dagli elenchi integrali della segreteria, sorge il problema dei duplicati. Con duplicati intendo non i casi di omonimia, ma di esistenza in console degli utenti stessi presenti in elenco. Attivando lo script infatti, giustamente, riconosce la presenza di alcuni studenti già appartenenti all’Istituto Comprensivo e, identificandoli però come nuovi utenti duplicati, genera i nuovi account nome.cognome.02@dominio.it (tutto come previsto!).
Ma non ho trovato ciò del tutto adattabile al mio caso.
Ho dovuto separare manualmente gli utenti esistenti da quelli nuovi: lavorare sugli elenchi della segreteria, guardando la provenienza degli alunni classe per classe, eliminare dal file dei nuovi inserimenti quelli esistenti per poi generare un nuovo csv, ai fini di variare massivamente le unità organizzative da primaria a secondaria di questi ultimi. Un lavoraccio insomma.
Vorrei chiederti se lo script possa essere modificato in modo tale da non produrre un clone.02 dell’account esistente, ma comportarsi procurando solo una variazione di posizionamento di questi account. Il tal modo, con un solo caricamento e le liste degli iscritti alle classi prime fornite della scuola, forse avrei ottimizzato il lavoro. Non è una soluzione completa, lo so, perchè poi sorgerebbe il problema dei duplicati reali, ma non mi sono venute alle mente altre soluzioni…
Non avendo mai gestito la creazione degli account da admin, sono un po’ inesperta e mi piacerebbe sapere come avresti risolto il problema. Grazie mille.
ciao Giulia. scenario completo e complesso, il tuo. diciamo che il tuo modo di lavorare sarebbe quello ideale: fare un confronto con un elenco completo, e a partire da quello spostare gli esistenti e generare i nuovi, il tutto automatizzato. bypassa però il problema che resta, ed è molto importante, dei potenziali omonimi. che se non gestiti in anticipo, possono comportare situazioni molto delicate (pensa ad es. se un nuovo alunno è omonimo del dsga… viene in possesso di tutto ciò che ha prodotto precedentemente!). la vera soluzione sarebbe spostare il controllo dell’univocità degli utenti su un altro dato, ad esempio il codice fiscale: a differenza del nome.cognome, non ammette duplicati. da me faccio così, ma va progettata una gestione enormemente più complessa del tutto (archiviarlo in un campo personalizzato, e criptato – perchè in chiaro non si può – gestire i confronti successivi… si fa ma bisogna lavorarci in modo consistente e personalizzato). per ottimizzare sulla tua situazione, potresti aprire lo script allegato al foglio (Estensioni > Apps script) e semplicemente sostituire la parte di codice che fa questo lavoro: tagli esattamente dalla riga 58
for (i = 0; i < datiFoglio.length; i++) {
alla riga 93, quella che precede la riga
// scrive i dati sul foglio
(quest'ultima deve rimanere). al posto del codice eliminato inserisci questo:
for (i = 0; i < datiFoglio.length; i++) { let username = datiFoglio[i][2]; // verifica se lo username generato dalle formule è già utilizzato in piattaforma, e decide se lasciare password invariata try { AdminDirectory.Users.get(username); Logger.log(`l'utente ${username} è già esistente, non modifico la password`); datiFoglio[i][3] = '****'; datiFoglio[i][5] = 'FALSE'; } catch (e) { Logger.log(`l'utente ${username} è un nuovo utente`); } }
poi clicchi con il tasto destro al centro dell'area in cui scrivi (un punto a caso) e scegli Formatta documento, quindi salvi in alto con l'icona.
questa modifica del codice fa in modo che se viene trovato un utente già esistente in piattaforma, la sua password non viene sostituita con quella generata dal foglio, ma viene rimpiazzata dai 4 asterischi (che è la sigla in codice per il csv per non modificare la password), altrimenti oltre a spostare i vecchi utenti, reimposteresti la password a tutti. tieni presente però che devi gestire in anticipo i possibili omonimi reali, altrimenti crei pasticci anche grandi. appena ho un attimo di tempo creo una variante del foglio proposto ed inserisco questa seconda possibilità tra i file che si possono scaricare direttamente, con il codice modificato come ti ho scritto qui. per ora puoi fare anche da sola come indicato
Ti ringrazio del suggerimento.
Tutto davvero molto complesso, non so se è alla mia portata. Provo e ti darò riscontro se riesco a risolvere il problema.
Ti ringrazio del suggerimento.
Tutto davvero molto complesso, non so se è alla mia portata. Sarebbe davvero interessante capire come strutturare parsonalizzando la piattaforma. Provo intanto questa soluzione di compromesso e ti darò riscontro se riesco a risolvere il problema.