0

尝试通过使用 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已经尝试使用

4

3 回答 3

2

首先,永远不要在 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();
于 2016-11-15T19:24:49.107 回答
1

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

表单元素位于另一个空 iframe 中。

请注意,它们都在同一个窗口中,因此更改以下行:

var div = $('#HeaderTilesWrapperLayoutElement');

对此:

var div = $('#HeaderTilesWrapperLayoutElement', window.parent.document);
于 2016-11-16T06:02:45.690 回答
-1

您有两个选择,首先您可以打开“旧版表单渲染”打开旧版渲染,或者您必须重构您的代码并使用支持的方法链接到文档

但我在想,你不能用 Xrm.Page 改变 css

于 2016-11-15T15:27:16.667 回答