行をクリックすることで以前の計算を表示可能な表を作成します。
この演習では、DataGrid ウィジェットを使用して表を作成します。 DataGrid ウィジェットには、相互作用およびビジュアル表示のための拡張機能があるため、レコードの配列を表示する GridLayout ウィジェットよりも適しています。
演習 4 では、レコード変数をエディターにドラッグして GridLayout ウィジェットを作成しました。 この演習では、デフォルトで DataGrid ウィジェットを作成するレコード配列をエディターにドラッグします。
historyResults



selectionMode = DataGridLib.SINGLE_SELECTION,
この指定値により、ユーザーがグリッド内で複数行ではなく、1 行だけ選択できるようになります。selectionListeners ::= cellClicked,
これで配列エレメント順に実行される関数の配列を取得するリスナー・プロパティー が更新されました。特に、selectionListeners プロパティーと関連付けられた関数の配列に関数が追加されました。 この新規関数は、この演習の後半でコーディングします。
リスナー関数は、クリックなどのユーザー・アクションに応答して、または場合によっては、行の選択および選択解除やチェック・ボックスの更新を行う関数呼び出しに応答して実行されます。
, alignment = DataGridLib.ALIGN_RIGHT
例えば、「Principal」列の宣言は、以下のコードのようになります。
new DataGridColumn {name = "loanAmount", displayName = "Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT},
, formatters = [ formatDollars ]
宣言全体では、以下のコードのようになります。
new DataGridColumn {name = "loanAmount", displayName = "Principal", width = 80,
alignment = DataGridLib.ALIGN_RIGHT, formatters = [ formatDollars ]},
, formatters = [ DataGridFormatters.percentage ]
, formatters = [ formatDollars ]
コードの内容は以下のようになります。

通常、formatters プロパティーは関数名の配列を取得します。 事前定義された関数を使用することも、カスタム関数を作成することもできます。 例えば、percentage 関数は、com.ibm.egl.rui.widgets プロジェクトに含まれている DataGridFormatters ライブラリー内にあります。
InfoBus.subscribe("mortgageApplication.mortgageCalculated", addResultRecord);
以前と同様に、サービスが新しい計算を返す際に、InfoBus を使用して関数を呼び出します。// 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[];
end
ここでは、受け取った値を MortgageCalculationResult レコードにキャストします。
次に、結果の配列に新しい結果を追加して、data プロパティーを更新します。
その更新により、ウィジェットが最新表示されます。// 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
ユーザーが選択したデータ・グリッド行を関数が取得し、その行を InfoBus に渡します。
次に、「mortgageApplication.mortgageResultSelected」という名前のイベントにサブスクライブしたすべてのハンドラーで、InfoBus が関数を呼び出します。function formatDollars(class string, value string, rowData any in)
value = mortgageLib.formatMoney(value);
end
2 つ目のパラメーターの値は、そのパラメーターの修飾子がデフォルトで InOut であるために、EGL ランタイム・コードから使用できます。
mortgageLib ライブラリーの formatMoney 関数を再利用していることに注意してください。
次の演習では、このハンドラーをアプリケーションの他の部分と統合します。