ORDAは4D V17の素晴らしい機能であることは、誰もが認めるところでしょう。考え方やプログラミングの革命のようなものです。4Dデータベースは、これまでと同じように見られることはないでしょう。
ORDAは、より短い時間で、より読みやすく、よりきれいなコードで、高度なアプリケーションを構想することを可能にします。ORDAの力を知っていただくために、私たちは3つのエピソードに分かれた一連のヒントを用意しました。この最初のエピソードでは、リンクはエンティティやエンティティコレクションとしてより考慮されるべきであり、リストボックスは選択項目や配列ではなく、エンティティ選択に基づくことができるようになったことを示します。
再帰的リレーションシップの使用
4DとORDAの威力を発揮するために、PEOPLE という1つのテーブルを使って、高度に再帰的なデータベースを使用することにします。
このテーブルには、5つの主要なフィールドがあります。姓、名、誕生日、性別、ID(これは明らかに一意です)。
そして、さらに3つのフィールドがあります。FatherID、MotherID、PartnerIDは、各人と他の3人が存在する場合(パートナー)、または既知の場合(母親と父親)に接続されます。
リレーションシップの定義
では、リレーションシップの定義に注目しましょう。両方向(1対N、N対1)において、リレーションシップには名前を付けることができる。ORDAを使うことで、これらの名前は非常に重要かつ有用なものになる。多対 一の方向では、名前は単なる文字列ではなく、リレーションシップが発生するPEOPLEエンティティと同じように、PEOPLEテーブルのエンティティ である。一対多の方向ではさらに、名前はエンティティの選択を表します。
PEOPLE.Fatherや PEOPLE.ChildrenAsFatherを使用して、一人の人(父親)や複数の人(子供)にアクセスすることができます。
新しいタイプのリストボックス
これまで、リストボックス(データソース)のコンテンツは、配列または選択範囲でした。これからは、コレクションや エンティティの選択項目からコンテンツを得ることもできます。では、リストボックスの中でどのようにエンティティセレクションを使用できるのか見てみましょう。
まず、新しい関数(ds )を使用して、エンティティセレクションを作成する必要があります。この例では、誕生日、姓、名の順に並んだPEOPLEを含む単純なエンティティセレクションを作成します。これは、以下のように1行で行うことができます。今のところ、ds についての知識はこれだけです !
people:=ds.PEOPLE.all().orderBy("Birthday asc, Lastname asc, Firstname asc").
people のエンティティを選択したら、それをリストボックスのプロパティとして設定すれば、ほぼ完了です。
“THIS “は素晴らしい
通常のリストボックスと同様に、各カラムの内容を定義する必要があります。この場合、エンティティセレクションを使用する限り、各カラムの内容は式として定義されます。そのために、新しいキーワード(“This“)を使います。これは、エンティティセレクションの現在の項目を参照するものです。
people 名前と誕生日を表示するには、次のような簡単な表現が可能です。
これです。Lastname
This.Firstname
This.Lastname + " " +This.Firstname
これです。Birthday
父の姓、母の誕生日、パートナーの名前を表示したい場合は、関係定義で指定したエンティティ名 (父、母、パートナーなど) を使って、次のように書けばよいのです。
これ。Father.Lastname
これ。Mother.Birthday
This.Parter.Firstname
もちろん、現在のpeople の Partner の 4 人の祖父母の名前を知りたければ、もっと踏み込んで書くこともできます。
これは
、Partner.Father.Father.Lastname
これ。Partner.Father.Mother.Lastname
これ。Partner.Mother.Father.Lastname
これ。Partner.Mother.Mother.Lastname
最後のステップ(今日のところは!)。この人の子供や兄弟の数も表示させたいのです。それは可能ですか?
もちろん、それはとても簡単です。子供については、リレーションシップの定義で定義されているChildrenAsFather エンティティセレクションを使用するだけです。他のエンティティ選択と同様に、長さプロパティがあります。このような式を定義するだけです。
ThisChildrenAsFather.length +This.ChildrenAsMother.length // どちらかがゼロになります。女性の場合はChildrenAsFather.length で、その逆も同様です。
兄弟姉妹の場合は、母親(または父親)に対して「上に行く」必要があり、子供に対しては「下に行く」必要があります。ですから、式は次のようになります。
これです。Mother.
ChildrenAsMother
.length - 1// minus 1 to remove the current people from the number of his/her siblings :-)
そして、これがその結果です…1行のコードもありません!
引き続き、ご期待ください。