Oracle ServiceインタフェースでのFindメソッドの呼出し
GroovyスクリプトがOracle Fusion Applicationsオブジェクトのサービス・インタフェースでfindメソッドを起動する必要がある場合は、そのfindCriteriaパラメータに構造化されたMap値を渡す必要があります。
この項では、find
メソッドの使用をすぐに開始するために使用できる簡単な例を示します。 スタッフに関する情報を提供するOracle Applications webサービスのEmployeesService
という名前のWebサービス変数がすでに登録されているとします。 さらに、標準のfind
メソッドの名前がfindEmployees
であるとします。
次の例のスクリプトは、このfindEmployees()
メソッドの最初の引数として渡す、正しく構造化されたfindCriteria
パラメータを作成する最も簡単な例を示しています。 この例では、Deptno
フィールドが値30
と等しいすべての従業員を取得します。 結果は、デフォルトのソート順を使用して返されます。 デフォルトでは、employeeオブジェクトのすべてのフィールドがコール・スクリプトに返されます。 これらの例で使用されているキャリッジ・リターンおよびその他の空白は、読みやすさを向上し、大カッコを視覚的に一致させるためだけであることに注意してください。
// Example findCriteria parameter definition
def findCriteria =
[
filter:
[
group:
[
[
item:
[
[
attribute :'Deptno',
operator :'=',
value :[[item:30]]
]
]
]
]
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
// Do something with each 'emp' row
println(emp)
}
次の例のスクリプトは、検索をさらに制約するために2つのビュー基準アイテムを追加して、前のスクリプトを拡張します。 これを実現するために、filter
マップ・エントリのgroup
マップ・エントリのitem
マップ・エントリに指定されたカンマ区切りマップ値に2つのマップを追加しました。 同じビュー基準行の複数のビュー基準アイテム間のデフォルトの結合はAND
であるため、この例では、Deptno
フィールドが30
と等しく、Comm
というコミッション・フィールドが300
より大きいすべての従業員、およびJob
フィールドが(大/小文字を区別しない比較を使用して)値sales
で始まるすべての従業員を検索します。
// Example findCriteria parameter definition
def findCriteria =
[
filter:
[
group:
[
[
item:
[
[
attribute :'Deptno',
operator :'=',
value :[[item:30]]
],
[
attribute :'Comm',
operator :'>',
value :[[item:300]]
],
[
upperCaseCompare :true,
attribute :'Job',
operator :'STARTSWITH',
value :[[item:'sales']]
]
]
]
]
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
println(emp)
}
この例のスクリプトは、前述のスクリプトを拡張して、secondビュー基準行をフィルタに追加します。 これを実現するために、filter
マップ・エントリのgroup
マップ・エントリに指定されたカンマ区切りのマップのリスト値に、マップを追加しました。 ビュー基準フィルタの個別のビュー基準行間のデフォルトの結合はOR
であるため、この例のフィルタでは、前の例の基準に一致するすべての従業員、またはEname
フィールドがallen
であるすべての従業員を検索します。 upperCaseCompare : true
エントリにより、大/小文字を区別しない比較が実行されます。 ビュー基準アイテムのoperator
エントリに渡すことができる有効な値の詳細は、「ビュー基準品目演算子の理解」を参照してください。
// Example findCriteria parameter definition
def findCriteria =
[
filter:
[
group:
[
[
item:
[
[
attribute :'Deptno',
operator :'=',
value :[[item:30]]
],
[
attribute :'Comm',
operator :'>',
value :[[item:300]]
],
[
upperCaseCompare :true,
attribute :'Job',
operator :'STARTSWITH',
value :[[item:'sales']]
]
]
],
[
item:
[
[
upperCaseCompare :true,
attribute :'Ename',
operator :'=',
value :[[item:'allen']]
]
]
]
]
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
println(emp)
}
次の例のスクリプトは、前述の元のスクリプトを拡張して、単一のフィールド・ソート順序を明示的に指定します。 結果は、Ename
フィールドの値で昇順にソートされます。 sortAttribute
エントリの値はマップのリストであるため、複数のフィールドでソートを実行するために、カンマで区切られたマップを追加できます。
// Example findCriteria parameter definition
def findCriteria =
[
filter:
[
group:
[
[
item:
[
[
attribute :'Deptno',
operator :'=',
value :[[item:30]]
]
]
]
]
],
sortOrder:
[
sortAttribute:
[
[
name :'Ename',
descending : false
]
]
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
println(emp)
}
次のスクリプトは、結果で従業員オブジェクト・フィールドのサブセットのみを返すようにリクエストするために、前のスクリプトを拡張して特定の検索属性基準を追加します。 この例では、部門30
の各employeeオブジェクトについて、そのEmpno
およびEname
フィールド値のみがコール元のgroovyスクリプトに戻されます。
// Example findCriteria parameter definition
def findCriteria =
[
filter:
[
group:
[
[
item:
[
[
attribute :'Deptno',
operator :'=',
value :[[item:30]]
]
]
]
]
],
sortOrder:
[
sortAttribute:
[
[
name :'Ename',
descending : false
]
]
],
findAttribute:
[
[item :'Empno'],
[item :'Ename']
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
println(emp)
}
ここに示すスクリプトは、fetchSize
マップ・エントリを使用して、リクエストされたソート順序で指定した基準に一致する最初の3行のみに返される行数を制限する方法を示しています。これには、リクエストされたフィールド値のみが含まれます。 この例では、Job
フィールドがCLERK
(今回は大文字小文字が区別されます)である上位3人の従業員のEmpNo
、Ename
およびSal
フィールドを、Sal
の降順で返します。
// Example findCriteria parameter definition
def findCriteria =
[
fetchSize : 3,
filter:
[
group:
[
[
item:
[
[
attribute :'Job',
operator :'=',
value :[[item:'CLERK']]
]
]
]
]
],
sortOrder:
[
sortAttribute:
[
[
name :'Sal',
descending : true
]
]
],
findAttribute:
[
[item :'Empno'],
[item :'Ename'],
[item :'Sal']
]
]
// findControl needs to be an empty list rather than null
def findControl = [ ]
def emps = adf.webServices.EmployeesService.findEmployees(findCriteria, findControl)
for (emp in emps) {
println(emp)
}