Como restringir o envio de formulários do Google com base em duas identificações usando GAS no Formulário Google ou Planilhas Google

1
Sobhan Emami 2020-04-21 04:09.

Estou trabalhando em uma consulta do Formulário Google que coleta os votos dos participantes para uma determinada pergunta. Quero restringir os participantes com base no número de identificação. Eu estava pensando em três abordagens:

  1. Impedir o envio do formulário se o ID inserido não estiver na lista fornecida. (Eu prefiro essa abordagem, mas não consegui encontrar nenhum código útil para ela até agora)

  2. Exclua linhas na planilha de respostas vinculadas após o envio do formulário usando GAS no Google Form por meio do acionador onFormSubmit. Aqui está meu código que não está funcionando:

    function onFormSubmit(e) {
     // Grab the session data again so that we can match it to the user's choices.
    var response = [];
    var values = SpreadsheetApp.openById('1rT9tKAi6ZSvZzBaXNSPMJAt4RKnW- 
     9lqiE9zvZV').getDataRange().getValues();
    
    for (var i = 1; i < values.length; i++) {
      var indiv = values[I];
      var Fname = indiv[0];
      var Lname = indiv[1];
      var ID1 = indiv[2];
      var ID2 = indiv[3];
    
      // For every selection in the response, find the matching ID1 and title
      // in the spreadsheet and add the session data to the response array.
      if (e.namedValues[ID1] == ID1) {
        response.push(indiv);
      } else {
      Browser.msgBox('Your ID number does not matches the list');
      }
    }
    
  3. Exclua as linhas da planilha de respostas vinculadas após o envio do formulário usando GAS no Planilhas Google por meio do acionador onChange. Aqui está o meu melhor esforço:

    function onChange(e) {  
     var refvalues = 
     SpreadsheetApp.getActive().getSheetByName('members_sheet').getDataRange().getValues();
     var  sheet = SpreadsheetApp.getActive().getSheetByName('Form Responses 1');
     var  values = sheet.getDataRange().getValues();
    
     var indiv = values[values.length];
     var ID1 = indiv[2];
     var flag = 0;
      for (var i = 1; i < refvalues.length; i++) {
          var refindiv = refvalues[i];
          var refID1 = refindiv[2];
        if (ID1 == refID1) {
          flag = 1;
        }
     } 
    
     if (flag == 0) {
       sheet.deleteRow(values.length); 
     }
     };
    

Sou totalmente novo em codificação Javascript, então qualquer ajuda seria apreciada.

// ------------------------------------------------ ----------------------------- //

Graças à resposta ziganotschka, atualizo meu código para este:

function makeMultiForm() {
  var form = FormApp.create('Nazar Sanji')
                .setConfirmationMessage('Thank you! Your Vote have been 
    recorded');
  form.setTitle("Query");

  var ss = SpreadsheetApp.openById('1rT9tKAi6ZSvZzBaXNSPMJAt4RKnW- 
   9lqiE9zvZV5JJk');
  var ID1List = 
    ss.getSheetByName('members_sheet').getRange('C2:C4').getValues();//Ex [123 ; 555]
  var ID2List = 
    ss.getSheetByName('members_sheet').getRange('D2:D4').getValues();//Ex [aa ; bb]

  // Ex passwords: asd, 123, asd123
  const condition1 = ID1List.map(element => `${element}`).join('|') var IDarray =[]; //Add items to IDarray Ex [123aa ; 555bb] for(var i=0; i<ID1List.length; i++){ IDarray[i] = [ID1List[i][0]+ID2List[i][0]]; } const condition2 = IDarray.map(element => `${element}`).join('|')

  // Start by laying out the bare-bones structure.  This defines the different
  // sections, and the bare widgets in each section.
  // Note that you can't add any flow-routing details at this point, because
  // the destinations most likely haven't been defined yet

  var itemFName = form.addTextItem().setTitle('First Name').setRequired(true);
  var itemLName = form.addTextItem().setTitle('Last Name').setRequired(true);
  var itemID1   = form.addTextItem().setTitle('First ID').setRequired(true);

  // Create valid ation for this question matching the ID1(ID Melli) that we got from the sheet
  var ID1Validation = FormApp.createTextValidation()
.setHelpText('Enter a Valid First ID')
.requireTextMatchesPattern(condition1)
.build();
  itemID1.setValidation(ID1Validation);

  //var sectID2 = form.addPageBreakItem().setTitle("Second ID");
  var itemID2 = form.addTextItem().setTitle('Second ID').setRequired(true);

  // Create valid ation for this question matching the ID2(ID Shenasnameh) that we got from the sheet
  var ID2Validation = FormApp.createTextValidation()
.setHelpText('Second ID does not match the First ID')
.requireTextMatchesPattern(condition2)
.build();
  itemID2.setValidation(ID2Validation);


  var sectVote = form.addPageBreakItem().setTitle("Final Vote");
  var VoteOptions = form.addMultipleChoiceItem().setTitle("Which Competition");
  VoteOptions.setChoices([
  VoteOptions.createChoice("Option 1"),
  VoteOptions.createChoice("Option 2")]);

}

O problema recente é sobre ID2validation. Como a condição2 é a concatenação de dois números de ID, o participante deve inserir seus IDs mesclados (senhas) no último item de texto do Formulário Google que não está correto. (Ex. '123aa')

Como posso consertar isso?

2 answers

1
ziganotschka 2020-04-21 04:57.

Impedir o envio do formulário se o ID inserido não estiver na lista fornecida

  • A maneira mais fácil seria incorporar a validação de texto, você nem precisa codificar para isso
  • Basta escolher ao construir / editar a ID1questão Regular expression, matchese especificar todos os IDs que devem ser autorizados a enviar o formulário usando |como separador

Outras informações

  • Se você se sente motivado a incorporar a validação de texto de forma programática, dê uma olhada aqui e aqui
  • Se você preferir trabalhar em seu código já existente para excluir linhas - não importa se você anexa o script ao formulário ou à planilha, em ambos os casos você pode e deve usar o gatilho onFormSubmit(não onChange!)
  • Excluir linhas da folha de envio do formulário não funcionará - elas voltam no próximo envio do formulário
  • Copiar onFormSubmitas linhas com o ID correto para uma folha secundária pode funcionar, mas é mais complicado do que usar a validação de texto
0
Cooper 2020-04-21 06:37.

Se você preferir manter todos os ids em uma planilha, tente isso no início do seu código.

function onFormSubmit(e) {
  const ss=SpreadsheetApp.openById('your id');
  const idsh=ss.getSheetByName('id sheet');
  const idrg=ss.getRange(2,1,idsh.getLastRow()-1,1);
  const idA=idrg.getValues().map(function(r){return r[0];});
  if (idA.indexOf(e.namedValues['ID1'])==-1) {
    Browser.msgBox('Your ID number does not match the list');
    return;
  }
  //rest of your code here

}

Related questions

MORE COOL STUFF

Cate Blanchett dormiu com o marido depois de 3 dias juntos e ainda está casada com ele 25 anos depois

Cate Blanchett dormiu com o marido depois de 3 dias juntos e ainda está casada com ele 25 anos depois

Cate Blanchett desafiou os conselhos típicos de namoro quando conheceu o marido.

Por que Michael Sheen é um ator sem fins lucrativos

Por que Michael Sheen é um ator sem fins lucrativos

Michael Sheen é um ator sem fins lucrativos, mas o que exatamente isso significa?

Hallmark Star Colin Egglesfield Pratos Emocionantes Encontros de Fãs no RomaDrama Live! [Exclusivo]

Hallmark Star Colin Egglesfield Pratos Emocionantes Encontros de Fãs no RomaDrama Live! [Exclusivo]

A estrela da Hallmark Colin Egglesfield falou sobre emocionantes encontros com fãs no RomaDrama Live! além de seu programa INSPIRE na convenção.

Por que você não pode transmitir 'Exposição do Norte' online

Por que você não pode transmitir 'Exposição do Norte' online

Você terá que tirar o pó de um Blu-ray ou DVD player para ver por que Northern Exposure se tornou um dos programas mais populares dos anos 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

Como a matéria branca ajuda a função da matéria cinzenta do cérebro

Como a matéria branca ajuda a função da matéria cinzenta do cérebro

Todos nós já ouvimos falar da massa cinzenta do cérebro, mas e a massa branca? O que isso faz?

Doe seu cabelo para ajudar a manter nossa água limpa

Doe seu cabelo para ajudar a manter nossa água limpa

Aparas de cabelo de salões e doações pessoais podem ser reaproveitadas como tapetes que absorvem derramamentos de óleo e ajudam a proteger o meio ambiente.

Um olhar sobre os casamentos mais memoráveis ​​da Casa Branca

Um olhar sobre os casamentos mais memoráveis ​​da Casa Branca

Apenas algumas pessoas se casaram na Casa Branca nos últimos 200 anos. Quem eram eles e o que é necessário para marcar um casamento lá?

26 anos depois, filmagens de Sonic The Hedgehog's Infamous Macy's Parade Disaster

26 anos depois, filmagens de Sonic The Hedgehog's Infamous Macy's Parade Disaster

Qualquer um que seja um fã sério de Sonic, ou da Macy's Thanksgiving Day Parade, provavelmente está ciente do evento de 1993, no qual um carro alegórico do Sonic the Hedgehog foi pego por ventos fortes, atingiu um poste e feriu duas pessoas. A questão é que, apesar de saber que isso aconteceu, não tínhamos nenhum vídeo sobrevivente do incidente.

O prefeito de Miami-Dade ordena que as cadeias do condado cumpram as restrições de Trump's Sanctuary City

O prefeito de Miami-Dade ordena que as cadeias do condado cumpram as restrições de Trump's Sanctuary City

Foto do manifestante preparando uma placa para uma manifestação contra a ordem executiva do presidente Donald Trump sobre a imigração muçulmana em Miami via AP. E agora, começa: à luz da recente ordem executiva do presidente Donald Trump que cortará o financiamento federal das cidades-santuário, o prefeito do condado de Miami-Dade, Carlos Giminez, ordenou que as cadeias do condado cumpram todos os pedidos de detenção federal.

A VW tornou seu dispositivo de derrota mais potente para economizar em reparos de garantia: documentos judiciais

A VW tornou seu dispositivo de derrota mais potente para economizar em reparos de garantia: documentos judiciais

Foto: Brennan Linsley Nos autos que acusam o engenheiro da Volkswagen James Robert Liang de fraude por desenvolver o código de emissão de diesel da VW, existe uma pequena seção sobre uma atualização de software em 2014. Alega que a VW tornou seus carros ainda mais prejudiciais ao meio ambiente apenas para a empresa poderia economizar nos custos de garantia.

Este é o começo do fim da detenção de Brittney Griner?

Este é o começo do fim da detenção de Brittney Griner?

Brittney Griner (r.) Desde o início, o status de Brittney Griner tem sido a situação de refém americana mais singular da história moderna.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Carne de porco Mapo de Dawn Burrell e homus de Edamame

Carne de porco Mapo de Dawn Burrell e homus de Edamame

"Esta é uma indústria dominada por homens, e estou feliz por ser uma das pessoas que quebrou o molde para ajudar as mulheres de cor", diz Top Chef: finalista de Portland e chef-parceiro do final de agosto em Houston. "Muitas vezes somos ignorados e às vezes não ensinados, mas isso vai mudar."

Kate Middleton passa um dia à beira da água em Londres, além de Jennifer Lopez, Julianne Hough e mais

Kate Middleton passa um dia à beira da água em Londres, além de Jennifer Lopez, Julianne Hough e mais

Kate Middleton passa um dia na água em Londres, além de Jennifer Lopez, Julianne Hough e muito mais. De Hollywood a Nova York e em todos os lugares, veja o que suas estrelas favoritas estão fazendo!

Jovem de 17 anos esfaqueado até a morte enquanto outros 4 ficaram feridos em um ataque de faca no rio Wisconsin

Jovem de 17 anos esfaqueado até a morte enquanto outros 4 ficaram feridos em um ataque de faca no rio Wisconsin

Investigadores estão investigando se o grupo e o suspeito se conheciam antes do ataque

Aterrissagens na pista

Aterrissagens na pista

O final do verão e o outono são estações nostálgicas. Os postes de luz lançam sua luz sobre as ruas escorregadias pela chuva, e as folhas sob os pés – vermelho-alaranjado nas sombras do crepúsculo – são um lembrete de dias passados.

Imagine criar uma estratégia de conteúdo que realmente CONVERTE. É possível.

Imagine criar uma estratégia de conteúdo que realmente CONVERTE. É possível.

Em 2021, encorajo você a repensar tudo o que sabe sobre os clientes que atende e as histórias que conta a eles. Dê um passo para trás.

Uma perda gigantesca abriu meu coração para o amor

Uma perda gigantesca abriu meu coração para o amor

No dia do aniversário de 9 anos de Felix The Cat, lembro-me de uma das maiores perdas da minha vida adulta – minha Sophie em 2013. Escrevi este ensaio e o compartilhei brevemente nesta plataforma em 2013.

Quando você não pode ser a pessoa que a internet quer que você seja

Quando você não pode ser a pessoa que a internet quer que você seja

Odeio a palavra “naufrágio”. As pessoas se confortam em sua própria bússola moral e, ao fazê-lo, encontram-se julgando.

Language