如何在Dynamics CRM中使用jQuery操作DOM

How to manipulate DOM in Dynamics CRM using jQuery

本文关键字:jQuery 操作 DOM Dynamics CRM      更新时间:2023-09-26

试图通过使用jQuery的append方法更新字段值来操纵DOM。

发现在Dynamics CRM中不允许使用普通javascript或jQuery操作DOM

因此尝试添加一个HTML Web资源与脚本在它的源选项卡:

将该函数添加到项目表单中,并配置为在OnLoad事件时调用。但是,它会在表单加载之前被调用。

该函数在console中执行时工作良好,但当被系统调用时,它不起作用。

  setTimeout(ShowProjectAge, 3000);
  function ShowProjectAge() {
    var createdOn = Xrm.Page.getAttribute("createdon");
    var createdOnDt = new Date(createdOn.$2_2.$2T_2);
    var today = new Date();
    var DiffDays = GetDiffDays(createdOnDt, today);
    //var projectAge = $('#processDuration').html();
    //$('#HeaderTilesWrapperLayoutElement').html(projectAge);
    //$('#HeaderTilesWrapperLayoutElement').css('color','black');
    console.log('The Project Age is ' + DiffDays);
    var div = $('#HeaderTilesWrapperLayoutElement');
    div.text('The Project Age is ' + DiffDays + ' days');
    div.css('color', 'black');
    div.css('font-weight', 'bold');
  }
  function GetDiffDays(date1, date2) {
    var timeDiff = Math.abs(date2.getTime() - date1.getTime());
    return Math.round(timeDiff / (1000 * 3600 * 24));
  }

在完全加载DOM时,ShowProjectAge工作良好。但是,当从系统调用时,它不会被加载。

尝试使用document.ready

根据我对Dynamics CRM DOM的理解,所有的javascript都在一个单独的空iframe中。

表单元素在另一个空iframe内。

注意它们都在同一个窗口中,因此将这一行改为:

var div = $('#HeaderTilesWrapperLayoutElement');

:

var div = $('#HeaderTilesWrapperLayoutElement', window.parent.document);

首先,不要在CRM中做任何DOM操作。不值得这么做。。

第二,这可以用零代码开箱即用:
  1. 创建自定义计算字段
  2. 使用这个公式:DiffInDays(createdon, Now())
  3. 把这个字段放在表单的任何你想要的地方

第三,这是完全错误的:

var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn.$2_2.$2T_2);

你可以这样获取日期:

var createdOnDt = Xrm.Page.getAttribute("createdon").getValue();

你有两个选择,首先你可以打开"遗留表单呈现"打开遗留呈现或者你必须重构你的代码和使用支持的方法链接到文档

,但我在想,你不能改变css使用Xrm。页