如何使用 jQuery 在 Dynamics CRM 中操纵 DOM
How to manipulate DOM in Dynamics CRM using jQuery
正在尝试通过使用 jQuery 的追加方法更新字段值来操纵 DOM。
发现DOM manipulation is not allowed in Dynamics CRM using normal javascript or jQuery
因此尝试在其源选项卡中添加带有脚本的 HTML Web 资源:
该函数已添加到项目表单中,并配置为在 OnLoad
事件中调用。但是,它会在表单加载之前被调用。
该函数在console
中执行时效果很好,但当被系统调用时,它不起作用。
setTimeout(ShowProjectAge, 3000);
function ShowProjectAge() {
var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn._2.T_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
你有两个选择,首先你可以打开 "legacy form rendering" turn on legacy rendering or you must refactoring your code and used to supported method link to documentation
但我在想,您不能将 css 更改为 Xrm.Page
首先,切勿在 CRM 中进行任何 DOM 操作。这是不值得的努力。曾经.
其次,这可以用零代码开箱即用:
- 创建自定义计算字段
- 使用这个公式:DiffInDays(createdon, Now())
- 将该字段放在表单上您想要的任何位置
第三,这是完全错误的:
var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn._2.T_2);
你可以这样获取日期:
var createdOnDt = Xrm.Page.getAttribute("createdon").getValue();
根据我对 Dynamics CRM 的理解DOM,所有 javascript 都在一个单独的空 iframe 中。
表单元素在另一个空的 iframe 中。
请注意,它们都在同一个 window 中,因此将此行更改为:
var div = $('#HeaderTilesWrapperLayoutElement');
对此:
var div = $('#HeaderTilesWrapperLayoutElement', window.parent.document);
正在尝试通过使用 jQuery 的追加方法更新字段值来操纵 DOM。
发现DOM manipulation is not allowed in Dynamics CRM using normal javascript or jQuery
因此尝试在其源选项卡中添加带有脚本的 HTML Web 资源:
该函数已添加到项目表单中,并配置为在 OnLoad
事件中调用。但是,它会在表单加载之前被调用。
该函数在console
中执行时效果很好,但当被系统调用时,它不起作用。
setTimeout(ShowProjectAge, 3000);
function ShowProjectAge() {
var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn._2.T_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
你有两个选择,首先你可以打开 "legacy form rendering" turn on legacy rendering or you must refactoring your code and used to supported method link to documentation
但我在想,您不能将 css 更改为 Xrm.Page
首先,切勿在 CRM 中进行任何 DOM 操作。这是不值得的努力。曾经.
其次,这可以用零代码开箱即用:
- 创建自定义计算字段
- 使用这个公式:DiffInDays(createdon, Now())
- 将该字段放在表单上您想要的任何位置
第三,这是完全错误的:
var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn._2.T_2);
你可以这样获取日期:
var createdOnDt = Xrm.Page.getAttribute("createdon").getValue();
根据我对 Dynamics CRM 的理解DOM,所有 javascript 都在一个单独的空 iframe 中。
表单元素在另一个空的 iframe 中。
请注意,它们都在同一个 window 中,因此将此行更改为:
var div = $('#HeaderTilesWrapperLayoutElement');
对此:
var div = $('#HeaderTilesWrapperLayoutElement', window.parent.document);