Validação Server-Side em Formulários de Entrada de Dados

1. Objetivo

Este documento descreve o processo de implementação de validações de campo em formulários SAP Fiori desenvolvidos na plataforma Tachyonix.io, utilizando lógica de negócio ABAP executada no backend para desacoplar a validação da interface de usuário.

2. Pré-requisitos

  • Autorizações SAP: Acesso à transação SE38 ou SE80 para criação e modificação de INCLUDEs ABAP.
  • Configuração na Tachyonix: Aplicação de formulário de entrada de dados criada conforme a aula 010.
  • INCLUDE ABAP: Criação de um INCLUDE ABAP, por exemplo, YVALIDA_QUANTIDADE, para conter a lógica de validação.

3. Passo a Passo Detalhado

3.1. Configuração da Validação na Plataforma Tachyonix

Acessar Propriedades do Campo: No editor de formulários da plataforma Tachyonix, selecione o campo que requer validação (ex: "Quantidade do pedido", nome técnico MENGE).

Ativar Comportamento de Validação: Navegue até a aba "Comportamentos" nas propriedades do campo selecionado.

Habilitar Validação: Marque a opção "Validação". Esta ação configura a plataforma para disparar um evento de validação quando o campo perder o foco (evento on-change).

Associar INCLUDE ABAP: No campo "Include", informe o nome do INCLUDE ABAP que conterá a lógica de validação para este campo. Utilize o INCLUDE pré-requisito, por exemplo, YVALIDA_QUANTIDADE.

Repetir Configuração: Aplique a mesma configuração para outros campos que necessitem de validação (ex: "Preço líquido", nome técnico NETPR), reutilizando o mesmo INCLUDE ou especificando um novo conforme a necessidade.

3.2. Implementação da Lógica de Validação em ABAP

Acessar INCLUDE ABAP: Abra o INCLUDE YVALIDA_QUANTIDADE (ou o nome definido) no ambiente de desenvolvimento ABAP (SE38 ou SE80).

Implementar Lógica de Validação: Dentro do INCLUDE, insira o código ABAP que contém as regras de negócio. O INCLUDE é invocado por um método padrão da classe gerada pela plataforma (PROCESS_VALIDATE_DETERMINATE), que fornece os dados da UI Fiori.

Acessar Dados do Formulário: Os dados do formulário são acessíveis através da estrutura lt_action_data-detailed. Itere sobre esta tabela para processar os valores dos campos.

Exemplo de Validação de Quantidade

Implemente uma regra para verificar se a quantidade inserida (MENGE) é superior ao estoque disponível.

LOOP AT lt_action_data-detailed ASSIGNING FIELD-SYMBOL(<fs_item>).
  IF <fs_item>-field_name = 'MENGE'. " Campo Quantidade
    " Lógica para buscar estoque disponível e comparar com <fs_item>-field_value
    " ...
    IF <fs_item>-field_value > lv_estoque_disponivel.
      " Adicionar mensagem de erro
    ENDIF.
  ENDIF.
ENDLOOP.

Exemplo de Validação de Preço

Implemente uma regra para verificar se o preço líquido (NETPR) excede em 10% o valor cadastrado para o material.

LOOP AT lt_action_data-detailed ASSIGNING FIELD-SYMBOL(<fs_item>).
  IF <fs_item>-field_name = 'NETPR'. " Campo Preço Líquido
    " Lógica para buscar preço de referência do material e comparar com <fs_item>-field_value
    " ...
    IF <fs_item>-field_value > ( lv_preco_referencia * '1.1' ).
      " Adicionar mensagem de aviso
    ENDIF.
  ENDIF.
ENDLOOP.

Gerar Mensagens de Retorno: Se uma condição de validação for violada, adicione uma mensagem à tabela de retorno ts_message_table.

Estrutura da Mensagem: Preencha os campos TYPE (utilize 'E' para erro e 'W' para aviso), MESSAGE (texto da mensagem), e FIELD (nome técnico do campo associado à mensagem).

Exemplo

DATA ls_message TYPE ts_message.
ls_message-type = 'E'. " E para erro, W para aviso
ls_message-message = 'Quantidade acima do estoque disponível.'.
ls_message-field = 'MENGE'. " Nome técnico do campo
APPEND ls_message TO ts_message_table.

