在 MS Dynamics AX 2012 R2 全局地址簿中查找并 remove/merge 所有重复方

Find and remove/merge all duplicate parties in MS Dynamics AX 2012 R2 global address book

有没有办法在 MS Dynamics AX 2012 R2 全局地址簿 (GAB) 中找到所有重复方,然后 remove/merge 他们?

我知道在 GAB 中有一个 "Check for duplicates" 选项,但它只对当前选择的一方项目有效。但是,我需要在所有记录中搜索并根据某些条件查找重复项。

在 MS CRM 中有一个内置的重复检测和合并机制,我想知道为什么在 Dynamics AX 中找不到这样的机制...或者我错了?

然而,除了直接数据库操作机制,我还有什么其他选择?

您将不得不为一些定制的东西做一些开发。表格 \Forms\DirPartyCheckDuplicate 是为单方设计的。

您可以使用支持 class \Classes\DirPartyCheckDuplicate 进行搜索,然后使用一些自定义表单处理结果。

问题是 class 也被设计为接受 DirPartyTable 记录,然后 return query 重复记录。

如果您想到处搜索以识别 有重复的东西,您可以一起破解一些东西。我写了这个快速作业,其中有 2 个 return 重复的 DirPartyTable 记录,我 运行 检查两次并合并结果并输出它们。

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);
    }
}