sexta-feira, 4 de março de 2011

Design de Aplicações - Parte 7

Listboxes e ajudas de pesquisa

Uma listbox é óptima para colocar pequenas listas de valores. De forma a encontrar facilmente o código para associação desses valores, posiciono-o na subtela onde o campo está, num módulo PBO específico criado para o efeito. O seguinte código é chamado no evento PBO da subtela do topo:
form f_action_set_values .
  
staticsst_action type vrm_values.
  
datal_id type vrm_id,
        ls_action 
type vrm_value.
  
if st_action[] is initial.
    l_id 
'W_DATA-TOP-ACTION'.
    ls_action
-key 'A01'.
    ls_action
-text 'Fabrico'.
    
append ls_action to st_action.
    ls_action
-key 'A07'.
    ls_action
-text 'Desfabrico'.
    
append ls_action to st_action.
    
call function 'VRM_SET_VALUES'
      
exporting
        
id              l_id
        values          
st_action
      
exceptions
        id_illegal_name 
1
        
others          2.
  
endif.
endform.                    
" F_ACTION_SET_VALUES
A variável estática permite que o código seja executado apenas uma vez.
Por sua vez as ajudas de pesquisa que não existam no dicionário de dados podem ser determinadas recorrendo à função 'HELP_VALUES_GET_WITH_TABLE'.
process on value-request.
  
field w_data-item-item-charg module m_help_charg.

form f_help_charg .
*…
  call function 'HELP_VALUES_GET_WITH_TABLE'
    
exporting
      fieldname    
'MCHA'
      tabname      
'CHARG'
    
importing
      select_value 
<fs_item>-charg
    
tables
      
fields       lt_fields
      valuetab     
lt_values.
  w_items
-charg w_data-item-item-charg <fs_item>-charg.
endform.                    " F_HELP_CHARG

Validações de input

As validações de input devem ser associadas ao evento PAI ON REQUEST. É importante que os campos que estejam relacionados estejam associados num chain por dois motivos:
  1. Não repetir a execução do código
  2. Se despoletar uma mensagem de erro dentro do módulo então os campos do chain ficam em aberto para correcção

  chain.
    
field w_data-top-ref-mblnr.
    
field w_data-top-ref-mjahr.
    
module m_get_mblnr on chain-request.
  endchain
.

A validação deve ser reduzida ao mínimo nesta etapa. A verdadeira validação ocorre depois de se carregar no botão de gravar ou no botão de simulação caso exista. Não deve haver validações muito específicas mas caso existam o seu código deve ser disponibilizado por um método da classe de execução. Em caso de erro o método devolve uma excepção que pode ser tratada com uma mensagem de erro. Os métodos da classe de execução nunca devem despoletar mensagens de erro nem outros eventos de output.
Nem sempre são necessárias validações ao campo. Por exemplo, talvez não seja necessário validar se a data do documento está no passado se essa validação existe na gravação.

Sem comentários:

Enviar um comentário