Как манипулировать DOM в Dynamics CRM с помощью jQuery
Попытка манипулировать DOM путем обновления значения поля с помощью метода добавления jQuery.
Обнаружено, что манипуляции с DOM не разрешены в Dynamics CRM с использованием обычного JavaScript или JQuery
Поэтому попытался добавить веб-ресурс HTML со сценариями на его вкладке источника:
Функция добавляется в форму проекта и настраивается для вызова на 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
уже
3 ответа
Исходя из моего понимания DOM Dynamics CRM, все javascript-коды находятся в отдельном пустом фрейме.
Элементы формы находятся внутри другого пустого iframe.
Обратите внимание, что они оба находятся в одном и том же окне, поэтому измените строку с этого:
var div = $('#HeaderTilesWrapperLayoutElement');
к этому:
var div = $('#HeaderTilesWrapperLayoutElement', window.parent.document);
Во-первых, никогда не делайте никаких манипуляций с DOM в CRM. Это не стоит усилий. Когда-либо.
Во-вторых, это можно сделать из коробки с нулевым кодом:
- Создать пользовательское вычисляемое поле
- Используйте эту формулу: DiffInDays(madeon, Now())
- Поместите это поле в форму где вы хотите
В-третьих, это совершенно неправильно:
var createdOn = Xrm.Page.getAttribute("createdon");
var createdOnDt = new Date(createdOn.$2_2.$2T_2);
Вы можете получить дату, как это:
var createdOnDt = Xrm.Page.getAttribute("createdon").getValue();
У вас есть два варианта: во-первых, вы можете включить "рендеринг устаревших форм", включить рендеринг устаревших или вы должны рефакторинг своего кода и использовать для поддерживаемого метода ссылку на документацию
но я думаю, вы не можете изменить в css с помощью Xrm.Page