機械翻訳について

必要な属性のみを明示的に選択

ビジネス・オブジェクト問合せを実行する場合は、結果からコードがアクセスするフィールドを指定することが重要です。 これには、ロジックで更新する予定のフィールドも含まれます。 これをプロアクティブに実行することで、アプリケーションには次の2つの利点があります:

  1. データベースから必要なデータのみを取得
  2. 最初の参照で欠落しているデータを「フォルト・イン」する「追加」システム起動問合せを回避
selectAttributesBeforeQuery()関数をコールして、コードがビュー・オブジェクトの問合せを実行する前にアクセスする属性を選択します。 次の例に示すように、最初のパラメータはnewView()で作成したビュー・オブジェクトで、2番目の引数はフィールド名の大文字と小文字が区別されるリストです。 setSortBy()をコールしてソートを問合せに含める場合は、選択した属性リストにソート・フィールドname(s)も必ず含めてください。
def employees = newView('StaffMember')
addBindVariable(employees,'Job','Text')
addBindVariable(employees,'Dept','Number')
// Make sure that JobId or DepartmentId is indexed!
employees.appendViewCriteria('JobId = :Job and DepartmentId = :Dept')
employees.setSortBy('Salary desc')
selectAttributesBeforeQuery(employees,['Email','LastName','FirstName','Salary'])
setBindVariable(employees,'Job','SH_CLERK')
setBindVariable(employees,'Dept',50)
employees.executeQuery()
while (employees.hasNext()) {
  def employee = employees.next()
  // Work with employee.Email, employee.LastName, employee.FirstName, employee.Salary
}
重要: newView()で作成したカスタム・オブジェクトのビュー・オブジェクトを実行する前にselectAttributesBeforeQuery()関数をコールできなかった場合、デフォルトでは、問合せの最初の実行時にデータベースから主キー・フィールドのみが取得され、その後whileループの各行は、コードがEmail, LastName, FirstNameSalaryなどの他の属性の1つを参照するとすぐに、主キーを使用してデータベースから現在の行のフィールドのすべてを取得するための追加の問合せを実行するように強制されます。 オブジェクトに200個のフィールドがある場合、つまり、コードを介して200個のデータを取得しても、実際には4つのフィールドしか参照できません。 これにより、アプリケーションが多数の回避可能な追加の問合せを実行し、非常に不要なデータをフェッチする結果になる可能性があります。 いずれの状況もパフォーマンスには適していません。
「ビジネス・ロジック問合せの簡略化」で説明されているqueryMaps()またはqueryRows()ヘルパー関数を使用すると、前述の例で同じ最適化された問合せを実行でき、次のようなコード行が少なくなります:
// Make sure that JobId or DepartmentId is indexed!
for (employee in adf.util.queryRows(select:'Email,LastName,FirstName,Salary',
                                      from: 'StaffMember',
                                     where: 'JobId = :Job and DepartmentId = :Dept',
                                   orderBy: 'Salary desc',
                                     binds:[Job:'SH_CLERK',Dept:50]) {
  // Work with employee.Email, employee.LastName, employee.FirstName, employee.Salary
}

表の下の問合せヘルパー関数は、前述の他のすべての関数(selectAttributesBeforeQuery()など)をコールして、アプリケーションで処理する必要があるデータを生成します。