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.