我在工作中继承了Dynamics CRM系统,该系统在内部运行:版本1612(8.2.2.112)(DB 8.2.2.112)。
我们处于一种情况,即由于提交表单失败而重复进行的情况似乎是间歇性的。我们在内部发布了解释此行为的文档,并表达了首先检查部分或全部交易是否成功的重要性。但是人类将是人类,并常常忘记...
话虽如此,作为一名DBA,我的第一个直觉是创建一个唯一的约束/索引。但是,我尚不清楚如何在Dynamics范围内最好地实现这一目标。我对内置的应用程序级重复检测没有信心,并且备用键对我们不起作用,因为我们许多独特的约束要求包含一个或两个DATE
字段。
据我所知,将索引添加到CRM基本表是受支持的DML操作,但表明它阻止了升级。这是否意味着我们将来无法升级?还是仅仅是在升级过程中不会迁移索引?
我是否缺少更好的解决方案,这些解决方案提供了数据库级的一致性并且不妨碍升级?
答案 0 :(得分:1)
使用本地CRM,您可以添加索引,并且它没有指定它不扩展到聚集索引。我强烈建议为CRM数据库建立索引以提高性能。根据开发人员指南:
对于Microsoft Dynamics 365本地部署,添加索引为 部署和管理中的准则支持 Microsoft Dynamics CRM文档。这适用于所有Microsoft Dynamics 365数据库和Microsoft Dynamics 365 for Outlook 本地数据库。
(在上述文档中我实际上没有看到与索引相关的任何内容)
我不确定您参考的文档中有关不支持这些索引的升级的信息,我从未遇到过使用索引的数据库升级CRM组织的困难。但是,与全文索引相关的升级到v9显然存在一些问题: https://community.dynamics.com/crm/f/117/t/242951
如果您曾经在线使用CRM,那么整个方法将不再起作用。
所有CRM环境都支持的方法是编写一个同步的预操作插件,该插件检查您的唯一性条件,并引发InvalidPluginExecutionException。此异常可能包含用户友好的消息,当用户尝试创建重复项时,该消息将在标准错误弹出窗口中显示。与应用程序违反索引约束时发生的任何情况相比,这保证是更好的体验。
我使用此方法强制执行联系人电子邮件地址唯一性,并且效果非常好。我设置了重复检测规则,并且如果用户忽略重复警告并仍然创建联系人,他们会收到一条消息,指出不允许重复的电子邮件地址。