ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com

ホーム

 
4D v19.8
entitySelection.orderByFormula( )

entitySelection.orderByFormula( ) 


 

entitySelection.orderByFormula ( formula {; sortOrder}{; settings} ) -> 戻り値 
引数   説明
formula  テキスト, オブジェクト in フォーミュラ文字列、または
フォーミュラオブジェクト
sortOrder  倍長整数 in dk ascending (デフォルト)またh dk descending
settings  オブジェクト in フォーミュラの引数
戻り値  EntitySelection in 新しい順列ありのエンティティセレクション

説明   

entitySelection.orderByFormula( ) メソッドは、エンティティセレクションの全てのエンティティを格納し、formula 引数および(任意の)sortOrdersettings 引数で定義された順番に並べられた、順列ありの新しいエンティティセレクションを返します。

注: このメソッドは元のエンティティセレクションは変更しません。

formula 引数には、テキストまたオブジェクトを渡すことができます:

  • テキスト: "Year of(this.birthDate)" などの4D 式
  • オブジェクト: Formula または Formula from string コマンドを使用して作成された、有効なフォーミュラオブジェクト

formula 引数のフォーミュラはエンティティセレクションのそれぞれのエンティティに対して実行され、その結果は返されるエンティティセレクション内でのエンティティの位置を決定するのに使用されます。結果は何らかの並べ替え可能な型(ブール、日付、数値、テキスト、時間、Null)である必要があります。

注: Null 値の結果は常に最小の値とみなされます。

デフォルトで、sortOrder引数を省略した場合、返されるエンティティセレクションは昇順に並べられます。オプションとして、sortOrder 引数に以下の値のいずれか一つを渡すことができます:

定数 コメント
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



参照 

entitySelection.orderBy( )
QUERY BY FORMULA

 
プロパティ 

プロダクト: 4D
テーマ: ORDA - エンティティセレクション

 
ページの目次 
 
履歴 

初出: 4D v17 R6

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)