Contexto
Para otimizar o desenvolvimento na plataforma LATROMI, implementamos o Assistente de CRUD, um recurso que permite selecionar tabelas e mapear campos de forma intuitiva.
Embora a ferramenta facilite as operações de criação e atualização, identificamos um ponto de atenção: ao configurar uma atualização, se o campo identificador não for explicitamente definido na lista de campos, a cláusula WHERE da instrução SQL será gerada vazia — mesmo que o identificador já esteja definido na aba de parâmetros. Consequentemente, ao executar o objeto gerado pelo assistente, o sistema retornará uma exceção de sintaxe, impedindo a conclusão da operação.
Como simular
Para simular esse é necessário ter uma tabela criada para usar no Assistente de CRUD:
- Selecione a tabela alvo.
- Informe as colunas da consulta.
- Informe as colunas do formulário, porém remova os campos PKs.
- Avança e edite o formulário gerado.
- Abra o comando SQL de atualização gerado.
Solução
Com base no comportamento observado, a falha provavelmente reside na lógica de criação da coleção WHERE no projeto core. Atualmente, a construção dessa cláusula parece depender da lista de campos, quando o correto seria utilizar a lista de parâmetros como base.
1. Correção Principal: Ajustar a lógica de construção da coleção WHERE para que utilize exclusivamente a lista de parâmetros como referência para a geração das condições.
2. Validação e Correção Secundária (Fluxo de Segurança): Considerando os cenários de uso do Assistente de CRUD, é necessário validar o comportamento do sistema após a correção principal caso o usuário não configure uma lista de parâmetros. Se o resultado for a geração de um comando UPDATE com WHERE vazio ou totalmente ausente, deve-se implementar o seguinte fluxo de proteção:
O Assistente deve emitir um alerta informando que a configuração resultará em um comando de atualização incorreto, oferecendo ao usuário a opção de prosseguir ou cancelar:
- Opção “Sim” (Prosseguir): O assistente deve converter a operação para um formulário exclusivamente de Criação (Insert), ignorando a atualização.
- Opção “Não” (Cancelar): O usuário permanece na tela de configuração para realizar os ajustes necessários e corrigir a lista de parâmetros.
Esta abordagem garante que o desenvolvedor tenha total controle sobre o comportamento do objeto gerado, evitando exceções em tempo de execução.