O Web Dynpro possui algumas funcionalidades que visam facilitar a validação de campos e economizar tempo do desenvolvedor na criação da interface com o usuário. Uma verificação dos campos de entrada requeridos automáticos ainda não estão implementados no Web Dynpro e também não é planejado para o futuro, no entanto existem alguns métodos para executar esta ação. Para validação você pode executar a classe CL_WD_DYNAMIC_TOOL no seu evento ou no evento DoBeforeAction.
Isto significa que a propriedade State com o valor Required no elemento InputField somente exibirá um caractere asterisco na cor vermelha no seu elemento Label Associado, para que ocorra uma validação você precisa escrever códigos que valide o valor do atributo e exiba uma mensagem de acordo com o resultado.
Web Dynpro: Input Fields
Validando Campos Obrigatórios
Neste walkthrough utilizamos um componente e uma aplicação Web Dynpro básica com duas Views. Lembre-se que o Web Dynpro utiliza a arquitetura MVC e você deve criar a rota para suas Views utilizando corretamente os plugs InBound e OutBound na árvore Windows. Caso queira lembrar como configurar uma aplicação básica Web Dynpro clique aqui.
1 – Crie sua View principal (Main) utilizando os componentes básicos como PageHeader, Labels, InputFields, TransparentContainer e Button. Modifique suas propriedades e utilize o layout chamado GridLayout, use a figura abaixo para referencia.
No InputField para o valor cargo, mude sua propriedade state para required:
2 – No controlador, crie os atributos para cada campo no contexto:
3 – Adicione os atributos no contexto da View principal:
4 – Volte para a View e associe os atributos as campos de entrada:
5 – Na segunda View, adicione os atributos para o contexto e arraste para a página os elementos de texto e associe os atributos a seus valores:
6 – Na View Main, na barra de ferramentas escolha Web Dynpro Code Wizard, e na aba atributos escolha o atributo Cargo. Preencha o método WDDOBEFOREACTION para fique igual ao código abaixo:
7 – Ative o componente e teste sua aplicação, entre com o seu usuário e senha e preencha os campos menos o campo com o sinal de asterisco (campo obrigatório):
8 – Assim que você enviar a requisição o campo será validado no evento DoBeforeAction e se o campo tiver com seus valores iniciais, ou seja em branco uma mensagem será exibida e a navegação cancelada:
9 – Quando o campo requerido for satisfeito e a requisição reenviada, o processo será executado com sucesso:
Exemplo:
Neste exemplo utilizamos o evento WDDoBeforeAction para validar o atributo e exibir uma mensagem para que o usuário preencha o campo corretamente:
Abap
method WDDOBEFOREACTION .
DATA lo_nd_usuario_controler TYPE REF TO if_wd_context_node.
DATA lo_el_usuario_controler TYPE REF TO if_wd_context_element.
DATA ls_usuario_controler TYPE wd_this->Element_usuario_controler.
DATA lv_cargo TYPE wd_this->Element_usuario_controler-cargo.
* navigate from <CONTEXT> to <USUARIO_CONTROLER> via lead selection
lo_nd_usuario_controler = wd_context->get_child_node( name = wd_this->wdctx_usuario_controler ).
* @TODO handle non existant child
* IF lo_nd_usuario_controler IS INITIAL.
* ENDIF.
* get element via lead selection
lo_el_usuario_controler = lo_nd_usuario_controler->get_element( ).
* @TODO handle not set lead selection
IF lo_el_usuario_controler IS INITIAL.
ENDIF.
* get single attribute
lo_el_usuario_controler->get_attribute(
EXPORTING
name = `CARGO`
IMPORTING
value = lv_cargo ).
if lv_cargo is initial.
* get message manager
data lo_api_controller type ref to if_wd_controller.
data lo_message_manager type ref to if_wd_message_manager.
lo_api_controller ?= wd_This->Wd_Get_Api( ).
CALL METHOD lo_api_controller->GET_MESSAGE_MANAGER
RECEIVING
MESSAGE_MANAGER = lo_message_manager.
* report message
CALL METHOD lo_message_manager->REPORT_MESSAGE
EXPORTING
MESSAGE_TEXT = 'Cargo é um campo obrigatório'
CANCEL_NAVIGATION = ABAP_TRUE.
ENDIF.
endmethod.










