4D v17から、マルチレベル・コレクションのコンテンツを、異なるリストボックスに簡単に表示することができるようになりました。つまり、複数のリストボックスをバインドして、ネストされた詳細を表示することができます…一行のコードも必要ありません!これは、オブジェクトまたはコレクションを別のリスト ボックスのデータ ソースとして使用することで実現できます。
新しいリストボックスのコレクションタイプには、“Current item”と“Selected items”のプロパティが追加されています。Current item “プロパティはオブジェクトを取得でき、”Selected item “プロパティはコレクションを返すことを覚えておいてください。
では、具体的な例として、血液検査の結果を表示する方法を確認してみましょう
中身は?
最初のレベルでは、患者の名前、検査の日付、医師の名前があります。そして、結果はカテゴリーごとに分類されています。各カテゴリには、結果値、最小値、最大値、および単位を持つ検査のリストがあります。
データ構造としては、第一レベルの属性( firstname,lastname など)を持つオブジェクトと、カテゴリオブジェクトのコレクションがあります。そして、各カテゴリオブジェクトに対して、テストオブジェクトのコレクションがある。要約すると
{ "lastname": "Beal", "firstname": "Estele", ..., "results": [{ "category": "Metabolic", "test": [ { "name": "Albumin", "value": ... }, { "name": ... }] }, { "category": "Lipoprotein", "test": [ { "name": "HDL", "value": ... }, { "name": ... }] }, {...}] }
以下のスキーマは、オブジェクト入力の横にある2つのリストボックスに結果がどのように表示されるかを記述しています。これだけのことが……一行のコードもなしにできるのです!実際、すべてのプロパティはフォームオブジェクトの中で定義されており、コーディングが必要なのは結果をロードするときだけです。以上、皆さん、いかがでしたか??
ご覧のように、この例では血液検査の結果を読みやすく、理解しやすくしています。特に、間違ったデータを色鮮やかにハイライトしている場合はなおさらです。
そのために、以下のDecorateメソッドをリストボックスのプロパティのmeta式に関連付けました。
If ( . >( . *2)) := . . (( . > . ) | ( . < . )) := . . ThisvalueThismax
$0FormmetadoubleOutOfRange
Else
IfThisvalueThismaxThisvalueThismin
$0FormmetaoutOfRange
Else := . .
$0FormmetaperfectValue
End if
End if