3.3. Demonstração e Debug

Construir e Executar Aplicação: Na plataforma Tachyonix, construa a aplicação Fiori e abra-a em um navegador web.

Testar Validação: Insira dados no formulário que intencionalmente violem as regras de negócio implementadas no INCLUDE ABAP.

Observar Mensagens: Ao sair do campo validado, a aplicação Fiori exibirá as mensagens de erro ou aviso configuradas (ex: "Quantidade acima da quantidade existente no depósito", "Preço líquido 10% acima do cadastro").

Utilizar Debugger ABAP: Para depurar a lógica de validação, defina um breakpoint no INCLUDE ABAP (YVALIDA_QUANTIDADE). Execute a aplicação Fiori e acione a validação. O debugger ABAP será ativado, permitindo inspecionar variáveis como iv_field_name (nome do campo que disparou a validação) e a estrutura ACTION_DATA (contendo todos os dados do formulário).

4. Verificação e Teste

Para verificar a implementação, execute a aplicação Fiori no navegador. Preencha os campos com valores que devem acionar as validações configuradas. As mensagens de erro ou aviso correspondentes devem ser exibidas no Message Manager do Fiori, indicando a validação bem-sucedida.

5. Considerações Técnicas Adicionais

5.1. Validação Server-Side via INCLUDE ABAP

A plataforma Tachyonix adota uma abordagem de validação no lado do servidor (server-side). A configuração na aba "Comportamentos" de um campo atua como um gatilho que invoca uma lógica ABAP centralizada, encapsulada em um INCLUDE ABAP.

Comparativo com ABAP Clássico: Esta abordagem é análoga à validação em eventos de Dynpro, como AT SELECTION-SCREEN para campos de tela de seleção ou PROCESS ON VALUE-REQUEST para validação de entrada.

Vantagens

  • Reutilização da Lógica de Negócio: A lógica complexa permanece no ABAP, onde o desenvolvedor já possui familiaridade e acesso a todas as APIs e dados do SAP (tabelas, BAPIs, classes).
  • Desacoplamento UI/Backend: A interface de usuário Fiori apenas dispara o evento de validação e exibe o resultado, mantendo-se leve e focada na experiência do usuário.
  • Segurança e Consistência: Todas as validações críticas são executadas no servidor, garantindo a integridade dos dados e a consistência das regras de negócio, independentemente do cliente.

5.2. Estrutura de Dados de Ação (ACTION_DATA)

A estrutura ACTION_DATA é o contêiner fundamental que transporta o estado completo da UI Fiori para o backend ABAP durante um evento de validação.

Conteúdo

Ela não contém apenas o valor do campo que disparou o evento, mas sim todos os dados do formulário, incluindo informações do cabeçalho e de todas as tabelas de itens.

Analogia ABAP

Isso é análogo a ter acesso a todas as tabelas internas e parâmetros de uma tela de seleção (como SCREEN, SY-DYNNR, SELECT-OPTIONS, PARAMETERS) dentro de um evento como AT SELECTION-SCREEN.

Benefícios

Permite a implementação de validações cruzadas complexas, onde a validação de um campo depende do valor de outro campo no mesmo formulário (ex: validar a quantidade de um item com base no tipo de material selecionado no cabeçalho ou em outro item da tabela).

5.3. Tabela de Mensagens (ts_message_table)

A ts_message_table é o mecanismo de comunicação de retorno do backend para o frontend, utilizado para informar o usuário sobre o resultado das validações.

Analogia ABAP

É conceitualmente análoga à função MESSAGE em ABAP. No entanto, em vez de interromper o fluxo do programa e exibir um pop-up modal, as mensagens (erro, aviso, sucesso) são coletadas em uma tabela interna.

Funcionamento

A plataforma Tachyonix lê esta tabela após a execução da lógica ABAP e renderiza as mensagens de forma não-bloqueante e amigável em um Message Manager no Fiori.

Experiência do Usuário

Permite que múltiplas validações sejam executadas de uma vez, e todos os erros ou avisos sejam exibidos ao usuário simultaneamente. Isso melhora significativamente a experiência do usuário, que não é forçado a corrigir um erro por vez, mas pode visualizar e abordar todos os problemas de entrada de dados de uma só vez.