Как получить значение из формы Microsoft Dynamics CRM для веб-ресурса HTML
Я работаю над Microsoft Dynamics CRM 2016. У меня есть description
поле в форме Lead вместе с тем, что я добавил веб-ресурс HTML. Когда я ввожу description
значение в форме CRM, оно должно отображаться на моем веб-ресурсе HTML.
Как этого достичь?
HTML-код веб-ресурса:
<html>
<head>
<script src="../ClientGlobalContext.js.aspx" type="text/javascript"></script>
<script text="text/javascript">
var description = Xrm.Page.getAttribute("description").getValue();
</script>
</head>
<body>
<table>
<thead><tr><th>Parameter</th><th>Value</th></tr></thead>
<tbody>
<tr><td>description</td><td id="description">null</td></tr>
</tbody>
</table>
</body>
</html>
Тогда в свойствах веб-ресурса у меня есть:
- добавил пользовательский параметр: (данные)= RelatedEntity= приводит &RelatedField= описание
- включил опцию передачи кода типа объекта записи и уникального идентификатора в качестве параметров
- добавленной
description
в зависимости
3 ответа
Вы можете прикрепить событие JavaScript onChange() к description
приписывать. Событие получит значение описания, затем получит элемент из HTML-элемента управления, а затем установит значение элемента равным description
значение атрибута.
Вот пример того, как это может выглядеть:
function descriptionOnChange() {
// Get the value of the description attribute.
var description = Xrm.Page.getAttribute('description').getValue();
// Get the HTML iFrame object.
var iFrame = Xrm.Page.ui.controls.get('IFRAME_WebResourceName').getObject();
// Get the element from the iFrame.
var element = iFrame.contentWindow.document.getElementById('htmlDescription');
// Set the element's value.
element.value = description;
}
Примечание: убедитесь, что межкадровый сценарий не отключен в свойствах вашего iFrame:
Однако вы можете получить сообщение об ошибке, если междоменные запросы iFrame заблокированы. Смотрите этот пост для объяснения и обходного пути.
Реализация обходного пути в CRM может выглядеть следующим образом:
Добавить
<script>
пометить ваши HTML<body>
принять и обработать сообщение:<script> window.addEventListener('message', function(event) { if (~event.origin.indexOf('https://<yourCRMUrl>')) { document.getElementById('htmlDescription').value = event.data; } else { return; } }) </script>
Измените содержимое вашего
description
Атрибут onChange () для этого события:var description = Xrm.Page.getAttribute("description").getValue(); var iFrame = Xrm.Page.ui.controls.get('IFRAME_WebResourceName').getObject(); iFrame.contentWindow.postMessage(description, '*');
Вы можете попробовать что-то вроде этого:
<html>
<head>
<script src="ClientGlobalContext.js.aspx" type="text/javascript"></script>
<script type="text/javascript">
function onLoad() {
var description = parent.Xrm.Page.getAttribute("description").getValue();
document.getElementById("description").innerHTML = description;
}
</script>
</head>
<body onload="onLoad()">
<table>
<thead><tr><th>Parameter</th><th>Value</th></tr></thead>
<tbody>
<tr><td>description</td><td id="description">null</td></tr>
</tbody>
</table>
</body>
</html>
Кроме того, по мере роста вашего кода вы можете переместить его в собственный веб-ресурс и включить в заголовок html следующим образом:
<script src="myLibrary.js" type="text/javascript"></script>
Я поместил свою кнопку в Аккаунт.
HTML:-
<html>
<head>
<meta>
</head>
<body onfocusout="parent.setEmailRange();" style="overflow-wrap: break-word;">
<p>Account Name:</p>
<p id="accountName"></p>
<p>Telephone:</p>
<p id="telephone"></p>
<p>Fax:</p>
<p id="fax"></p>
<p>Website URL:</p>
<p id="websiteUrl"></p>
<script>
//<!-- Retrieving Window URL -->
var url = window.location.href;
//<!-- Processing The Data From URL -->
var dataIndex = url.lastIndexOf("=") + 1;
var dataLength = url.length;
var recordData = url.slice(dataIndex, dataLength);
var processedRecordData = decodeURIComponent(recordData.replace(/\+/g, ' '));
//<!-- Splitting the processedRecordData into separate values -->
var values = processedRecordData.split(",");
//<!-- Appending Data to HTML Elements -->
document.getElementById("accountName").innerHTML = values[0] || "";
document.getElementById("telephone").innerHTML = values[1] || "";
document.getElementById("fax").innerHTML = values[2] || "";
document.getElementById("websiteUrl").innerHTML = values[3] || "";
</script>
</body>
</html>
JavaScript:-
function getValue(primarycontrol) {
var formContext = primarycontrol;
var AccountName = formContext.getAttribute("name").getValue();
var Telephone = formContext.getAttribute("telephone1").getValue();
var Fax = formContext.getAttribute("fax").getValue();
var WebsiteUrl = formContext.getAttribute("websiteurl").getValue();
var windowsoption = { height: 400, width: 400 };
var parameters = encodeURIComponent(AccountName) + ',' +
encodeURIComponent(Telephone) + ',' +
encodeURIComponent(Fax) + ',' +
encodeURIComponent(WebsiteUrl);
Xrm.Navigation.openWebResource("ispl_HTML_Form", windowsoption, parameters);
}