Variáveis
Na definição de variáveis é preciso ter o cuidado de evitar definir variáveis que podem ser locais como variáveis globais e reduzir ao máximo o número de variáveis. Algumas variáveis não podem ser evitadas como o ok_code, tableview’s e tabstrip’s.
Muitas vezes levo esta redução ao extremo e para além das que me são impostas apenas crio duas variáveis globais, uma para identificar o próprio documento, tipicamente uma instância da classe de execução e outra com os dados das telas. No nosso exemplo tenho apenas uma variável para a os dados de tela e execução:
data: w_data type t_data.
Esta variável está organizada de forma a conter toda a informação do programa com a seguinte estrutura (alguns campos foram removidos):
| Variavel | 1º nivel | 2º nível | 3º nível |
|
| w_data | title | action | Dados do título |
| refdoc |
| fullname |
| screens | All | nº de subtela activo |
| top |
| header |
| refdoc |
| items |
| Item |
| top | action | Dados da subtela topo |
| refdoc |
| werks |
| lgort |
| ref | ebeln |
| vbeln |
| mblnr |
| mjahr |
| header | budat | Dados da subtela de cabeçalho |
| bldat |
| xblnr |
| items[] | zeile | Dados da subtela de items |
| expand |
| matnr |
| maktx |
| menge |
| meins |
| werks |
| Lgort |
| charg |
| bwart |
| item | tabix | Dados da subtela de item |
| Item |
| equi[] | sernr |
| instance | Instância de execução |
Portanto, a variável usa uma estrutura complexa para guardar a informação que é apresentada no ecran em determinado momento e ainda a referência para a instância da classe de execução. Esta instância há-de conter os dados reais.
Portanto, durante a execução do programa o evento PBO passa os dados da instância para os dados da tela e no evento PAI passa os dados modificados da tela para a instância.
Alguns campos como a descrição do material podem não existir na instância e são calculados para os dados da tela sempre que a chave, neste caso o código de material, é alterada.
É muito importante manter presente que as conversões de dados ocorrem logo após a introdução do dado pelo utilizador. Os dados têm de estar sempre em formato interno depois do input. Os campos da tela permitem associar a regra de conversão, logo não é preciso usá-la mais tarde.
O mesmo é válido para input por ficheiro, ou seja, após ler o ficheiro deve-se converter imediatamente os dados para formato interno.
Também não menos importante, o output deve ser sempre em formato externo e de acordo com as regras do utilizador.
Todos os campos de quantidade ou valor devem ter unidade de medida ou moeda. Essa unidade tem de ser apresentada claramente ao utilizador.
Elementos ALV
Os elementos ALV vieram trazer uma nova dimensão à forma de visualização de dados a à capacidade do utilizador intervir no que vê. No entanto nem sempre não são os mais indicados para a introdução de dados. Por exemplo, os campos editáveis dos ALV TreeView são de texto, não permitem o uso directo de rotinas de conversão nem o uso associado de unidades de medida ou moeda e o copy&paste para múltiplas células não funciona.
O ALV mais útil para aplicações é provavelmente o ALV Grid, sendo que se aproxima bastante do Tablecontrol, permitindo até em alguns casos um interface mais amigável. O ALV TreeView é útil por exemplo para listar documentos ou fluxos a processar.
É preciso um cuidado adicional na aplicação para estes elementos. Se a transacção for disponibilizada também por ITS então os componentes gráficos da tela não podem ser complexos. Entre os que não podem ser usados estão os ALV.