EntitySelection
エンティティセレクションとは、同じ データクラス に所属する一つ以上の エンティティ への参照を格納しているオブジェクトのことです。 エンティティセレクションは、データクラスから 0個、1個、あるいは X個のエンティティを格納することができます (X はデータクラスに格納されているエンティティの総数です)。
.all()
、.query()
などの DataClass
クラス の関数や、.and()
、orderBy()
など EntitySelectionClass
クラス自身の関数を用いて、既存のセレクションからエンティティセレクションを作成することができます 。 また、dataClass.newSelection()
関数または Create entity selection
コマンドを使用して、空のエンティティセレクションを作成することもできます。
概要
Create entity selection
Create entity selection ( dsTable : Table { ; settings : Object } ) : 4D.EntitySelection
引数 | タイプ | 説明 | |
---|---|---|---|
dsTable | Table | -> | エンティティセレクションの元となるカレントセレクションが属する 4Dデータベースのテーブル |
settings | Object | -> | ビルドオプション: context |
戻り値 | 4D.EntitySelection | <- | 指定したテーブルに対応するデータクラスのエンティティセレクション |
|
説明
Create entity selection
コマンドは、dsTable で指定したテーブルに対応するデータクラスの 追加可能な 新規エンティティセレクションを、同テーブルのカレントセレクションに基づいてビルドして返します。
ソートされたカレントセレクションの場合、順列のある エンティティセレクションが作成されます (カレントセレクションの並び順が受け継がれます)。 カレントセレクションがソートされていない場合、順列のないエンティティセレクションが作成されます。
ds
において dsTable が公開されていない場合には、エラーが返されます。 リモートデータストアの場合は、このコマンドは使用できません。
任意の settings には、以下のプロパティを持つオブジェクトを渡せます:
プロパティ | タイプ | 説明 |
---|---|---|
context | Text | エンティティセレクションに適用されている 最適化コンテキスト のラベル。 |
例題
var $employees : cs.EmployeeSelection
ALL RECORDS([Employee])
$employees:=Create entity selection([Employee])
// $employees エンティティセレクションには、
// Employee データクラスの全エンティティへの参照が格納されています
参照
[index]
履歴
リリース | 内容 |
---|---|
17 | 追加 |
[index] : 4D.Entity
説明
EntitySelection[index]
記法を使用すると、 標準のコレクションシンタックスを使用してエンティティセレクション内のエンティティにアクセスすることができます。取得したいエンティティの位置を index に渡します。
対応するエンティティはデータストアから再読み込みされる点に注意してください。
index には、0 と .length
-1 の範囲内で数値を指定することができます。
- index が範囲外だった場合、エ ラーが返されます。
- index がドロップされたエンティティに対応していた場合、Null値が返されます。
警告:
EntitySelection[index]
は代入不可の式です。これは、.lock()
や.save()
などの関数において、編集可能なエンティティ参照として使用することはできない、ということを意味します。 エンティティを操作するには、戻り値を変数などの代入可能な式に割り当てる必要があります。 例:
$sel:=ds.Employee.all() // エンティティセレクションを作成
// 無効なコード:
$result:=$sel[0].lock() //動作しません
$sel[0].lastName:="Smith" //動作しません
$result:=$sel[0].save() //動作しません
// 有効なコード:
$entity:=$sel[0] //OK
$entity.lastName:="Smith" //OK
$entity.save() //OK
例題
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1";"H@")
$employee:=$employees[2] // $employees エンティティセレクションの3番目のエンティティがデータベースからリロードされます。
.attributeName
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.attributeName : Collection
.attributeName : 4D.EntitySelection
説明
データクラス属性はすべてエンティティセレクションのプロパティとして利用可能で、 エンティティセレクション内の属性値の "投影" を返します。 戻り値は、属性の種類 (kind が storage
あるいは relation
) によって、コレクションあるいは新しいエンティティセレクションの どちらかになります。
- attributeName で指定した属性がストレージ型の場合:
.attributeName
は attributeName と同じ型の値のコレクションを返します。 - attributeName で指定した属性がリレートエンティティ型の場合:
.attributeName
は attributeName と同じ型のリレート値の新規エンティティセレクションを返します。 重複しているエンティティは取り除かれます (返されるのは順列なしのエンティティセレクションです)。 - attributeName で指定した属性がリレートエンティティズ型の場合:
.attributeName
は attributeName と同じ型のリレート値の新規エンティティセレクションを返します。 重複しているエンティティは取り除かれます (返されるのは順列なしのエンティティセレクションです)。
エンティティセレクションのプロパティとしてリレーション属性が使用されると、返される結果は、たとえ返されるエンティティが一つだけだとしても、常に新しいエンティティセレクションとなります。 エンティティが何も返ってこない場合には、返されるのは空のエンティティセレクションです。
属性がエンティティセレクション内に存在しない場合、エラーが返されます。
例題 1
ストレージ値の投影:
var $firstNames : Collection
$entitySelection:=ds.Employee.all()
$firstNames:=$entitySelection.firstName // firstName は文字列型です
返されるのは文字列のコレクションとなります。例:
[
"Joanna",
"Alexandra",
"Rick"
]
例題 2
リレートエンティティの投影:
var $es; $entitySelection : cs.EmployeeSelection
$entitySelection:=ds.Employee.all()
$es:=$entitySelection.employer // employer は Companyデータクラスにリレートされています
返されるオブジェクトは、重複してるもの (あれば) を取り除いた、Company のエンティティセレクションです。
例題 3
リレートエンティティズの投影:
var $es : cs.EmployeeSelection
$es:=ds.Employee.all().directReports // directReports は Employee データクラスにリレートされています
返されるオブジェクトは、重複してるもの (あれば) を取り除いた、Employee のエンティティセレクションです。
.add()
履歴
リリース | 内容 |
---|---|
18 R5 | 追加可能なエンティティセレクションのみをサポート |
17 | 追加 |
.add( entity : 4D.Entity ) : 4D.EntitySelection
引数 | タイプ | 説明 | |
---|---|---|---|
entity | 4D.Entity | -> | エンティティセレクションに追加するエンティティ |
戻り値 | 4D.EntitySelection | -> | 追加エンティティを含むエンティティセレクション |
|
説明
.add()
関数は、 entity に渡したエンティティをエンティティセレクションに追加し、編集されたエンティティセレクションを返します。
このコマンドは、元のエンティティセレクションを変更します。
警告: エンティティセレクションは 追加可能 のものでなければなりません。つまり .newSelection()
あるいは Create entity selection
などで作成されたものでなければならないということです。そうでない場合、.add()
はエラーを返します。 共有可能なエンティティセレクションはエンティティの追加を受け付けないからです。 詳細については 共有可能/追加可能なエンティティセレクション を参照ください。
- エンティティセレクションが順列ありの場合、entity 引数のエンティティはセレクションの最後に追加されます。 同じエンティティへの参照がそのエンティティセレクションにすでに所属していた場合、エンティティは重複することになり、同エンティティの新しい参照が追加されます。
- エンティティセレクションが順列なしの場合、entity 引数のエンティティはセレクションの不特定の場所へ追加され、順番付けはされません。
詳細については、エンティティセレクションの順列あり/順列なし を参照ください。
編集されたエンティティセレクションが関数から返されるため、関数の呼び出しをつなげることができます。
entity 引数のエンティティ とエンティティセレクションが同じデータクラスに属していない場合、エラーが発生します。 追加するエンティティが Null であった場合には、エラーは発生しません。
例題 1
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1";"S@") // 共有可能なエンティティセレクションです
$employee:=ds.Employee.new()
$employee.lastName:="Smith"
$employee.save()
$employees:=$employees.copy() // 追加可能なエンティティセレクションを取得します
$employees.add($employee) // $employee エンティティが $employees エンティティセレクションへと追加されます
例題 2
関数の呼び出しをつないでいくことができます:
var $sel : cs.ProductSelection
var $p1;$p2;$p3 : cs.ProductEntity
$p1:=ds.Product.get(10)
$p2:=ds.Product.get(11)
$p3:=ds.Product.get(12)
$sel:=ds.Product.query("ID > 50")
$sel:=$sel.copy()
$sel:=$sel.add($p1).add($p2).add($p3)
.and()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.and( entity : 4D.Entity ) : 4D.EntitySelection
.and( entitySelection : 4D.EntitySelection ) : 4D.EntitySelection
引数 | タイプ | 説明 | |
---|---|---|---|
entity | 4D.Entity | -> | 交差するエンティティ |
entitySelection | 4D.EntitySelection | -> | 交差するエンティティセレクション |
戻り値 | 4D.EntitySelection | <- | AND論理演算子による共通部分の結果を格納する新しいエンティティセレクション |
|
説明
.and()
関数は、 エンティティセレクションと entity あるいは entitySelection 引数をAND論理演算子を使用して結合します。戻り値は、エンティティセレクションと引数の両方から参照されているエンティティのみを格納した、順列なしの新規エンティティセレクションです。
- entity 引数を渡した場合、引数のエンティティをエンティティセレクションと結合させることになります。 エンティティがエンティティセレクションに属している場合、そのエンティティのみを格納する新しいエンティティセレクションが返されます。 そうでない場合、空のエンティティセレクションが返されます。
- entitySelection 引数を渡した場合、二つのエンティティセレクションを結合させることになります。 両方のセレクションから参照されているエンティティのみを格納する新しいエンティティセレクションが返されます。 重複するエンティティがなかった場合、空のエンティティセレクションが返されます。
順列ありと順列なしのエンティティセレクション を比較することができます。 返されるセレクションは常に順列なしのものになります。
元のエンティティセレクションあるいは entitySelection 引数が空であった場合、あるいはentity 引数が Null であった場合、空のエンティティセレクションが返されます。
元のエンティティセレクションおよび引数が同じデータクラスのものでない場合、エラーが返されます。
例題 1
var $employees; $result : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName = :1";"H@")
// $employees エンティティセレクションには、主キー710のエンティティと
// その他のエンティティが含まれます
// 例: "Colin Hetrick" / "Grady Harness" / "Sherlock Holmes" (主キー710)
$employee:=ds.Employee.get(710) // "Sherlock Holmes" を返します
$result:=$employees.and($employee) // $result は主キー710 ("Sherlock Holmes") の
// エンティティのみを格納するエンティティセレクション。
例題 2
"Jones" という名前で、New York に住んでいる従業員のセレクションを取得します:
var $sel1; $sel2; $sel3 : cs.EmployeeSelection
$sel1:=ds.Employee.query("name =:1";"Jones")
$sel2:=ds.Employee.query("city=:1";"New York")
$sel3:=$sel1.and($sel2)
.average()
履歴
リリース | 内容 |
---|---|
18 R6 | エンティティセレクションが空の場合には undefined を返します |
17 | 追加 |
.average( attributePath : Text ) : Real
引数 | タイプ | 説明 | |
---|---|---|---|
attributePath | Text | -> | 計算に使用する属性パス |
戻り値 | Real | <- | エンティティの属性値の算術平均 (相加平均) (エンティティセレクションがからの場合には undefined を返します) |
|
説明
.average()
関数は、 attributePath に指定した、エンティティセレクション内の null でない値の算術平均 (相加平均) を返します。
attributePath 引数として、評価する属性パスを渡します。
計算の対象となるのは数値のみです。 ただし、エンティティセレクションの attributePath 引数で指定したパスに異なる型の値が混在している場合、.average()
はすべてのスカラー要素を対象として平均値を算出します。
日付値は数値 (秒数) に変換され、平均を計算するのに使用されます。
エンティティセレクションが空の場合、または attributePath 引数に数値型の値が含まれていない場合には、.average()
は undefined を返します。
以下の場合には、エラーが返されます:
- attributePath はリレート属性である
- attributePath がエンティティセレクションデータクラス内に存在しない属性を指定している場合。
例題
給与が平均より高い従業員の一覧を取得します:
var $averageSalary : Real
var $moreThanAv : cs.EmployeeSelection
$averageSalary:=ds.Employee.all().average("salary")
$moreThanAv:=ds.Employee.query("salary > :1";$averageSalary)
.contains()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.contains( entity : 4D.Entity ) : Boolean
引数 | タイプ | 説明 | |
---|---|---|---|
entity | 4D.Entity | -> | 評価するエンティティ |
戻り値 | Boolean | <- | エンティティがエンティティセレクションに属している場合には true、そうでない場合は false |
|
説明
.contains()
関数は、 エンティティ参照がエンティティセレクションに属している場合には true を返します(それ以外の場合は false)。
entity 引数として、エンティティセレクション内で検索するエンティティを渡します。 エンティティが Null の場合、関数は false を返します。
entity 引数とエンティティセレクションが同じデータクラスのものでない場合、エラーが生成されます。
例題
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
$employees:=ds.Employee.query("lastName=:1";"H@")
$employee:=ds.Employee.get(610)
If($employees.contains($employee))
ALERT("主キー610のエンティティのラストネームは H で始まります。")
Else
ALERT("主キー610のエンティティのラストネームは H で始まりません。")
End if
.count()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.count( attributePath : Text ) : Real
引数 | タイプ | 説明 | |
---|---|---|---|
attributePath | Text | -> | 計算に使用する属性パス |
戻り値 | Real | <- | エンティティセレクション内の attributePath が null でない値の個数 |
|
説明
.count()
関数は、 エンティティセレクション内で attributePath に指定したパスの値が null でないエンティティの数を返します。
対象となるのはスカラー値のみです。 オブジェクトあるいはコレクション型の値は Null値とみなされます。
以下の場合には、エラーが返されます:
- attributePath はリレート属性である
- attributePath がエンティティセレクションデータクラス内に存在しない場合。
例題
ある会社の全従業員のうち、役職のない者を除いた人数を確認します:
var $sel : cs.EmployeeSelection
var $count : Real
$sel:=ds.Employee.query("employer = :1";"Acme, Inc")
$count:=$sel.count("jobtitle")
.copy()
履歴
リリース | 内容 |
---|---|
18 R5 | 追加 |
.copy( { option : Integer } ) : 4D.EntitySelection
引数 | タイプ | 説明 | |
---|---|---|---|
option | Integer | -> | ck shared : 共有可能なエンティティセレクションを返します |
戻り値 | 4D.EntitySelection | <- | エンティティセレクションのコピー |
|
説明
.copy()
関数は、 元のエンティティセレクションのコピーを返します。
この関数は、元のエンティティセレクションを変更しません。
option パラメーターが省略された場合はデフォルトで、たとえコピー元が共有可能なエンティティセレクションであったとしても、関数はデフォルトで追加可能な (共有不可の) 新規エンティティセレクションを返します。 共有可能なエンティティセレ クションを取得するには、option に ck shared
定数を渡します。
詳細については 共有可能/追加可能なエンティティセレクション を参照ください。
例題
フォームロード時に、商品データを格納するための新規の空エンティティセレクションを作成します:
Case of
:(Form event code=On Load)
Form.products:=ds.Products.newSelection()
End case
このエンティティセレクションに商品を登録したのちに、複数のプロセスでこの商品データを共有するには、 Form.products を共有可能なエンティティセレクションとしてコピーします:
...
// Form.products エンティティセレクションに商品データを登録します
Form.products.add(Form.selectedProduct)
Use(Storage)
If(Storage.products=Null)
Storage.products:=New shared object()
End if
Use(Storage.products)
Storage.products:=Form.products.copy(ck shared)
End use
End use
.distinct()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.distinct( attributePath : Text { ; option : Integer } ) : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
attributePath | Text | -> | 重複しない値を取得する属性のパ ス |
option | Integer | -> | dk diacritical : アクセント等の発音区別符号を無視しない評価 (たとえば "A" # "a") |
戻り値 | Collection | <- | 重複しない値のみを格納したコレクション |
|
説明
.distinct()
関数は、 attributePath に指定した、エンティティセレクション内の重複しない (異なる) 値のみを格納したコレクションを返します。
返されたコレクションは自動的に並べ替えられています。 Null 値は返されません。
attributePath 引数として、固有の値を取得したいエンティティ属性を渡します。 スカラー値 (テキスト、数値、ブール、あるいは日付) のみが可能です。 attributePath のパスが異なる型の値を格納しているオブジェクトプロパティであった場合、まず最初に型ごとにグループ分けされ、そのあとで並べ替えされます。 型は以下の順番で返されます:
- ブール
- 文字列
- 数値
- 日付
attributePath がオブジェクト内のパスの場合、[]
を使ってコレクションを指定できます (例題参照)。
デフォルトでは、アクセント等の発音区別符号を無視した評価が実行されます。 評価の際に文字の大小を区別したり、アクセント記号を区別したい場合には、option に dk diacritical
定数を渡します。
以下の 場合には、エラーが返されます:
- attributePath はリレート属性である
- attributePath がエンティティセレクションデータクラス内に存在しない場合。
例題
国名ごとに重複しない要素を格納するコレクションを取得します:
var $countries : Collection
$countries:=ds.Employee.all().distinct("address.country")
extra
がオブジェクト属性で、nicknames
がコレクションの場合:
$values:=ds.Employee.all().distinct("extra.nicknames[].first")
.drop()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.drop( { mode : Integer } ) : 4D.EntitySelection
引数 | タイプ | 説明 | |
---|---|---|---|
mode | Integer | -> | dk stop dropping on first error : 最初のドロップ不可エンティティで実行を止めます |
戻り値 | 4D.EntitySelection | <- | 成功した場合には空のエンティティセレクション、そうでない場合にはドロップ不可エンティティを格納したエンティティセレクション |
| | | |
説明
.drop()
関数は、 データストアのデータクラスに対応するテーブルから、エンティティセレクションに所属しているエンティティを削除します。 エンティティセレクションはメモリ内に残ります。
エンティティの削除は恒久的なものであり、取り消しはできません。 ロールバックで戻すことができるように、この関数はトランザクション内で呼び出すことが推奨されています。
.drop()
の実行中にロックされたエンティティに遭遇した場合、そのエンティティは削除されません。 デフォルトでは、メソッドはエンティティセレクション内のすべてのエンティティを処理し、ドロップ不可なエンティティはエンティティセレクション内に返します。 最初のドロップ不可なエンティティに遭遇した時点でメソッドの実行を止めたい場合は、mode パラメーターに dk stop dropping on first error
定数を渡します。
例題
dk stop dropping on first error
オプションを使用しない例:
var $employees; $notDropped : cs.EmployeeSelection
$employees:=ds.Employee.query("firstName=:1";"S@")
$notDropped:=$employees.drop() // $notDropped は削除されなかったエンティティをすべて格納したエンティティセレクションです
If($notDropped.length=0) // 削除アクションが成功し、すべてのエンティティが削除された場合
ALERT(String($employees.length)+" 件の社員データを削除しました。") // 削除されたエンティティはメモリの中には残っています
Else
ALERT("削除中に問題が発生しました。時間をおいて再度お試しください。")
End if
dk stop dropping on first error
オプションを使用する例:
var $employees; $notDropped : cs.EmployeeSelection
$employees:=ds.Employee.query("firstName=:1";"S@")
$notDropped:=$employees.drop(dk stop dropping on first error) //$notDropped は削除できなかった最初のエンティティを格納したエンティティセレクションです
If($notDropped.length=0) // 削除アクションが成功し、すべてのエンティティが削除された場合
ALERT(String($employees.length)+" 件の社員データを削除しました。") // 削除されたエンティティはメモリの中には残っています
Else
ALERT("削除中に問題が発生しました。時間をおいて再度お試しください。")
End if
.extract()
履歴
リリース | 内容 |
---|---|
18 R3 | 追加 |
.extract( attributePath : Text { ; option : Integer } ) : Collection
.extract( attributePath { ; targetPath } { ; ...attributePathN : Text ; targetPathN : Text } ) : Collection
引数 | タイプ | 説明 | |
---|---|---|---|
attributePath | Text | -> | 新しいコレクションに抽出する値の属性パス |
targetPath | Text | -> | 抽出先の属性パスあるいは属性名 |
option | Integer | -> | ck keep null : 返されるコレクションに null 属性を含めます (デフォルトでは無視されます)。 |
戻り値 | Collection | <- | 抽出した値を格納したコレクション |
|
説明
.extract()
関数は、 attributePath で指定した値をエンティティセレクションから抽出し、コレクションに格納して返します。
attributePath には、以下のものを指定することができます:
- スカラーデータクラス属性
- リレートエンティティ (単数)
- リレートエンティティズ (複数)
attributePath 引数が無効な場合、空のコレクションが返されます。
このメソッドは 2種類のシンタックスを受け入れます。
.extract( attributePath : Text { ; option : Integer } ) : Collection
このシンタックスを使用すると、.extract()
はエンティティセレクションの中の、attributePath 引数で指定された値のコレクションを作成して返します。
デフォルトで、attributePath で指定された値が null または未定義のエンティティは、返されるコレクション内では無視されます。 option パラメーターに ck keep null
定数を渡すと、これらの値は返されるコレクションに null 要素として格納されます。
- .kind = "relatedEntity" であるデータクラス属性は、エンティティのコレクションとして取得されます (重複したものも保持されます)。
- .kind = "relatedEntities" であるデータクラス属性は、エンティティセレクションのコレクションとして取得されます。
.extract ( attributePath ; targetPath { ; ...attributePathN ; ... targetPathN}) : Collection
このシンタックスを使用すると、.extract()
は attributePath 引数で指定されたプロパティを持つコレクションを作成して返します。 このコレクションのそれぞれの要素は、targetPath 引数のプロパティと、対応するattributePath 引数のプロパティを格納したオブジェクトです。 Null値はそのまま保持されます (このシンタックスでは option に引数を渡しても無視されます)。
複数の attributePath 引数が渡した場合、それぞれに対して targetPath 引数を渡す必要があります。 有効な [attributePath, targetPath] のペアのみが取得されます。
- .kind = "relatedEntity" であるデータクラス属性は、エンティティとして取得されます。
- .kind = "relatedEntities" であるデータクラス属性は、エンティティセレクションとして取得されます。
エンティティのコレクションにおいて、[ ] 記法を使用してアクセスしたエンティティは、データベースからは再読み込みさ れません。
例題
以下のテーブルとリレーションを前提とします:
var $firstnames; $addresses; $mailing; $teachers : Collection
//
//
// $firstnames は文字列のコレクション
$firstnames:=ds.Teachers.all().extract("firstname")
//
// $addresses は addressリレートエンティティのコレクション
// Null値も取得・保持されます
$addresses:=ds.Teachers.all().extract("address";ck keep null)
//
//
// $mailing は "who" および "to" のプロパティを持つオブジェクトのコレクション
// "who" プロパティの中身は文字列型
// "to" プロパティの中身はエンティティ型 (Address データクラス)
$mailing:=ds.Teachers.all().extract("lastname";"who";"address";"to")
//
//
// $mailing は "who" および "city" のプロパティを持つオブジェクトのコレクション
// "who" プロパティの中身は文字列型
// "city" プロパティの中身は文字列型
$mailing:=ds.Teachers.all().extract("lastname";"who";"address.city";"city")
//
// $teachers は"where" および "who" のプロパティを持つオブジェクトのコレクション
// "where" プロパティの中身は文字列型
// "who" プロパティの中身はエンティティセレクション (Teachers データクラス)
$teachers:=ds.Address.all().extract("city";"where";"teachers";"who")
//
//$teachers はエンティティセレクションのコレクション
$teachers:=ds.Address.all().extract("teachers")
.first()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.first() : 4D.Entity
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | 4D.Entity | <- | エンティティセレクションの先頭エンティティへの参照 (見つからなければ null) |
|
説明
.first()
関数は、 エンティティセレクションの先頭エンティティへの参照を返します。
この関数の結果は以下のコードに似ています:
$entity:=$entitySel[0]
ただし、この 2つの宣言には、セレクションが空であった場合に違いがあります:
var $entitySel : cs.EmpSelection
var $entity : cs.EmpEntity
$entitySel:=ds.Emp.query("lastName = :1";"Nonexistentname") // 合致するエンティティはありません
// エンティティセレクションは空になります
$entity:=$entitySel.first() // Null を返します
$entity:=$entitySel[0] // エラーを生成します
例題
var $entitySelection : cs.EmpSelection
var $entity : cs.EmpEntity
$entitySelection:=ds.Emp.query("salary > :1";100000)
If($entitySelection.length#0)
$entity:=$entitySelection.first()
End if
.getDataClass()
履歴
リリース | 内容 |
---|---|
17 R5 | 追加 |
.getDataClass() : 4D.DataClass
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | 4D.DataClass | <- | エンティティセレクションが所属しているデータクラス |
|
説明
.getDataClass()
関数は、 エンティティセレクションのデータクラスを返します。
このメソッドはおもに汎用的なコードのコンテキストで有用です。
例題
以下の汎用的なコードは、エンティティセレクションの全エンティティを複製します:
// duplicate_entities メソッド
// duplicate_entities($entity_selection)
#DECLARE ( $entitySelection : 4D.EntitySelection )
var $dataClass : 4D.DataClass
var $entity; $duplicate : 4D.Entity
var $status : Object
$dataClass:=$entitySelection.getDataClass()
For each($entity;$entitySelection)
$duplicate:=$dataClass.new()
$duplicate.fromObject($entity.toObject())
$duplicate[$dataClass.getInfo().primaryKey]:=Null // プライマリーキーをリセットします
$status:=$duplicate.save()
End for each
.isAlterable()
履歴
リリース | 内容 |
---|---|
18 R5 | 追加 |
.isAlterable() : Boolean
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | Boolean | <- | エンティティセレクションが追加可能であれば true、それ以外の場合には false |
|
説明
.isAlterable()
関数は、 エンティティセレクションが追加可能であれば true、 それ以外の場合には false を返します。
詳細については 共有可能/追加可能なエンティティセレクション を参照ください。
例題
Form.products
をフォーム内の リストボックス に表示し、ユーザーが新しい製品を追加できるようにします。 ユーザーが製品を追加したときにエラーが起きないよう、追加可能であることを確認します:
If (Not(Form.products.isAlterable()))
Form.products:=Form.products.copy()
End if
...
Form.products.add(Form.product)
.isOrdered()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.isOrdered() : Boolean
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | Boolean | <- | 順列ありエンティティセレクションの場合には true、そうでない場合は false |
|
説明
.isOrdered()
関数は、 順列ありエンティティセレクションの場合には true、そうでない場合は false を返します。
リモートデータストアに属しているエンティティセレクションの場合は常に true を返します。
詳細については、エンティティセレクションの順列あり/順列なし を参照ください。
例題
var $employees : cs.EmployeeSelection
var $employee : cs.EmployeeEntity
var $isOrdered : Boolean
$employees:=ds.Employee.newSelection(dk keep ordered)
$employee:=ds.Employee.get(714) // プライマリーキー 714 を持つエンティティを取得します
// 順列ありのエンティティセレクションの場合、同じエンティティを複数回追加することができます(重複してるものは保持されます)
$employees.add($employee)
$employees.add($employee)
$employees.add($employee)
$isOrdered:=$employees.isOrdered()
If($isOrdered)
ALERT("エンティティセレクションには順列があり、"+String($employees.length)+" 件の社員エンティティを含みます。")
End if
.last()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.last() : 4D.Entity
引数 | タイプ | 説明 | |
---|---|---|---|
戻り値 | 4D.Entity | <- | エンティティセレクションの最終エンティティへの参照 (見つからなければ null) |
|
説明
.last()
関数は、 エンティティセレクションの最終エンティティへの参照を返します。
この関数の結果は以下のコードに似ています:
$entity:=$entitySel[length-1]
エンティティセレクションが空の場合、関数は null を返します。
例題
var $entitySelection : cs.EmpSelection
var $entity : cs.EmpEntity
$entitySelection:=ds.Emp.query("salary < :1";50000)
If($entitySelection.length#0)
$entity:=$entitySelection.last()
End if
.length
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.length : Integer
説明
.length
プロパティは、 エンティティセレクション内のエンティティの数を返します。 エンティティセレクションが空の場合、関数は 0 を返します。
エンティティセレクションは、常に .length
プロパティを持っています。
例題
var $vSize : Integer
$vSize:=ds.Employee.query("gender = :1";"male").length
ALERT(String(vSize)+" 人の男性社員が見つかりました。")
.max()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
18 R6 | エンティティセレクションが空の場合には undefined を返します |
.max( attributePath : Text ) : any
引数 | タイプ | 説明 | |
---|---|---|---|
attributePath | Text | -> | 計算に使用する属性パス |
戻り値 | any | <- | 属性の最大値 |
|
説明
.max()
関数は、 attributePath に指定したエンティティセレクションの属性値のうち最高の (あるいは最大の) 値を返します。 実際には、.orderBy()
関数を使用してエンティティセレクションを昇順に並べ替えたときの最後のエンティティを返します。
attributePath に、異なる型の値を格納しているオブジェクトプロパティを渡した場合、.max()
メソッドは型のリスト順の中で最初のスカラー型の値の中の最大値を返します (.sort()
の詳細を参照してください)。
エンティティセレクションが空の場合、または attributePath 引数がオブジェクト属性内に見つからない場合には、.max()
は undefined を返します。
以下の場合には、エラーが返されます:
- attributePath はリレート属性である
- attributePath がエンティティセレクションデータクラス内に存在しない属性を指定している場合。
例題
女性従業員の中で最も高い給与額を探します:
var $sel : cs.EmpSelection
var $maxSalary : Real
$sel:=ds.Employee.query("gender = :1";"female")
$maxSalary:=$sel.max("salary")
.min()
履歴
リリース | 内容 |
---|---|
17 | 追加 |
18 R6 | エンティティセレクションが空の場合には undefined を返します |
.min( attributePath : Text ) : any
引数 | タイプ |
---|