Как получить значение из формы 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 может выглядеть следующим образом:

  1. Добавить <script> пометить ваши HTML <body> принять и обработать сообщение:

    <script>
        window.addEventListener('message', function(event) {
            if (~event.origin.indexOf('https://<yourCRMUrl>')) {
                document.getElementById('htmlDescription').value = event.data;
            } else {
                return;
            }
        })
    </script>
    
  2. Измените содержимое вашего 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);
}
Другие вопросы по тегам