| 4D v18entitySelection.orderByFormula( ) | |||||||||||
| 
 | 
    4D v18
 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 v18)
	
	
	
 コメントを追加
コメントを追加