複数回使用されるビュー基準に対するカスタム・バインド変数の使用
同じスクリプト内で同じビュー・オブジェクトを複数回実行する必要がある場合があります。
オペランド値が問合せ実行から問合せ実行に変更された場合、名前付きバインド変数を使用すると、ビュー基準を1回追加し、基準式オペランドに異なる値で何度も使用できます。 1つ以上の名前付きバインド変数をビュー・オブジェクトに追加し、各実行の前に必要に応じてこれらのバインド変数の値を設定します。 バインド変数は、追加されたフィルタ式で実際のプレースホルダーとして機能し、その現在の値は、ビュー・オブジェクトの問合せが実行されるたびに使用されます。
名前付きバインド変数を追加するには、addBindVariable()
関数を使用します。 次の例に示すように、ビュー・オブジェクトまたは行セットを最初の引数として渡し、バインド変数の名前を2番目の引数として定義します。 バインド変数には、文字、数字およびアンダースコアの任意の組合せを使用して名前を付けることができます(名前が文字で始まる場合)。 この例のStaffMember
のような標準オブジェクトでビュー基準を使用する場合は、カスタム・オブジェクトおよびカスタム・フィールドで使用するのと同じサフィクス(_c
)でバインド変数に名前を付けることをお薦めします。
def vo = newView("StaffMember")
addBindVariable(vo,"VarLastName_c")
setBindVariable(vo,"VarLastName_c","King")
vo.appendViewCriteria("LastName = :VarLastName_c")
vo.executeQuery()
while (vo.hasNext()) {
def r = vo.next();
// Will return "Steven King" and "Janette King"
}
setBindVariable(vo,"VarLastName_c","Higgins")
vo.executeQuery()
while (vo.hasNext()) {
def r = vo.next();
// Will return "Shelley Higgins"
}
名前付きバインド変数は、リテラル値を使用できる任意の場所でビュー基準式で参照でき、名前の前にコロン(:VarLastName_c
など)を付けます。 バインド変数を追加した後、スクリプトでsetBindVariable()
関数を1回以上使用して、変数に値を割り当てます。 現在のビュー・オブジェクトまたは行セットの値を明示的に設定するまで、バインド変数はデフォルトでnull
の値になります。 誤って値null
を離れると、SQL言語による比較でのnull
値の処理方法により、バインド変数オペランドに関連するほとんどのフィルタ式の行は取得されません。 スクリプトがビュー・オブジェクトを実行するたびに、バインド変数の現在の値が使用されます。 次の例では、最初のビュー・オブジェクトの実行中に従業員"Steven King"および"Janette King"の行が返され、2番目のビュー・オブジェクトの実行時に"Shelly Higgins"の行が返されます。
デフォルトでは、名前付きバインド変数のデータ型はText
型です。 数値、日付または日時フィールドを含むフィルタ式でバインド変数を使用する必要がある場合は、最適なパフォーマンスを得るために、適切な型のバインド変数を明示的に定義する必要があります。 特定のデータ型のバインド変数を追加するには、Text
, Number
, Date
またはDatetime
のいずれかの値を文字列値としてaddBindVariable()
関数のオプションの3番目の引数に渡します。 たとえば、次のスクリプトは、Number
型の2つのバインド変数とDate
型のバインド変数を使用します。 データ型名は大/小文字が区別されないことに注意してください(たとえば、Number
、number
またはNUMBER
はすべて許可されます)。
def vo = newView('TroubleTicket_c')
addBindVariable(vo,"VarLowPri_c","number")
addBindVariable(vo,"VarHighPri_c","Number")
addBindVariable(vo,"VarDueDate_c","DATE")
setBindVariable(vo, "VarLowPri_c", 1)
setBindVariable(vo, "VarDueDate_c", 2)
setBindVariable(vo, "VarDueDate_c", today() + 3)
vo.appendViewCriteria("(Priority_c between :VarLowPri_c and :VarHighPri_c) and DueDate < :VarDueDate_c ")
vo.executeQuery()
while (vo.hasNext()) {
def row = vo.next()
// Returns trouble tickets with priorities 1 and 2 that are
// due within three days from today
}
setBindVariable(vo, "VarLowPri_c", 3)
setBindVariable(vo, "VarDueDate_c", 4)
setBindVariable(vo, "VarDueDate_c", today() + 5)
vo.executeQuery()
while (vo.hasNext()) {
def row = vo.next()
// Returns trouble tickets with priorities 3 and 4 that are
// due within five days from today
}