ORDA – Genealogy – エピソード3

Deeplからの自動翻訳

この3部作の 第1 話と第2話では、リストボックス、エンティティ、エンティティセレクションを使って、ORDAの基本を紹介しました。また、異なるデータソースで類似のリストボックスを使用する方法と、リストボックスのグラフィックを向上させるMeta info式を使用する方法を紹介しました。

今日は、より少ないコードで、より楽しい時間を過ごしましょう。

ダウンロード Genealogy – エピソード3

より少ないコードで、より楽しく

前に説明した再帰的な構造に基づいて、今日の目標は家系図を表示することです(下図参照)。

各夫婦について、その両親、祖父母、子供(もしいれば)を表示したいと思います。

左のリストは、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」です。リストボックスの任意の行をクリックすると、すぐに男のエンティティが更新され、コーディングなしで彼の属性を使用および表示することができます。

 

blank

彼の属性だけでなく、関連するエンティティの属性や、関連するエンティティの属性もすべて表示されるので、フォームに次のような式を表示することができます。

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を使えば、あなたのデータベースがより良いものになるでしょう。

 

 

Roland Lannuzel
- プロダクトオーナー&4Dエキスパート -電子工学を学んだ後、産業用ITの分野で開発者兼コンサルタントとして、さまざまなデータベースやテクノロジーを使って顧客のためのソリューションを構築。80年代後半に4Dに惚れ込み、会計、請求書作成、メールシステムなどのビジネスアプリケーションの作成に4Dを使用してきました。現在も、新機能やデータベース開発ツールの定義など、4Dの未来を積極的に切り開いています。