改良された .distinct() 関数

データ要素のユニークなリストを取得することは、データ操作において常に役に立ちます。各値の出現回数を取得することが不可欠な場合もあります。CollectionEntitySelection クラスの distinct 関数を使うと、ユニーク値のリストを取得できます。4D v20 では、各ユニーク値の出現回数の取得も可能になりました。

それだけではありません!

データベースでオブジェクトを使用して、ユーザーが入力したカスタムデータを保存することができます。これに対応するため、コード側では、このオブジェクトが持つパスのすべてを把握したいところです。 EntitySelection クラスに追加された distinctPaths 関数で、これが可能になりました。

これらの新しい関数について、くわしく紹介していきます。

distinctの新しいオプション

構文は、CollectionEntitySelection の両クラスで同じです。option という名の第2パラメーターに ck count values または dk count values 定数をそれぞれ渡すことで、valuecount という二属性のコレクションを取得できます。

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フォーラムでご意見・ご感想をお寄せください。皆様のフィードバックは、私たちが皆様のニーズをよりよく理解し、製品やサービスを改善し続けるのに役立ちます。

Vanessa Talbot
- プロダクトオーナー - Vanessa Talbotは、2014年6月に4Dプログラムチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。入社以来、4Dにおける主要機能の定義に関わってきました。プリエンプティブ/マルチスレッドの新機能の大部分と、非常に複雑なテーマである組み込みアプリケーションの新アーキテクチャに取り組んできました。VanessaはTelecom Saint-Etienneで学位を取得後、Criminal Research Institute でオーディオビジュアル部門の開発者としてキャリアをスタートさせました。また、メディアや医療の分野でも、技術サポートやプロダクションの分野で働いてきました。