在MS Dynamics AX 2012 R2全局通讯簿中查找并删除/合并所有重复方

时间:2017-02-15 15:03:38

标签: duplicates dynamics-ax-2012-r2

有没有办法在MS Dynamics AX 2012 R2全球通讯录(GAB)中找到所有重复方,然后删除/合并它们?

我知道在GAB中有一个“检查重复项”选项,但它仅适用于当前选定的一方项目。但是,我需要在所有记录中进行搜索,并根据某些标准查找重复项。

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

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

1 个答案:

答案 0 :(得分:2)

你必须为自定义的东西做一些开发。表单\Forms\DirPartyCheckDuplicate是专为单方设计的。

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

问题是该类还设计为接受DirPartyTable记录,然后返回query个重复项。

如果你想在任何地方搜索识别有重复的东西,你可以一起破解。我写了这个快速的工作,我有2个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);
    }
}