I am not a professional developer at all. How do you account for when Google Services fail when your code is running. I use try, catch, finally when I expect errors to happen. I have a lot of code running my workplace, so I have had Google Services fail in the middle of a long script. Is there a way to plan for this? When it does it happen it takes a good hour or two to fix it.Thanks for any input.
--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/36fc6690-7491-4419-8d91-e0de4fedd434n%40googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/CAA4K68bJHRyn_XjZx_nudHgMcuLtQ6CnCS1p8x4euin4p_nXug%40mail.gmail.com.
On Aug 7, 2025, at 5:29 PM, Keith Andersen <contact...@gmail.com> wrote:
On Aug 7, 2025, at 8:51 PM, SMAARTE Group <in...@smaartegroup.com> wrote:
--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/DFCC0D05-3FDF-46E2-B605-D4C1E60DFC24%40bbchs.org.
Olá Scott, Tim, George e todos,
Este é um tópico excelente e uma das dores mais profundas de quem desenvolve com Apps Script. A sua frustração, Scott, é totalmente compreensível. A sensação de que o código está perfeito, mas a plataforma falha no meio de um processo longo, é algo que muitos de nós já sentimos. A piada do Tim sobre o "Raspberry Pi" resume perfeitamente esse sentimento.
Acabei de sair de uma sessão de depuração de dois dias com um desenvolvedor sobre um bug de ambiente raríssimo, então este assunto está muito fresco na minha mente.
As sugestões do George (código modular e try/catch) e do Tim (verificar se a ação já foi feita) são a base da solução. Quero expandir esses conceitos e apresentar uma arquitetura completa que torna seus scripts longos resilientes, reiniciáveis e à prova de falhas.
A estratégia é parar de lutar contra as falhas e os limites de tempo (6 minutos) e, em vez disso, criar um script que espera que elas aconteçam e sabe como se recuperar.
A Arquitetura: O Padrão "Máquina de Estados com Gatilhos"A ideia é tratar seu script não como uma única execução longa, mas como uma série de execuções curtas e controladas. Cada execução processa um pequeno lote de trabalho, salva seu progresso e agenda a próxima execução.
Componentes Principais:
O Estado (Onde eu parei?): Usamos o PropertiesService para armazenar o estado do nosso script. Ele funciona como um pequeno bloco de notas que persiste entre as execuções. A informação mais comum a ser salva é o índice da última linha da planilha que foi processada com sucesso.
O Lote (Trabalho em Pedaços): Em vez de um loop que processa 1000 linhas, seu script deve ser projetado para processar, por exemplo, apenas 50 linhas por execução.
A Idempotência (Isso já foi feito?): Este é o ponto crucial do Tim. Na sua planilha principal, adicione uma coluna de "Status" (ex: "Pendente", "Em Processo", "Concluído", "Erro"). Antes de executar qualquer ação crítica (criar PDF, enviar convite), seu script DEVE verificar o status naquela linha. Se já for "Concluído", ele simplesmente pula para a próxima. Isso garante que, se você rodar o script novamente, ele não vai criar convites duplicados.
O Gatilho (Me chame de novo): No final de cada execução de lote, o script cria um novo gatilho de tempo para se chamar novamente em, digamos, 1 minuto. Em seguida, ele deleta o gatilho que o iniciou, garantindo que não haja acúmulo de gatilhos.
Exemplo de Fluxo de Código:
Benefícios desta Arquitetura:
Resiliência a Falhas: Se o Spreadsheet Service falhar no meio de um lote, o script simplesmente para. O gatilho o iniciará novamente em 2 minutos, e ele tentará processar a mesma linha que falhou, pois o "Status" dela não foi mudado para "Concluído".
Contorna o Limite de 6 Minutos: Seu script nunca atingirá o tempo máximo de execução.
Recuperação Manual Zero: Você não precisa mais descobrir onde parou. O script sabe exatamente de onde recomeçar.
Implementar este padrão exige um pouco mais de trabalho inicial, mas a paz de espírito que ele proporciona para processos longos e críticos é imensurável.
Espero que esta arquitetura ajude!
Atenciosamente,
Kildere Sobral Irineu
--
You received this message because you are subscribed to the Google Groups "Google Apps Script Community" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-apps-script-c...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/google-apps-script-community/16902bae-eca0-4f73-a2c7-76651c2db761n%40googlegroups.com.
--