Groovyスクリプト・ベースのマスター・レコードの設定ルールの構成
この例では、解決リクエストがマージ・リクエストであるかどうかに応じて異なるロジックを使用して、解決リクエストでマスター・レコードを選択するマスター・レコード・ルールの設定を作成する方法を学習します。
シナリオの論理要件は次のとおりです。
- RNOWソース・システムと統合されたレコードは、マスター・レコードにする優先度が最も高くなります。
- 優先されるソース・システムに複数のレコードが存在する場合は、最も最近更新されたレコードをタイ・ブレーカとして使用します。
- RNOW統合レコードがマージに存在しない場合は、アップストリーム・プロセスによりマスターとして指定されているレコードを使用します。
実行ステップ
-
Groovyスクリプトを有効にしてマスター・レコードを選択します。
-
「設定および保守」作業領域で、次の項目に移動します。
-
オファリング: 顧客データ管理
-
機能領域: 顧客ハブ
-
タスク: 顧客データ管理オプションの管理
-
-
「マージ動作」セクションで、「マスター・レコード選択」フィールドの「Groovyスクリプトを使用してマスター・レコードを選択」オプションを選択します。
-
-
アプリケーション・コンポーザ・サンドボックスを作成します。 ステップについては、「アプリケーション・コンポーザのサンドボックスの作成」のトピックを参照してください。
-
AccountSetMasterテンプレートにサンプル・スクリプトを移入します。
-
「共通設定」にナビゲートし、「データ品質ルール」をクリックします。
-
「AccountSetMaster」をクリックします。
-
「データ品質ルールの編集」ページのサンプル・コード・セクションで指定されたコードをコピーしてペーストします。
-
「保存してクローズ」をクリックします。
-
-
コードをテストします。 コードをテストするには、「生存ルールおよび契約ルールの構成のテスト」のトピックを参照してください。
-
「マスター・レコードの設定」ルールの結果に満足したら、コードを配置します。 「生存ルールおよび契約ルールの構成の配置」のトピックを参照してください。
サンプル・スクリプトの機能
getRows()入力関数を呼び出して解決要求のレコードにアクセスすることによって、スクリプトが開始されます。 追加の変数を初期化した後、スクリプトによってgetAttribute("ResolutionType")がコールされ、どのタイプの解決要求が処理されているかが判別されます。
解決タイプがMERGEの場合、スクリプトが解決要求のレコードをループして、各レコードに存在するソース・システム参照割当を検査します。 RNOWソース・システム参照があるレコードが見つかると、その行は指定されたソース・システム参照割当を持つレコードのリストに追加されます。
解決要求のすべての行がソース・システム参照値に対してテストされると、スクリプトによって、優先されるソース・システム参照のレコードが検出されたかどうかがテストされます。 最上位優先度リストに見つかったレコードは、最終更新日でテストされます。 その結果、最も高い優先度のソース・システム参照を持つ最新の更新レコードがマスター・レコードに指定されます。
最後に、スクリプトによってselectMaster()出力関数が呼び出され、マスター・レコードが指定されます。 スクリプトで前に最上位優先度または第2優先度のレコードが識別された場合、そのレコードはselectMaster()関数に提供されます。 優先度レコードが識別されなかった場合、アップストリーム・プロセスによって指定されたデフォルトのマスター・レコードは、解決リクエストのマスター・レコードとして保持されます。
サンプル・コード
try {
def requestRows = getRows();
def rowMaster = false;
def osrMap = ['RNOW': []];
def rowDefaultMaster = getMaster();
def iHighestAccountScore = 0;
def resolutionType = getAttribute("ResolutionType");
if (resolutionType == "MERGE") {
for (row in requestRows) {
def osrRows = row.getAttribute("OriginalSystemReference");
osrRows.reset();
while (osrRows.hasNext()) {
def osrRow = osrRows.next()
if (osrRow.OrigSystem == "RNOW") {
osrMap['RNOW'].add(row);
}
}
}
if (rowMaster == false && osrMap['RNOW'].size() > 0) {
rowMaster = osrMap['RNOW'][0];
for (row in osrMap['RNOW']) {
if (row.LastUpdateDate > rowMaster.LastUpdateDate) {
rowMaster = row;
}
}
}
}
if (rowMaster) {
selectMaster(rowMaster);
} else {
selectMaster(rowDefaultMaster);
}
} catch (Exception e) {
def sMsg = "Exception in Account Set Master: " + e.getMessage();
println(sMsg);
}