【问题标题】:Remove duplicates from custom entities in Microsoft Dynamics CRM从 Microsoft Dynamics CRM 中的自定义实体中删除重复项
【发布时间】:2010-08-02 18:55:54
【问题描述】:

有没有人找到合并或删除自定义实体中重复项的好方法?在我们的例子中,我们有两个自定义实体,文学历史和订阅,它们将联系人与名为文学的自定义实体相关联。

我可以运行重复检测作业,但这会返回数千条记录,并且一次删除一条记录充其量是不切实际的。我们希望能够合并它们或只是删除重复项。然而,除了“你可以写点东西”之外,很多谷歌搜索都没有找到任何好的建议。

好的,但是从哪里开始呢?我应该从重复检测作业中批量删除吗?我应该尝试使用 SDK 编写一个快速而肮脏的 c# 程序吗?有没有一种方法可以合并只需要一些神奇的工作流巫术的自定义实体?

编辑:仅供参考我最终所做的是使用一些有趣的 SQL 设置删除状态代码以快速查找重复项:

UPDATE T1 SET DeletionStateCode = 2 
FROM New_subscriptionhistory T1 INNER JOIN New_subscriptionhistory T2 ON t1.New_LiteratureId = T2.New_LiteratureId AND t1.New_ContactId = t2.New_ContactId
AND t1.CreatedOn > t2.CreatedOn AND t1.statecode = 0 AND t2.statecode = 0

【问题讨论】:

    标签: dynamics-crm dynamics-crm-4


    【解决方案1】:

    您应该考虑使用 SDK 创建批量删除作业。

    Here's a short tutorial.

    【讨论】:

    • 这可能或多或少是“正确”的做事方式。 SDK 查询语言不像 SQL 那样富有表现力,但您可以撤消批量删除。
    • 我同意,批量删除是要走的路——比 SQL 更新更安全。我发现这个工具运行良好 '批量删除启动器':mscrmtools.blogspot.com/2009/07/… 基本上你创建并保存一个高级查找查询来识别你想要删除的记录,然后使用这个工具对保存的视图运行批量删除。它基本上完成了上面链接的文章中描述的内容。
    • 不知道这个工具。感谢您的链接!
    【解决方案2】:

    我不能肯定地说这是唯一或最好的方法,但我们在 _MSCRM 数据库中使用了 SQL 查询,将任何重复实体的 DeletionStateCode 设置为 2。

    【讨论】:

    • 我已经考虑过这样做。你遇到过什么奇怪的副作用吗?
    • 仅供参考,这可能会在系统中留下孤立记录,因为删除可能会级联到其他实体。因此,您最终会得到孤立的活动/笔记/等。它不应该损害您的系统,但您可能会遇到不应该存在的记录。
    • 没有奇怪的副作用,但正如 Focus 指出的那样,您必须找到所有的级联并适当地处理它们。我们必须这样做的原因是一些欺骗已经被处理并且批量删除并不总是选择我们想要删除的那个。所以我们在 SQL 中实现了特定的逻辑来确定哪些是要删除的安全记录。不好玩,这是肯定的。
    • 是的,我们的情况听起来很相似。我可能会先使用状态停用,并确保一切顺利,然后再实际删除它们。
    • 如果你关闭删除服务,那些2s会留在数据库中。但是,是的,很好的一点:状态和状态代码是更安全的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    相关资源
    最近更新 更多