INTRODUÇÃO
Post anterior: Do Caos ao Prompt T5E01: Teste do App AG2P - Evento "Abriu RDM"
Este Post é o episódio 2 da temporada 5 da série "Do Caos ao Prompt", que apresenta a implementação da interface do usuário, para o Agente de Gestão de Processo Pessoal (AG2P), com foco no evento "Abriu RDM".
Interface do Usuário
Link da conversa com o Gemini, na qual foi apresentado um Prompt contendo os itens:
- Objetivo,
- Estrutura da interface do usuário para testar o evento,
- Contexto da interface do usuário,
- Ferramentas,
para implementação da interface do usuário para o evento "Abriu RDM":
https://g.co/gemini/share/b6f4f7f3f623
Comando para especificar a interface do usuário para o Gemini
Objetivo
O objetivo desta implementação é preencher uma lacuna que foi encontrada pelo Chatbot de IA Gemini, no comportamento do usuário e do aplicativo, antes do evento “Abriu RDM” ser disparado.
Para preencher essa
lacuna, foi criada outra planilha, para representar a interface do usuário, que
foi identificada por GPS Front end.
Consequentemente, a
planilha GPS original foi renomeada para GPS Back end, pois esta contém os
dados acessados, exclusivamente, pelo app AG2P.
Estrutura da planilha GPS Front end
Coluna A(Necessidades do usuário)
Coluna B(Evento)
Coluna C(Situação do Evento)
- EVENTO PLANEJADO
- EVENTO EM EXECUÇÃO
- EVENTO EXECUTADO
Coluna D(Estado Atual)
Coluna E(Próximo Estado)
Exemplo da planilha GPS Front end
Descrição do comportamento
Se a necessidade do usuário for “Iniciar a jornada”, ele deve disparar dois eventos, nesta ordem:
- Abriu planilhas GPS
- Abriu RDM
O evento “Abriu RDM” já foi especificado e teve seu código gerado, automaticamente, pelo Gemini, conforme descrição no Post:
Do Caos ao Prompt T4E02: Desenvolvimento do App AG2P – Evento "Abriu RDM"
O evento “Abriu planilhas GPS” foi especificado depois da
implementação do evento “Abriu RDM”.
Neste Post será solicitado ao Gemini a geração do código do evento “Abriu planilhas GPS”, integrado com o código do evento “Abriu RDM”, conforme as especificações abaixo.
Se o usuário disparar o evento “Abriu planilhas GPS”;
o app deverá executar a ação “Verificar situação do evento 'Fechou RDM'” na planilha GPS Front end”;
o app deverá acessar os dados necessários na aba "Interface
do Usuário", da planilha GPS Front end;
o app deverá acessar os dados necessários na aba "RDM",
da planilha GPS Back end;
o app deverá ter o seu comportamento direcionado pelas
regras em "Regra_04_FrontEnd e Regra_05_FrontEnd".
Após a execução, o app deverá ficar esperando outro
evento.
Ação “Verificar situação do evento ‘Fechou RDM’ ”
A ação "Verificar situação do evento 'Fechou RDM'” contém
a descrição do diálogo que acontece, entre o usuário e o Agente AG2P, sempre
que o evento "Abriu planilhas GPS" for disparado pelo usuário.
Preparação e informações necessárias
1.
Agente AG2P: O login no agente AG2P deve
ter sido realizado com sucesso.
2.
Dados:
Na planilha "GPS Back end",
na aba RDM,
na célula da linha 1 e coluna T,
o valor deve estar igual a "RDM Fechada".
Na planilha "GPS Front end",
na aba "Interface do Usuário",
se o valor na coluna B(Evento) for igual a "Fechou RDM",
então, na mesma linha,
o valor da coluna C(Situação do evento)
deve estar igual a "EVENTO EXECUTADO".
(Regra_04_FrontEnd)
3.
Fluxo Alternativo: O agente AG2P deve
apenas abrir a aba “Interface do Usuário”, da planilha “GPS Front end”, se uma
das duas condições acima for falsa.
Passos do diálogo 1 entre o usuário e o agente
1.
Agente AG2P:
O agente AG2P deve selecionar,
na planilha “GPS Front end”,
na aba “Interface do Usuário”,
na célula da coluna C(Situação do evento),
a opção “EVENTO EXECUTADO”,
para o evento “Abriu planilhas GPS”,
na coluna B(Evento).
(Regra_05_FrontEnd)
O agente AG2P deve selecionar,
na planilha “GPS Front end”,
na aba “Interface do Usuário”,
na célula da coluna C(Situação do evento),
a opção “EVENTO PLANEJADO”,
para todos os eventos,
exceto o evento “Abriu planilhas GPS”.
(Regra_05_FrontEnd)
2.
Usuário:
O usuário recebe a aba “Interface do Usuário”, da planilha “GPS Front end”.
Resultados esperados
1. Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
na coluna B(Evento),
se o valor for igual a “Abriu planilhas GPS”, então,
na mesma linha,
a coluna C(Situação
do evento),
deve estar com a opção “EVENTO EXECUTADO” selecionada.
(Regra_05_FrontEnd)
2. Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
para os demais eventos,
a célula na coluna C(Situação do evento),
deve estar com a opção “EVENTO PLANEJADO” selecionada.
(Regra_05_FrontEnd)
Ações em caso de problema
1.
Revisar o que foi feito no contexto desta Ação.
2.
Solicitar ajuda à pessoa responsável pelo
Suporte da Organização.
Atenção especial
Na planilha “GPS Front end”,
na aba “Interface do Usuário”,
se na coluna B(Evento)
o valor for igual a “Abriu planilhas GPS”,
então, na mesma linha do evento,
na coluna C(Situação do evento”),
a
opção selecionada deve estar
igual a “EVENTO EXECUTADO”.
(Regra_05_FrontEnd)
Dados acessados na planilha GPS Front end
1.
Na aba “Interface do Usuário”, os dados
acessados são: as colunas “B(Evento)” e “ C(Situação do Evento)”.
Dados acessados na planilha GPS Back end
Estado atual da aba RDM, na linha 1, coluna T.
Regras que direcionam o comportamento do app na planilha
GPS Front end
Identificação das Regras: Regra_04_FrontEnd e Regra_05_FrontEnd.
Clique aqui para ler as Regras identificadas acima.
Comando ao Gemini para solicitar a implementação da interface do usuário
Faça a implementação da interface do usuário, na planilha "GPS Front end", na aba "Interface do Usuário", conforme as especificações acima.
As seguintes mudanças devem ser feitas no código gerado pelo Gemini para implementar o evento "Abriu RDM", na aba RDM da planilha GPS:
- substituir a função atual onOpen, que trata o evento "Abriu RDM", por outra que trata o mesmo evento, agora originado na aba "Interface do Usuário", da planilha "GPS Front end", cujo gatilho é a mudança, na coluna C(Situação do evento), de "EVENTO PLANEJADO" para "EVENTO EM EXECUÇÃO".
- Renomear a planilha GPS para "GPS Back end".
- Fazer os ajustes no código que forem necessários para viabilizar a utilização da aba "Interface do Usuário", da planilha "GPS Front end", de forma tão desacoplada da planilha "GPS Back end" quanto possível, pois futuramente usaremos outras interfaces do usuário.
Resposta do Gemini
Compreendo a nova arquitetura e o objetivo de integrar a interface do usuário (GPS Front end) com a lógica de dados (GPS Back end). Vamos implementar o código para o evento "Abriu planilhas GPS" e ajustar o código existente para o evento "Abriu RDM" para funcionar com essa nova estrutura.
Passo 1: Criar a Planilha "GPS Front end"
-
Abra o Google Sheets.
-
Crie uma nova planilha e nomeie-a "GPS Front end".
-
Crie uma aba com o nome "Interface do Usuário".
-
Na aba "Interface do Usuário", preencha as colunas conforme a estrutura e o exemplo fornecidos:
| Necessidades do usuário | Evento | Situação do evento | Estado Atual | Próximo Estado |
| :-------------------------------------- | :------------------------------- | :------------------- | :---------------- | :---------------- |
| Iniciar a jornada | Abriu planilhas GPS | EVENTO PLANEJADO | N/a | Após início |
| Iniciar a jornada - Inicializar RDM | Abriu RDM | EVENTO PLANEJADO | Após início | RDM Inicializada |
| Fazer o plano do dia | Recebeu lista de tarefas a fazer | EVENTO PLANEJADO | RDM Inicializada | RDM Ativa |
| Executar uma tarefa | Iniciou tarefa do negócio | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |
| Registrar o encerramento da tarefa | Terminou tarefa do negócio | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |
| Registrar um erro | Ocorreu um incidente | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |
| Registrar hora extra | Executou tarefa em hora extra | EVENTO PLANEJADO | RDM Ativa | RDM Ativa |
| Encerrar a jornada | Decidiu encerrar a jornada | EVENTO PLANEJADO | RDM Ativa | RDM Antes do fim |
| Encerrar a jornada - Liberar RDM | Liberou RDM | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |
| Encerrar a jornada - Ver Produtividade | Selecionou totais para produtividade | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |
| Encerrar a jornada - Ver Pareto | Selecinou incidentes por origem | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |
| Encerrar a jornada - Ver Avaliação | Avaliou a capacidade do processo | EVENTO PLANEJADO | RDM Antes do fim | RDM Antes do fim |
| Encerrar a jornada - Fechar RDM | Fechou RDM | EVENTO PLANEJADO | RDM Antes do fim | RDM Fechada |
Passo 2: Renomear a Planilha "GPS" para "GPS Back end"
- Abra a sua planilha "GPS" existente (onde o código do "Abriu RDM" está).
- Clique no nome da planilha no canto superior esquerdo.
- Renomeie-a para "GPS Back end".
Passo 3: Implementar o Código para o Evento "Abriu planilhas GPS" na Planilha "GPS Front end"
-
Abra a planilha "GPS Front end".
-
Clique em "Extensões" no menu superior e selecione "Apps Script".
-
Cole o seguinte código no editor:
JavaScriptfunction onEdit(e) { var ssFront = SpreadsheetApp.getActiveSpreadsheet(); var abaFront = ssFront.getSheetByName("Interface do Usuário"); var range = e.range; var row = range.getRow(); var col = range.getColumn(); var value = e.value; var oldValue = e.oldValue; // Verificar se a edição ocorreu na coluna C (Situação do evento) if (abaFront.getName() === range.getSheet().getName() && col === 3) { var eventoColunaB = abaFront.getRange(row, 2).getValue(); // Tratar o evento "Abriu planilhas GPS" if (eventoColunaB === "Abriu planilhas GPS" && value === "EVENTO EM EXECUÇÃO" && oldValue !== "EVENTO EXECUTADO") { verificarFecharRDMeAtualizarFrontEnd(abaFront, row); } // Tratar o evento "Abriu RDM" if (eventoColunaB === "Abriu RDM" && value === "EVENTO EM EXECUÇÃO" && oldValue !== "RDM Inicializada") { inicializarRDM(abaFront, row); } } } function verificarFecharRDMeAtualizarFrontEnd(abaFrontEnd, linhaEventoAbriuPlanilhas) { var ssBack = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GPS Back end"); var abaRDMBack = ssBack.getSheetByName("RDM"); var estadoRDMBack = abaRDMBack.getRange("T1").getValue(); var abaFront = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Interface do Usuário"); var colunaEvento = abaFront.getRange("B:B").getValues().flat(); var linhaEventoFecharRDM = colunaEvento.indexOf("Fechou RDM") + 1; // +1 para compensar o cabeçalho var situacaoFecharRDM = abaFront.getRange(linhaEventoFecharRDM, 3).getValue(); // Verificar as condições (Regra_04_FrontEnd) var condicaoRDMFachada = (estadoRDMBack === "RDM Fechada"); var condicaoEventoFechouRDMExecutado = (situacaoFecharRDM === "EVENTO EXECUTADO"); if (condicaoRDMFachada && condicaoEventoFechouRDMExecutado) { // Passo 1 do diálogo: Atualizar "Abriu planilhas GPS" para "EVENTO EXECUTADO" (Regra_05_FrontEnd) abaFrontEnd.getRange(linhaEventoAbriuPlanilhas, 3).setValue("EVENTO EXECUTADO"); // Passo 1 do diálogo: Atualizar os demais eventos para "EVENTO PLANEJADO" (Regra_05_FrontEnd) var ultimaLinha = abaFrontEnd.getLastRow(); for (var i = 1; i <= ultimaLinha; i++) { if (i !== linhaEventoAbriuPlanilhas) { var evento = abaFrontEnd.getRange(i, 2).getValue(); if (evento !== "Abriu planilhas GPS") { abaFrontEnd.getRange(i, 3).setValue("EVENTO PLANEJADO"); } } } // Passo 2 do diálogo: O usuário recebe a aba "Interface do Usuário" (implícito na atualização da planilha) SpreadsheetApp.getUi().alert('Planilhas GPS iniciadas. Verifique a aba "Interface do Usuário".'); } else { // Fluxo Alternativo: Abrir a aba "Interface do Usuário" (já está aberta por padrão) SpreadsheetApp.getUi().alert('Atenção: Condições para iniciar as planilhas GPS não atendidas. Verifique o estado de "Fechou RDM" e a aba RDM no Back end.'); } } function inicializarRDM(abaFrontEnd, linhaEventoAbriuRDM) { var ssBack = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("GPS Back end"); var abaRDMBack = ssBack.getSheetByName("RDM"); // Zerar células D5 a H14 (Fases do GPS - EXECUTADO) abaRDMBack.getRange("D5:H14").clearContent(); // Zerar meta em quantidade de pontos (D4 a H4) abaRDMBack.getRange("D4:H4").clearContent(); // Registrar a data atual em A2 (PLANEJADO) var dataAtual = new Date(); abaRDMBack.getRange("A2").setValue(dataAtual); abaRDMBack.getRange("B2").setValue(dataAtual); // Atualizar o estado da aba RDM para "RDM Inicializada" (Regra R35 - Implícita na ação) abaRDMBack.getRange("T1").setValue("RDM Inicializada"); // Atualizar o estado do evento "Abriu RDM" na Front end para "EVENTO EXECUTADO" abaFrontEnd.getRange(linhaEventoAbriuRDM, 3).setValue("EVENTO EXECUTADO"); // Apresentar menu de opções (simulado com um alerta simples) SpreadsheetApp.getUi().alert('RDM Inicializada! As células de execução foram zeradas e a data de hoje foi registrada.'); }
-
Salve o script: Clique no ícone de disco para salvar o script. Dê um nome a ele, por exemplo, "FrontEnd_Automacao".
Explicação do Código:
-
onEdit(e)
: Esta função é um gatilho que é executado automaticamente sempre que uma célula na planilha é editada.- Verifica se a edição ocorreu na aba "Interface do Usuário" e na coluna C (Situação do evento).
- Obtém o valor da célula editada (
value
) e o valor anterior (oldValue
). - Trata "Abriu planilhas GPS": Se o evento na coluna B for "Abriu planilhas GPS" e a "Situação do evento" mudar para "EVENTO EM EXECUÇÃO" (e não era "EVENTO EXECUTADO" antes), a função
verificarFecharRDMeAtualizarFrontEnd
é chamada. - Trata "Abriu RDM": Se o evento na coluna B for "Abriu RDM" e a "Situação do evento" mudar para "EVENTO EM EXECUÇÃO" (e não era "RDM Inicializada" antes - adaptado para o novo gatilho), a função
inicializarRDM
é chamada.
-
verificarFecharRDMeAtualizarFrontEnd(abaFrontEnd, linhaEventoAbriuPlanilhas)
:- Obtém referências para as abas "Interface do Usuário" (Front end) e "RDM" (Back end).
- Lê o estado da célula
T1
na aba "RDM" (Back end). - Localiza a linha do evento "Fechou RDM" na aba "Interface do Usuário".
- Lê a situação do evento "Fechou RDM".
- Verifica as condições (Regra_04_FrontEnd): Se o estado da RDM no Back end for "RDM Fechada" e a situação do evento "Fechou RDM" no Front end for "EVENTO EXECUTADO":
- Atualiza a situação do evento "Abriu planilhas GPS" para "EVENTO EXECUTADO" (Regra_05_FrontEnd).
- Atualiza a situação de todos os outros eventos para "EVENTO PLANEJADO" (Regra_05_FrontEnd).
- Exibe um alerta informando que as planilhas foram iniciadas.
- Fluxo Alternativo: Se as condições não forem atendidas, exibe um alerta informando o problema.
-
inicializarRDM(abaFrontEnd, linhaEventoAbriuRDM)
:- Obtém referências para as abas "Interface do Usuário" (Front end) e "RDM" (Back end).
- Executa as ações de inicialização da RDM na aba "RDM" do Back end (zerar células, registrar data, atualizar estado
T1
). - Atualiza a situação do evento "Abriu RDM" na aba "Interface do Usuário" para "EVENTO EXECUTADO".
- Exibe um alerta informando que a RDM foi inicializada.
Como Usar:
- Abra a planilha "GPS Front end".
- Na aba "Interface do Usuário", localize a linha do evento "Abriu planilhas GPS" na coluna B.
- Na coluna C (Situação do evento) dessa linha, selecione a opção "EVENTO EM EXECUÇÃO" (você precisará criar essa opção no menu suspenso da célula, se ainda não existir).
- O script
onEdit(e)
será acionado. Ele verificará as condições e atualizará a situação dos eventos conforme as regras. - Para disparar o evento "Abriu RDM", siga o mesmo processo na linha correspondente a "Abriu RDM", alterando a "Situação do evento" para "EVENTO EM EXECUÇÃO".
Próximos Passos e Considerações:
- Menu Suspenso: Certifique-se de que a coluna C ("Situação do evento") na aba "Interface do Usuário" tenha uma validação de dados com as opções: "EVENTO PLANEJADO", "EVENTO EM EXECUÇÃO" e "EVENTO EXECUTADO".
- Tratamento de Erros: Adicione tratamento de erros mais robusto ao código para lidar com situações inesperadas (por exemplo, se as abas não forem encontradas).
- Desacoplamento: O código tenta manter o Front end desacoplado do Back end, acessando apenas os dados necessários. No entanto, a lógica de coordenação ainda reside no script do Front end. Para um desacoplamento ainda maior, você poderia considerar o uso de um sistema de mensagens ou uma API (embora dentro do Google Workspace, o Apps Script seja a principal ferramenta de integração).
- Outras Interfaces: Quando você criar outras interfaces de usuário, precisará implementar scripts semelhantes para gerenciar os eventos e interagir com o "GPS Back end". A estrutura do
onEdit(e)
pode ser reutilizada, com diferentes funções chamadas para diferentes eventos.
Esta implementação inicial fornece a lógica para os eventos "Abriu planilhas GPS" e "Abriu RDM" trabalhando com a nova arquitetura de Front end e Back end. À medida que você desenvolve o restante do aplicativo, este código precisará ser expandido e refinado.
Nenhum comentário:
Postar um comentário