問合せ結果のソート順の定義
setSortBy()関数は、1つの文字列引数を取ります。その値は、オブジェクト内の1つ以上のフィールド名のカンマ区切りリストです。
ビュー・オブジェクト問合せ結果のソート順序を定義するには、executeQuery()メソッドをコールする前に、操作しているビュー・オブジェクト・インスタンスでsetSortBy()メソッドをコールして結果を取得します。
次の例は、このメソッドを使用して単一のフィールドでソートする方法を示しています:
def vo = newView('TroubleTicket')
// Use object function to simplify filtering by agent
applyViewCriteriaForSupportAnalyst(vo, analystId)
vo.setSortBy('Priority')
vo.executeQuery()
while (vo.hasNext()) {
def curRow = vo.next()
// Work with current row curRow here
}
デフォルトでは、ソート順序は「昇順」になりますが、リスト内のフィールド名の後に空白で区切られたasc
またはdesc
キーワードを使用して、意図を明示できます。
次の例では、コールバック数で降順にソートする方法を示します。
def vo = newView('TroubleTicket')
// Use object function to simplify filtering by customer
applyViewCriteriaForCustomerCode(vo, custCode)
vo.setSortBy('NumberOfCallbacks desc')
vo.executeQuery()
while (vo.hasNext()) {
def curRow = vo.next()
// Work with current row curRow here
}
setSortBy()メソッドでは、NULL値のソート方法は指定できません。 かわりに、NULL値はソート順が昇順か降順かによってソートされます:
- ソート順が昇順の場合、NULL値は最後に表示されます
- ソート順が降順の場合、NULL値は最初に表示されます
ノート: 新しい行の作成中にsetSortBy()が呼び出された場合、その新しい行はソートの一部ではなく、常に最初にリストされます。
前述のように、文字列は2つ以上のフィールドのカンマ区切りリストでもかまいません。 この例では、並べ替え順を明示的に指定するなど、複数のフィールドで並べ替える方法を示します。
def vo = newView('TroubleTicket')
// Use object function to simplify filtering by customer
applyViewCriteriaForCustomerCode(vo, custCode)
// Sort ascending by Priority, then descending by date created
vo.setSortBy('Priority asc, CreationDate desc')
vo.executeQuery()
while (vo.hasNext()) {
def curRow = vo.next()
// Work with current row curRow here
}
デフォルトでは、テキスト・フィールドでソートする場合、その値は大/小文字を区別してソートされます。 大文字'B'で始まる'Blackberry'などの値は、小文字'a'の'apple'のような値の前にソートされます。 フィールドの値を大文字と小文字を区別せずにソートするように指定するには、次の例に示すように、リスト内のフィールド名をUPPER()
関数で囲みます。
def vo = newView('TroubleTicket')
// Use object function to simplify filtering by customer
applyViewCriteriaForCustomerCode(vo, custCode)
// Sort case-insensitively by contact last name, then by priority
vo.setSortBy('UPPER(ContactLastName),Priority')
vo.executeQuery()
while (vo.hasNext()) {
def curRow = vo.next()
// Work with current row curRow here
}
ヒント: 名前を指定して計算式フィールドまたは動的選択フィールドでソートすることは可能ですが、問合せによって少数の行のみが返されることを保証できるかぎり、ソートしないでください。 式フィールドまたは動的選択リストでのソートはメモリー内で実行する必要があるため、大量の行セットでのソートは非効率的です。