A ideia para este trabalho veio da experiência pessoal. Costume ser o líder dos grupos de trabalho em que me encontro, não apenas por ser o mais habilidoso, mas também por saber desempenhar esta função. Como tal, conhecendo bem esta realidade, também conheço os seus problemas, que costumam ser a falta de tempo e o ter que andar atrás das pessoas para as relembrar de desempenhar as suas funções. Por isso, realizámos um projeto em que um administrador ou gestor de uma equipa consegue manter-se informado do que os seus colaboradores estão a realizar, quando começaram e quando acabaram. Para além disso, os mesmos são também relembrados automaticamente da função que têm que desempenhar. Tudo isto de forma muito fácil, rápida e prática, sendo apenas necessário ao administrador do grupo criar um formulário que possua as tarefas e as diversas etapas das mesmas, adequadas ao seu projeto.
Para mim, a parte mais interessante deste trabalho é (como era de se esperar) o desafio final. Foi neste que tive que começar a escrever código mesmo a sério, tendo praticamente triplicado o número de linhas de código da minha inspiração (script A). Tive sorte do meu projeto fazer bom e grande uso da estrutura if, de longe a minha estrutura favorita, não só pela sua facilidade de sintaxe, mas também pelo seu raciocínio extremamente intuitivo.
Não queria ser redundante mas o desafio final foi também a parte mais difícil e trabalhosa do trabalho. Acredito que o tenha sido, por sermos tão "frescos" nesta linguagem, tudo é novo e estranho e precisa de ser compreendido e interiorizado. Antes de realizar qualquer ação nova, tinha que voltar a ler o código original e perceber se podia aproveitar alguma parte para desenvolver a minha ideia ou resolver determinado problema (e eu até possuo bases de Python). Para além disto, acho que este trabalho foi particularmente trabalhoso devido aos erros que fui encontrando pelo caminho. Sempre que resolvia um erro, outros dois surgia-me. Passei por alguns momentos bastante frustrantes e stressantes, mas que no final do trabalho apenas serviram para me sentir mais orgulhoso e satisfeito com o resultado que tinha obtido. No fundo, este trabalho foi, não diferente de todos os outros, difícil e trabalhoso. Porém, é esta curva de aprendizagem e esforço que também o torna interessante e recompensador.
Quero debruçar-me um pouco mais sobre os maiores problemas que fui encontrando. Vou começar pelo problema de não encontrar email, passo a explicar. O meu programa percorre as linhas da folha de cálculo, uma a uma, armazenando em diferentes variáveis os valores presentes nessa linha e suas diferentes colunas. Sendo que no final de recolher todos os dados, decide se envia um email ou não (dependendo das circunstâncias que eu delineei), porém, o nosso programa possui um acionador que executa o script sempre que alguém responde ao formulário (para receber um email imediatamente), o grande problema é que ao fazê-lo, a não ser que todos os colaboradores respondessem ao formulário ao mesmo tempo, iriam existir sempre linhas vazias quando o programa fosse executado (pois faltavam pessoas responder). Sendo assim, quando o script ia enviar o email numa linha que estive-se vazia, o mesmo dava erro (porque não possui nenhum endereço de email para o qual poderia enviar o mail), deixando na mesma a marca de que já tinha enviado o mail (o que fazia que quando a pessoa de facto respondesse ao formulário, não receberia email na mesma). Este problema fez-me bastante confusão durante largos minutos, porém, quando fui jantar fiquei a matutar nesta situação, tendo espontaneamente arranjado uma solução (muito simples, não sei como não me lembrei antes), usar uma if clause para que o programa apenas enviá-se um email quando a célula em que ele ia buscar o endereço de email fosse diferente de uma constante que era igual a " " (no fundo, só enviasse um mail quando de facto a célula possui-se um endereço de email). Seguem-se os prints para melhor compreensão:
Outro problema que encontrei, mas que resolvi com relativa facilidade e rapidez foi o de guardar o email do administrador. Como já deve saber o meu programa envia um email para o administrador / gestor da equipa em questão (que é o primeiro a responder ao formulário) sempre que alguém da uma tarefa por terminada. Porém, a estrutura do de repetição "for" que o nosso código utiliza, recorre sempre às mesmas variáveis para guardar a informação de cada linha, perdendo assim a informação de uma linha quando passa para a seguinte. Por isso, se o colaborador que tinha respondido ao formulário em 4º lugar (estaria portanto na 4º linha) desse a sua tarefa por terminada o programa iria tentar enviar o email para o administrador, mas não conseguiria porque já não possuía o mesmo desde o momento em que passou da primeira para a segunda linha. Para resolver este problema estudámos a estrutura "for" e identificámos que esta possui uma variável "i" que começava sendo-lhe atribuído o valor 0. Porém, cada vez que o "for" descia uma linha, o conteúdo desta variável aumentava por +1. Sendo assim, a linha 1 corresponde ao valor 0 da variável "i". Então criámos a estrutura if que coloco a seguir, cuja função era detetar se "i" é igual a 0 (ou seja se o "for" se encontra a analisar a primeira linha), guardar o email que ele encontra nessa linha numa variável que o script não usará para colocar mais nenhum valor (preservando o seu conteúdo original). A essa variável demos o nome de "emailAdmin".
if (i == 0) { // Armazena o email do administrador var emailAdmin = enderecoEmail }A maior decisão do nosso trabalho foi sem dúvida a de terminar o projeto sem conseguir que o administrador tenha que criar um formulário novo sempre que quer criar um novo projeto. A nossa ideia inicial era o administrador editar o formulário inicial que nós criámos ao seu gosto, conforme os projetos que a sua equipa ia desenvolvendo. Porém, deparámos-nos com um erro, se o formulário for editado, as novas respostas continuarão a ser enviadas para o Google Sheets em linhas de número cada vez mais elevado, superando os valores limites de linhas que nos definimos para o script analisar. Para que as respostas dos colaboradores voltem a aparecer desde a linha 1, é necessária a criação de um novo formulário (que é depois conectado com o Google Sheets que contém o nosso script). Nós tentámos durante várias horas arranjar uma maneira de contornar esta situação, para que o nosso script fosse user-friendly. Infelizmente, não conseguimos tendo decidido entregar o trabalho sem este problema resolvido. Dados os nossos conhecimentos de programação, principalmente desta linguagem, acho que é compreensível a nossa decisão.
Para concluir, quero apenas referir que o nosso script poderia (como é evidente) ter ficado melhor, nomeadamente se tivéssemos corrigido o erro de que falei anteriormente e se tivéssemos conseguido que uma pessoa volta-se a receber o email para se lembrar de realizar a sua tarefa, quando altera a mesma. O que acontece é que se uma pessoa alterar a sua tarefa a meio do projeto o script não lhe manda outro mail pois repara que já lhe tinha mandado anteriormente (porém, o mail que mandou é da tarefa anterior). A solução talvez seja não trocar de tarefa a meio dos trabalhos, pois o mais provável é atrasar o grupo. Porém, não olho para estas pequenas melhorias que não conseguimos aplicar com grande transporto, pois estou muito orgulhoso daquilo que fizemos (ter escrito cerca de 60% do código quando o professor apenas pedia 20%, parece ser bastante bom). Quero apenas salientar que as aprendizagens deste trabalho não foram só a da sintaxe desta linguagem de programação (GAS), mas também o desenvolvimento do nosso raciocínio lógico e da capacidade de detetar erros e identificar como os corrigir, para além de ganhar ainda mais experiência em programação.