データ要素のユニークなリストを取得することは、データ操作において常に役に立ちます。各値の出現回数を取得することが不可欠な場合もあります。Collection と EntitySelection クラスの distinct 関数を使うと、ユニーク値のリストを取得できます。4D v20 では、各ユニーク値の出現回数の取得も可能になりました。
それだけではありません!
データベースでオブジェクトを使用して、ユーザーが入力したカスタムデータを保存することができます。これに対応するため、コード側では、このオブジェクトが持つパスのすべてを把握したいところです。 EntitySelection クラスに追加された distinctPaths 関数で、これが可能になりました。
これらの新しい関数について、くわしく紹介していきます。
distinctの新しいオプション
構文は、Collection と EntitySelection の両クラスで同じです。option という名の第2パラメーターに ck count values または dk count values 定数をそれぞれ渡すことで、value と count という二属性のコレクションを取得できます。
option を渡さない場合には、いままで同様にユニーク値のコレクションだけが取得されます。
Collectionクラスの例
たとえば、カテゴリーのコレクションについてユニーク値のリストと、各カテゴリの出現回数を取得するには:
var $col; $category : Collection
$category:=New Collection("Family";"Friend";"Work";"Family";"Personal")
$col:=$category.distinct(ck count values)
結果は以下のとおりです:
[ {"value":"Family","count":2}, {"value":"Friend","count":1}, {"value":"Personal","count":1}, {"value":"Work","count":1} ]
ENTITYSELECTIONクラスの例
たとえば、連絡先を格納する Contact データクラスの国リストと国ごとの連絡先数を取得するには:
var $countries : Collection
$countries:=ds.Contact.all().distinct("country";dk count values)
結果は以下のとおりです:
[ {"value":"France","count":2}, {"value":"Morocco","count":10}, {"value":"Germany","count":3} ]
新しいDISTINCTPATHS関数
EntitySelection クラスの distinctPaths 関数は、インデックス付きのオブジェクト型フィールドで見つかった異なるパスのリストを返します。引数として、インデックス付きオブジェクト型フィールドの名前を渡す必要があります。この関数は、DISTINCT ATTRIBUTE PATHS コマンドと同等です。
例題
たとえば、”address” オブジェクト型フィールドが持つパスをすべて取得するには:
var $paths : Collection
$paths:=ds.Contact.all().distinctPaths("address")
という結果になります:
[ "Number", "StreetAddress", "ExtendedAddress", "City", "ZipCode", "Country" ]
次は…
4Dフォーラムでご意見・ご感想をお寄せください。皆様のフィードバックは、私たちが皆様のニーズをよりよく理解し、製品やサービスを改善し続けるのに役立ちます。