Começando com 4D v17, o conteúdo de uma colecção multinível pode facilmente ser exibido em diferentes caixas de listagem. O que significa que se podem ligar várias caixas de listagem para exibir detalhes aninhados … sem uma única linha de código! Isto pode ser conseguido simplesmente utilizando um objecto ou uma colecção como fonte de dados para outra caixa de listagem!
Com o novo tipo de colecção de caixas de listagem, as propriedades “Item actual” e “Itens seleccionados” foram adicionadas. Tenha em mente que a propriedade “Item actual” permite obter um objecto, enquanto que a propriedade “Item seleccionado” devolve uma colecção.
Vamos verificar um exemplo concreto e ver como podemos exibir os resultados de um teste de sangue!
O que está dentro?
No primeiro nível, temos o nome do paciente, a data do exame, e o nome do médico. Em seguida, os resultados são classificados por categoria. Para cada categoria, há uma lista de exames com o valor do resultado, o min, o max, e a unidade.
Em termos de estrutura de dados, temos um objecto com alguns atributos de primeiro nível(ou seja, primeiro nome, último nome, etc.), bem como uma colecção de objectos de categoria. Depois, para cada objecto de categoria, temos uma colecção de objectos de teste. Para resumir:
{ "lastname": "Beal", "firstname": "Estele", ..., "results": [{ "category": "Metabolic", "test": [ { "name": "Albumin", "value": ... }, { "name": ... }] }, { "category": "Lipoprotein", "test": [ { "name": "HDL", "value": ... }, { "name": ... }] }, {...}] }
O esquema abaixo descreve como os resultados são apresentados em duas caixas de listagem ao lado da entrada do objecto. Tudo isto … sem uma única linha de código! De facto, todas as propriedades são definidas nos objectos de forma, a única parte onde alguma codificação é necessária é quando se carrega o resultado. É isso mesmo, pessoal! ?
Como pode ver, este exemplo facilita a leitura e compreensão dos resultados das análises ao sangue, especialmente quando os dados incorrectos são realçados com um salpico de cor.
Para tal, associamos o seguinte método de Decoração com a meta expressão na propriedade da caixa de listagem:
If (This.value>(This.max*2)))
$0 :=Form.meta.doubleOutOfRange.
Else
If ((This.value>This.max) | (This.valuemeta <This.min))
$0 :=Form. .outOfRange
Else
$0 :=Form.meta.perfectValue
End if
End if