You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dynamics 365 CRM重复检测对话框隐藏/禁用Ignore and Save按钮

Dynamics 365 CRM 重复检测对话框隐藏/禁用"Ignore and Save"按钮方案

一、关于重复检测对话框的表单位置

重复检测对话框是系统原生内置组件,不属于CRM表单编辑器中可查看、编辑的自定义表单范畴,所以你无法在CRM界面找到它的存储位置,只能通过前端脚本或插件逻辑修改其行为。

二、禁用/隐藏"Ignore and Save"按钮的可行方案

方案1:前端JavaScript脚本(推荐)

通过DOM操作定位对话框按钮并修改状态,步骤如下:

  • 在目标实体的表单上注册OnLoad事件脚本,或使用Web资源实现全局注入(覆盖所有实体的重复检测场景)
  • 监听DOM变化,捕获对话框加载事件后定位按钮:
    对话框的"Ignore and Save"按钮通常可通过button[data-id="ignoreandsave"]选择器定位,示例代码:
    // 监听DOM结构变化,检测重复对话框加载
    const observer = new MutationObserver((mutations) => {
      mutations.forEach((mutation) => {
        if (mutation.addedNodes.length) {
          const ignoreSaveBtn = document.querySelector('button[data-id="ignoreandsave"]');
          if (ignoreSaveBtn) {
            // 禁用按钮
            ignoreSaveBtn.disabled = true;
            // 若需隐藏按钮,替换为以下代码
            // ignoreSaveBtn.style.display = 'none';
            observer.disconnect(); // 找到目标后停止监听
          }
        }
      });
    });
    
    observer.observe(document.body, { childList: true, subtree: true });
    
  • 注意:该方法依赖CRM界面DOM结构,若微软更新界面可能失效,需定期验证适配。

方案2:插件实现(修正错误写法)

插件需从数据层面拦截重复保存,而非直接操作对话框。之前插件出错大概率是消息、阶段选择错误,正确逻辑如下:

  • 注册插件到目标实体的Create或Update消息的PreValidation阶段
  • 在插件中检测重复记录,若存在则抛出异常阻止保存,替代"Ignore and Save"功能:
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Messages;
    
    public class BlockDuplicateSave : IPlugin
    {
      public void Execute(IServiceProvider serviceProvider)
      {
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
    
        // 仅处理创建/更新操作
        if (context.MessageName != "Create" && context.MessageName != "Update") return;
    
        Entity target = (Entity)context.InputParameters["Target"];
    
        // 调用系统接口检测重复记录
        RetrieveDuplicatesRequest duplicateReq = new RetrieveDuplicatesRequest
        {
          BusinessEntity = target,
          MatchingEntityName = target.LogicalName,
          PagingInfo = new PagingInfo { PageNumber = 1, Count = 10 }
        };
        RetrieveDuplicatesResponse duplicateResp = (RetrieveDuplicatesResponse)service.Execute(duplicateReq);
    
        if (duplicateResp.DuplicateCollection.Entities.Count > 0)
        {
          // 抛出异常阻止保存,替代忽略重复的选项
          throw new InvalidPluginExecutionException("检测到重复记录,无法保存。");
        }
      }
    }
    
  • 插件错误排查:检查注册的消息、阶段是否匹配,插件执行账户权限是否足够,异常处理是否规范。

三、注意事项

  • 前端脚本需确保在对话框加载后执行,MutationObserver是可靠的监听方式
  • 插件方式从数据层面彻底阻止重复保存,用户体验为直接报错,而非隐藏按钮
  • 若需针对特定角色用户控制按钮状态,可在脚本中加入角色判断逻辑

内容的提问来源于stack exchange,提问作者Femi Orunmbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:37