4D v19entitySelection.orderByFormula( ) |
|||||||||||
|
4D v19
entitySelection.orderByFormula( )
|
定数 | 値 | コメント |
dk ascending | 0 | 昇順(デフォルト) |
dk descending | 1 | 降順 |
formula 引数内部において、処理されたエンティティとその属性はThis コマンドを通して利用可能です(例えば、This.lastName など)。
formula 引数には、settings 引数のargs プロパティ(オブジェクト)を使用することで引数を渡すことが可能です。このときformula 引数は、settings.args オブジェクトを$1 に受け取ります。
テキストとして渡されたフォーミュラを使用して学生を並べ替えします:
C_OBJECT($es1;$es2)
$es1:=ds.Students.query("nationality=:1";"French")
$es2:=$es1.orderByFormula("length(this.lastname)") // デフォルトは昇順
$es2:=$es1.orderByFormula("length(this.lastname)";dk descending)
同じ並び方を、フォーミュラオブジェクトを使用して取得する場合を考えます:
C_OBJECT($es1;$es2;$formula)
$es1:=ds.Students.query("nationality=:1";"French")
$formula:=Formula(Length(This.lastname))
$es2:=$es1.orderByFormula($formula) // デフォルトは昇順
$es2:=$es1.orderByFormula($formula;dk descending)
フォーミュラは引数付きのformula オブジェクトとして渡されます。settings.args オブジェクトは、computeAverage メソッドに$1 として受け取られます。
この例題では、Students データクラス内のmarks オブジェクトフィールドにはそれぞれの科目ごとの生徒の成績が格納されています。単一のフォーミュラオブジェクトを使用して、scoolA とschoolB に対して異なる係数で生徒の平均の成績を計算します。
C_OBJECT($es1;$es2;$formula;$schoolA;$schoolB)
$es1:=ds.Students.query("nationality=:1";"French")
$formula:=Formula(computeAverage($1))
$schoolA:=New object() // 設定オブジェクト
$schoolA.args:=New object("english";1;"math";1;"history";1) // 平均を計算するための係数
// school A 条件に応じて学生を並べ替え
$es2:=$es1.entitySelection.orderByFormula($formula;$schoolA)
$schoolB:=New object() // 設定オブジェクト
$schoolB.args:=New object("english";1;"math";2;"history";3)
// school B 条件に応じて学生を並べ替え
$es2:=$es1.entitySelection.orderByFormula($formula;dk descending;$schoolB)
//
// computeAverage メソッド内部
// -----------------------------
C_TEXT($subject)
C_LONGINT($0;$average;$sum)
C_OBJECT($coefList;$1)
$coefList:=$1
$average:=0
$sum:=0
For each($subject;$coefList)
$sum:=$sum+$coefList[$subject]
End for each
For each($subject;This.marks)
$average:=$average+(This.marks[$subject]*$coefList[$subject])
End for each
$0:=$average/$sum
プロダクト: 4D
テーマ: ORDA - エンティティセレクション
ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)