2017-02-15 1 views
0

Gibt es eine Möglichkeit, alle doppelten Teilnehmer im globalen Adressbuch von Microsoft Dynamics AX 2012 R2 (GAB) zu finden und sie dann zu entfernen/zusammenzuführen?Finden und Entfernen/Zusammenführen aller doppelten Teilnehmer im globalen Adressbuch von MS Dynamics AX 2012 R2

Ich weiß, dass in GAB gibt es eine "Check für Duplikate" -Option, aber es funktioniert nur für die derzeit ausgewählte Partei-Element. Ich muss jedoch in allen Datensätzen suchen und Duplikate anhand einiger Kriterien finden.

In MS CRM gibt es eine integrierte Duplikaterkennung und Merge-Mechanismus und ich frage mich, warum solche in Dynamics AX nicht gefunden wird ... oder ich falsch liege?

Welche anderen Optionen habe ich neben dem direkten Datenbankmanipulationsmechanismus?

Antwort

2

Sie müssen etwas für etwas Brauch entwickeln. Das Formular \Forms\DirPartyCheckDuplicate ist für eine einzelne Partei konzipiert.

Sie können die Backing-Klasse \Classes\DirPartyCheckDuplicate verwenden, um die Suchvorgänge durchzuführen und dann die Ergebnisse mit einem benutzerdefinierten Formular zu behandeln.

Das Problem ist, dass die Klasse auch einen DirPartyTable Datensatz akzeptieren soll, und dann einen query von Duplikaten zurückgeben.

Wenn Sie überall nur identifizieren möchten Dinge, die Duplikate haben, könnten Sie etwas zusammen hacken. Ich schrieb diesen schnellen Job, wo ich 2 DirPartyTable-Datensätze habe, die Duplikate zurückgeben, und ich führte den Check zweimal durch und kombinierte die Ergebnisse und gab sie aus.

static void Job3(Args _args) 
{ 
    DirPartyTable  dpt = DirPartyTable::findRec(22565431216); 
    DirPartyTable  dpt2 = DirPartyTable::findRec(22565424587); 
    Query    targetQuery; 
    Query    otherQuery; 
    QueryRun   qr; 
    DirPartyTable  dirPartyTable; 

    DirPartyCheckDuplicate partyCheckDuplicate; 

    partyCheckDuplicate = DirPartyCheckDuplicate::construct(); 
    partyCheckDuplicate.parmPartyRecord(dpt); 
    partyCheckDuplicate.parmCheckName(true); 
    partyCheckDuplicate.run(); 
    targetQuery = partyCheckDuplicate.getQuery(); 

    partyCheckDuplicate = DirPartyCheckDuplicate::construct(); 
    partyCheckDuplicate.parmPartyRecord(dpt2); 
    partyCheckDuplicate.parmCheckName(true); 
    partyCheckDuplicate.run(); 
    otherQuery = partyCheckDuplicate.getQuery(); 

    SysQuery::mergeRanges(targetQuery, otherQuery); 

    qr = new QueryRun(targetQuery); 

    while (qr.next()) 
    { 
     dirPartyTable = qr.get(tableNum(DirPartyTable)); 

     info(DirPartyTable.Name); 
    } 
} 
+0

danke, das ist eine großartige Idee. Ich möchte jedoch nicht nur identifizieren, sondern auch Duplikate entfernen (ich werde das in meiner Frage beheben). Ist das mit diesen maßgeschneiderten Jobs noch möglich? Ich werde viel darüber recherchieren müssen. Soll ich Performance-Probleme beim Scannen von 10000 Datensätzen, beim Prüfen von Duplikaten für jedes, beim Kombinieren von 10000 Abfragen und schließlich beim Anzeigen des Ergebnisses der erwarteten 30% doppelten Datensätze erwarten? Was denken Sie? Ist Ihr Ansatz noch relevant, oder sollte ich nach einem anderen suchen? – Vladislav

+0

Was Sie tun möchten, ist eine komplexe Aufgabe, die basierend auf der Logik der 'DirPartyCheckDuplicate' Klasse entwickelt werden sollte. Es könnte einige Leistungsprobleme geben, aber da es sich um eine einmalige Operation handelt, sollte dies keine Rolle spielen. Du könntest/solltest auch eine Geschichtstabelle entwickeln, um Entfernungen zu überprüfen, mach es zuerst in Dev/Test, etc. –

Verwandte Themen