Groovyスクリプト・ベースの契約ルールの構成
この例では、重複として識別された特定のアカウントをマージすることが必ずしも適切ではない、複雑なビジネス・エコシステムが使用されています。
マージの実行を禁止する条件が発生した場合、データ・スチュワードは、どのレコードがどの理由のためにマージをブロックしたか、正確に説明する情報メッセージを確認する必要があります。 マージを回避できる条件は次のとおりです。
マージの実行を禁止する条件が発生した場合、データ・スチュワードは、どのレコードがどの理由のためにマージをブロックしたか、正確に説明する情報メッセージを確認する必要があります。 マージを回避できる条件は次のとおりです。
-
非マスター・レコードが、法的保留システムと統合されます
-
非マスター・レコードの認証スコア値が100です
実行ステップ
-
Groovyスクリプトを有効にしてマスター・レコードを選択します。
-
「設定および保守」作業領域で、次の項目に移動します。
-
オファリング: 顧客データ管理
-
機能領域: 顧客ハブ
-
タスク: 顧客データ管理オプションの管理
-
-
「重複解決オプション」タブの「マージ動作」セクションで、「契約ルール・タイプ」フィールドの「デフォルト契約ルールおよびGroovyスクリプト」オプションを選択します。
-
-
アプリケーション・コンポーザ・サンドボックスを作成します。 ステップについては、「アプリケーション・コンポーザのサンドボックスの作成」のトピックを参照してください。
-
AccountMergeAgreement
テンプレートにサンプル・スクリプトを移入します。-
「共通設定」にナビゲートし、「データ品質ルール」をクリックします。
-
AccountMergeAgreement
をクリックします。
-
-
「データ品質ルールの編集」ページのサンプル・コード・セクションで指定されたコードをコピーしてペーストします。
-
「保存してクローズ」をクリックします。
-
コードをテストします。 コードをテストするには、「生存ルールおよび契約ルールの構成のテスト」のトピックを参照してください。
-
契約ルールの結果に満足したら、コードを配置します。 「生存ルールおよび契約ルールの構成の配置」のトピックを参照してください。
サンプル・スクリプトの機能
スクリプトでは、まずgetNonMasters()
入力関数をコールして、マージ要求内のマスター以外のレコードにアクセスします。 「マスターの設定」Groovyスクリプトの結果は、契約ルール・スクリプトおよび属性選択スクリプトのgetMaster()
およびgetNonMasters()
のレスポンスに表示されます。 次に、各行のレコードがスクリプトでループ処理されて、マージが拒否される2つの異なる条件がテストされます。 最初のテストでは、レコードのソース・システム参照割当を評価して、レコードがリーガル・ホールド・システムと統合されているかどうかが判断されます。 2番目のテストでは、非マスター・レコードの認証レベル値が確認されます。 特定のレコードがいずれかのテストに一致した場合は、vetoMessages
配列に部分拒否メッセージが追加されます。
マージ要求で非マスター行がすべてテストされた後、vetoMessages
配列にデータがあるかどうかがスクリプトで確認されます。 存在する場合は、vetoMessages
配列のデータから最終拒否メッセージが作成され、マージは拒否されて、作成されたメッセージが重複解決UIのデータ・スチュワードに表示されます。
サンプル・コード
try {
def rowNonMasters = getNonMasters();
def sMsg = "";
def rejectMsg = "";
def vetoMessages = [];
for (row in rowNonMasters){
def OSRs = row.getAttribute("OriginalSystemReference");
OSRs.reset();
sMsg = "";
while(OSRs.hasNext()) {
def OS = OSRs.next();
if (OS.getAttribute("OrigSystem") == "LEGAL_HOLD" && sMsg == "") {
sMsg = "A legal hold has been placed on Account " + row.getAttribute("PartyNumber");
vetoMessages.add(sMsg);}
}
sMsg = "";
if (row.getAttribute("CertificationLevel") == "100") {
sMsg = "A Certification Level of 100 was found on Account " + row.getAttribute("PartyNumber");
vetoMessages.add(sMsg);}
}
if (vetoMessages.size()) {
rejectMsg = "Merge rejection reasons: ";
vetoMessages.eachWithIndex { item, index ->
rejectMsg += ((index +1) + ") " + item + " ");
}
rejectRequest(rejectMsg);
}
}
catch(Exception e) {
def sMsg = "Exception in Account Merge Agreement: " + e.getMessage();
println(sMsg);
}