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

如何在Dynamics CRM中捕获表单通知并触发后续事件?

如何在Dynamics CRM中捕获表单通知并触发后续事件?

嗨,这个需求我之前帮同事处理过,因为没法修改托管解决方案里的代码,确实只能从DOM层面入手监听通知的出现。下面给你一步步说怎么实现:

核心思路:用DOM监听捕获通知的动态添加

Dynamics CRM里的通知都是动态插入到页面DOM中的,所以我们可以用浏览器原生的MutationObserver来监听DOM变化,一旦检测到通知元素被添加,就触发刷新时间线的操作。

具体步骤和代码示例

  1. 先找到通知元素的DOM特征
    首先打开浏览器开发者工具(按F12),触发那个托管按钮的通知,当通知弹出时右键点击它,选择“检查”,看看这个通知元素的类名或者父容器的选择器。比如新版Dynamics 365里的通知一般带有ms-toast类,父容器可能是body下的ms-toast-container。

  2. 编写监听代码
    把这段代码放到你自己创建的Web资源里,然后绑定到表单的OnLoad事件上:

    // 第一步:替换成你实际找到的通知父容器选择器
    const targetContainer = document.querySelector('.ms-toast-container') || document.body;
    
    // 创建DOM变化监听器
    const notificationObserver = new MutationObserver((mutations) => {
      mutations.forEach(mutation => {
        // 筛选出新增的通知元素
        const newNotifications = Array.from(mutation.addedNodes).filter(node => {
          // 这里替换成你找到的通知元素类名,比如'ms-toast'
          return node.nodeType === Node.ELEMENT_NODE && node.classList.contains('ms-toast');
          // 如果要监听特定内容的通知,可以加个文本判断:
          // && node.textContent.includes('你要监听的通知关键词')
        });
    
        if (newNotifications.length > 0) {
          console.log('目标通知出现了!');
          // 触发时间线刷新
          refreshFormTimeline();
        }
      });
    });
    
    // 配置监听选项:监听子元素新增,包括嵌套层级
    const observerOptions = {
      childList: true,
      subtree: true
    };
    
    // 启动监听
    notificationObserver.observe(targetContainer, observerOptions);
    
    // 刷新时间线的函数
    function refreshFormTimeline() {
      // 替换成你表单里时间线控件的名称,一般默认是'Timeline'
      const timelineControl = Xrm.Page.ui.controls.get('Timeline');
      if (timelineControl) {
        timelineControl.refresh();
        console.log('时间线已刷新');
      } else {
        console.warn('未找到时间线控件,请检查控件名称');
      }
    }
    

注意事项

  • 选择器要精准:不同版本的Dynamics CRM(包括旧版CRM和新版Dataverse)的通知DOM结构可能不一样,一定要自己检查确认类名和选择器。
  • 避免重复触发:如果同一个操作可能弹出多个通知,或者页面有其他系统通知,建议加上通知文本的判断(代码里注释的部分),只在目标通知出现时触发刷新。
  • 表单加载时机:确保你的Web资源是在表单完全加载后执行,绑定到表单的OnLoad事件就可以,不要提前执行导致找不到DOM元素。

备注:内容来源于stack exchange,提问作者Kostas Karagiannis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:19:29