この3部作の 第1 話と第2話では、リストボックス、エンティティ、エンティティセレクションを使って、ORDAの基本を紹介しました。また、異なるデータソースで類似のリストボックスを使用する方法と、リストボックスのグラフィックを向上させるMeta info式を使用する方法を紹介しました。
今日は、より少ないコードで、より楽しい時間を過ごしましょう。
より少ないコードで、より楽しく
前に説明した再帰的な構造に基づいて、今日の目標は家系図を表示することです(下図参照)。
各夫婦について、その両親、祖父母、子供(もしいれば)を表示したいと思います。
左のリストは、4人の両親と8人の祖父母を持つすべてのカップルを表示します。これが大きな課題です。
左側のカップルを表示するには、検索対象をパートナーのいる男性に限定します。
Gender=false // boolean field
and partner # null
しかし、両親がいることを確認する必要があります。
and Father # null
and Mother # null
そして、祖父母のチェックなどなど。
マジックとロジック
4D(とORDA)を使ってXのパートナーに4人の祖父母を見つけることができれば、Xにはパートナーがいて、そのパートナーには父親と母親がいることになります。というわけで、結局はとてもシンプルなのです。夫婦のそれぞれに 4人の祖父母がいることを確認するだけです
Gender=false // search for men only (his partner's name will be displayed next to his)
and Father.Father # null // check for the man's grandparents
and Father.Mother # null
and Mother.Father # null
and Mother.Mother # null
and Partner.Father.Father # null // check for his partner's grandparents
and Partner.Father.Mother # null
and Partner.Mother.Father # null
and Partner.Mother.Mother # null
完了!これは、フォームの左側で使用されるエンティティ選択です。
コードはもういらない?
ほとんどそうです。後で管理する子供たちを除けば、もうコードは必要ありません。
リストボックスのプロパティに、current itemというプロパティがあるのを覚えておいてください。これに名前をつけて、使ってみてください。この場合、現在のアイテムは「man」です。リストボックスの任意の行をクリックすると、すぐに男のエンティティが更新され、コーディングなしで彼の属性を使用および表示することができます。
彼の属性だけでなく、関連するエンティティの属性や、関連するエンティティの属性もすべて表示されるので、フォームに次のような式を表示することができます。
man.Lastname
man.Father.Lastname
man.Father.Father.Lastame
man.Partner.Lastname
man.Partner.Father.Lastname
man.Partner.Father.Father.Lastname
あるいはもっと複雑な表現で
man.Father.Father.Lastname+" "+man.Father.Father.Firstname
先ほども言ったとおりです。コードなし!式だけです!ただ、コピー&ペーストを使うときには注意が必要です……時として、それが最大の敵となることがあります 🙂
子供の場合はどうでしょうか?
これも非常に簡単です。On selection change イベントで、子供のエンティティセレクションを作成し (エピソード 2 を参照)、このエンティティセレクションをループして、名前と画像を作成します。
: (Form event=On Selection Change)
childrenPortraits:=childrenPortraits*0 // erase picture
childrenNames:="" // erase names
$_children:=GetChildren (men)// get the entity selection of children
For each ($child;$_children)
COMBINE PICTURES(childrenPortraits;childrenPortraits;Horizontal concatenation;$child.Portrait_0)
childrenNames:=childrenNames+$child.Firstname+" ("+String($child.Birthday)+") "
End for each
おわりに(あるいは始まり)
この3つのエピソードで、ORDAのパワーをほんの少しお見せすることができました。私たちが示した結果のいくつかは、通常のシンプルな方法で4Dを使用して得ることはほぼ不可能でした。同じ結果に到達するためには、膨大な数のコード行、配列、メモリ、計算が必要だったでしょう。私たちは、すべての4DデータベースをORDAで書き直すべきだとは言いませんが(「壊れていないなら、直さない」というのは私の好きな言葉の一つです)、あなたの将来のデータベースや現在のデータベース(改善が必要なら)にとって、ORDAが大きな助けと時間の節約になることは明らかです!ORDAを使えば、あなたのデータベースがより良いものになるでしょう。