entitySelection.extract( ) メソッドは、propertyPath 引数で指定した値をエンティティセレクションから取得し、その値を格納したコレクションを返します。
propertyPath では、以下のものを指定することができます:
- スカラーデータクラス属性
- リレートされたエンティティ(単数)
- リレートされたエンティティ(複数)
propertyPath 引数が無効だった場合、空のコレクションが返されます。
このメソッドは2種類のシンタックスを受け入れます。
このシンタックスを使用すると、entitySelection.extract( ) はエンティティセレクションの中の、propertyPath 引数で指定した値のコレクションを作成して返します。
デフォルトで、propertyPath で指定した値がnull または未定義のエンティティは返されるコレクション内では無視されます。option 引数にck keep null 定数を渡すことで、これらの値を、返されたコレクション内にnull 要素として含めるようにすることができます。
このシンタックスを使用すると、entitySelection.extract( ) は引数で指定したpropertyPath プロパティを持つコレクションを作成し返します。このコレクションのそれぞれの要素は、targetPath 引数のプロパティと、対応するpropertyPath 引数のプロパティを格納したオブジェクトです。Null 値は保持されます(option 引数はこのシンタックスでは無視されます)。
複数のpropertyPath 引数が渡された場合、それぞれに対してtargetPath 引数を渡す必要があります。有効な[propertyPath 、 targetPath]のペアのみが取得されます。
注: []記法を使用してアクセスしたエンティティのコレクションのエンティティは、データベースからは再読み込みはされません。
以下のテーブルとリレーションが与えられている場合を考えます:

C_COLLECTION($firstnames;$addresses;$mailing;$teachers)
C_OBJECT($status)
$firstnames:=ds.Teachers.all().extract("firstname")
$addresses:=ds.Teachers.all().extract("address";ck keep null)
$mailing:=ds.Teachers.all().extract("lastname";"who";"address";"to")
$mailing:=ds.Teachers.all().extract("lastname";"who";"address.city";"city")
$teachers:=ds.Address.all().extract("city";"where";"teachers";"who")
$teachers:=ds.Address.all().extract("teachers")