Nesta lição, você usará o widget DataGrid para criar uma tabela. O widget DataGrid possui recursos avançados para interação e apresentação visual que o torna preferível em relação ao widget GridLayout para exibição de uma matriz de registros.
Na lição 4, você arrastou uma variável de registro para o editor para criar um widget GridLayout. Nesta lição, você arrastará uma matriz de registros para o editor, que por padrão cria um widget DataGrid.
historyResults



selectionMode = DataGridLib.SINGLE_SELECTION,O valor especificado assegura que o usuário possa selecionar apenas uma linha da grade em vez de diversas linhas.
selectionListeners ::= cellClicked,
Você acabou de atualizar uma propriedade do listener, o que faz com que uma matriz de funções seja executada na ordem de elemento de matriz. Em particular, você anexou uma função à matriz de funções associada com a propriedade selectionListeners. Você incluirá o código da nova função posteriormente nesta lição.
As funções do listener são executadas em resposta a uma ação do usuário, tal como um clique ou, em alguns casos, em resposta a uma chamada de função que seleciona ou limpa a seleção de uma linha ou que atualiza uma caixa de seleção.
, alignment = DataGridLib.ALIGN_RIGHTPor exemplo, a declaração para a coluna Principal agora se parece com o seguinte código:
new DataGridColumn {name = "loanAmount", displayName =
"Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT},
, formatters = [ formatDollars ]A declaração inteira agora se parece com o seguinte código:
new DataGridColumn {name = "loanAmount", displayName =
"Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT, formatters = [ formatDollars ]},
, formatters = [ DataGridFormatters.percentage ]
, formatters = [ formatDollars ]O código agora possui o seguinte conteúdo:

Em geral, a propriedade formatadores produz uma matriz de nomes da função. As funções podem ser predefinidas ou é possível gravar funções customizadas. Por exemplo, a função percentage é fornecida na biblioteca DataGridFormatters que está incluída no projeto com.ibm.egl.rui.widgets.
InfoBus.subscribe("mortgageApplication.mortgageCalculated",
addResultRecord);
Como antes, use InfoBus para chamar a função
quando o serviço retornar um novo cálculo.// Update the grid to include the latest mortgage calculation function addResultRecord(eventName STRING in, dataObject ANY in) resultRecord MortgageCalculationResult = dataObject as MortgageCalculationResult; historyResults.appendElement(resultRecord); historyResults_ui.data = historyResults as ANY[]; endAqui, você lança um valor de entrada no registro MortgageCalculationResult. Em seguida, você anexa os novos resultados à matriz de resultados e atualiza a propriedade dados. Essa atualização provoca a atualização do widget.
// Publish an event to the InfoBus whenever the user selects an
old calculation
function cellClicked(myGrid DataGrid in)
updateRec MortgageCalculationResult = myGrid.getSelection()[1]
as MortgageCalculationResult;
InfoBus.publish("mortgageApplication.mortgageResultSelected",
updateRec);
end
A função recupera a linha da grade de dados selecionada
pelo usuário e fornece essa linha ao Infobus. O Infobus, por sua vez,
chama uma função em qualquer manipulador que assinou o evento denominado
“mortgageApplication.mortgageResultSelected.”function formatDollars(class string, value string, rowData any in) value = mortgageLib.formatMoney(value); endO valor do segundo parâmetro está disponível para o código de tempo de execução do EGL porque o modificador de parâmetro é InOut por padrão.
Observe que você esta reutilizando a função formatMoney da biblioteca mortgageLib.
Na próxima lição, você integrará este manipulador com o restante do aplicativo.