リンク・リクエストのGroovyスクリプトの構成のベスト・プラクティス
このトピックでは、Groovyスクリプトを構成するベスト・プラクティスについて説明します。
- リンクにGroovyスクリプトを使用するように実装を構成した場合、有効なリンク管理スクリプトがデプロイされるまで、重複解決リクエストは処理されません。
- リンク・リクエスト処理では非常に大量のレコードを処理できるため、groovyスクリプトはできるだけ高速で効率的です。 絶対に必要な場合を除き、newView()関数およびwebサービス・コールの使用は避けてください。また、必要に応じて、これらのタイプの操作が高速で信頼性が高いことを確認します。
Groovyスクリプト関数の概要
- リンク・リクエスト内のレコードを検査できる機能
- リンク・リクエストの結果を定義できる機能
これらの特殊関数のカテゴリは、標準のGroovyスクリプト構文および操作を使用してリンク・リクエストを処理するのに役立ちます。
入力関数
これらの関数は、ロジックによって評価されるデータを提供します。 通常、これらの関数は、適切なリンク・プロセスの出力を決定するために必要な情報をインスタンス化するために、スクリプトの最初に呼び出されます。
getObjectType()
この機能を使用すると、リンク・リクエストが処理しているパーティのタイプを決定できます。 この関数は、どのタイプのスクリプトで呼び出されるかに応じて、PERSONまたはORGANIZATIONを返します。 一般に、個人および組織のスクリプトはアプリケーション・コンポーザの「データ品質ルール」タスク内で個別の関数として明確に区別されるため、プログラムでオブジェクト・タイプを決定する必要はありません。 ただし、ロギングやテストに役立つ場合もあります。
getMaster()
Copy
def rowMaster = getMaster();
def masterName = rowMaster.getAttribute("OrganizationName");
// etc...
getNonMasters()
この機能を使用すると、リンク・リクエストの非マスター・レコードとして識別されたデータ・レコードのセットにアクセスできます。 この関数は、パラメータなしで呼び出され、各非マスター・レコードに対して1つのリスト・エントリで構成される行オブジェクトのリストを返します。 getNonMasters
リストはADF recordset object
ではないことに注意してください。 reset()やfirst()などのADF recordset functions
は、リストでは機能しません。 次の例は、この関数の一般的な使用方法を示しています。
Copy
getNonMasters()
def rowNonMasters = getNonMasters();
def nonmasterName;
for (nonmaster in rowNonMasters) {
nonmasterName = nonmaster.getAttribute("OrganizationName"); }
// etc...
getRows()
この機能を使用すると、マスター行セットと非マスター行セットの結合であるリンク・リクエストの顧客レコードの全セットにアクセスできます。 この関数は、パラメータなしで呼び出され、各非マスター・レコードに対して1つのリスト・エントリで構成される行オブジェクトのリストを返します。 getNonMasters
関数と同様に、getRows
リストがADF recordset object
ではないことに注意してください。 reset()やfirst()などのADF recordset functions
は、リストでは機能しません。 次の例は、この関数の一般的な使用方法を示しています。
Copy
def rowDuplicates = getRows()
def duplicateName;
for (duplicate in rowDuplicates) {
duplicateName = duplicate.getAttribute("OrganizationName"); }
// etc...
getSourceInfo(Row row,String attributeName)
この関数を使用して、特定のマスター行または非マスター行の属性の現在の値を提供したソース・システムに関する情報にアクセスできます。 この関数は、次のパラメータを使用して呼び出されます。
- 対象となる非マスターまたはマスター行の行オブジェクト
- ソース確度構成済属性の名前
この関数は、問題の属性のソース情報レコードを返します。 ソース情報レコードの構造は次のとおりです。
属性 | 定義 | 例 |
---|---|---|
RecordId |
行オブジェクト・パラメータによって参照される個人または組織レコードのパーティID。 | 300100184760397 |
AttributeName |
属性パラメータの名前。 | OrganizationName |
AttributeValue |
行の属性の現在の値。 | Pinnacle Systems |
Source |
属性値の登録済ソース・システムのコード。 | RNOW |
SourceConfidenceLevel |
指定されたソース・システムの指定の属性の構成済属性ソース確度値。 | 90 |
SourceUpdateDate |
個人または組織レコードが現在の値で更新されたときのタイムスタンプ。 | 1/24/2020 11:48:03 PM |
Copy
def rowDuplicates = getRows();
def rowSource;
def bestSource;
def bestValue;
bestSource = getSourceInfo(rowDuplicates[0],"OrganizationName");
for (row in rowDuplicates) {
rowSource = getSourceInfo(row,"OrganizationName");
if(rowSource.SourceConfidenceLevel > bestSource.SourceConfidenceLevel) {
bestSource = rowSource;
}
}
bestValue = bestSource.AttributeValue;
出力関数
出力関数は、リンク・プロセス・スクリプトのロジックに基づいて、最終的な動作を作成します。 一般に、これらの関数は、入力関数で提供されたデータがスクリプト・ロジックで評価された後に、スクリプトの最後に呼び出されます。
selectMaster(Row row)
Copy
...
def masterRow = rowDuplicates[0];
for (row in rowDuplicates) {
if row.LastUpdateDate > masterRow.LastUpdateDate {
masterRow = row;
}
}
selectMaster(masterRow);
データの評価
適切な関数を呼び出すと、スクリプトでデータを評価して正しいリンク結果を決定する必要があります。 この評価プロセスでは、標準のGroovyスクリプトの演算子および関数が使用されます。 Groovyスクリプトの詳細は、『Oracle Applications Cloud Groovyスクリプト・リファレンス』ガイドを参照してください。
まとめ
- コール入力関数
- データの評価
- コール出力関数
Copy
/* Input Functions: call getRows() to initialize a list of the party records in the merge request and then
define a variable to designate the Master record and set it to the first record in the list of Rows */
def rowDuplicates = getRows();
def masterRow = rowDuplicates[0];
/* Evaluate the Data: iterate through the list of records to determine if the current list item
was more recently updated than whatever record has been designated the master. If the current record was more recently updated,
promote it to become the new Master */
for (row in rowDuplicates) {
if (row.LastUpdateDate > masterRow.LastUpdateDate) {
masterRow = row;
}
}
/* Call Output Functions: use the selectMaster() function to dictate which record from the merge set
should become the master */
selectMaster(masterRow);