Dynamics CRM 365 - 无法访问HTML Web资源

时间:2016-12-02 08:19:32

标签: javascript html dynamics-crm dynamics-crm-365

我在联系表单中添加了一个html资源,其中只包含一个小图片,以便将其放在联系人字段旁边。当用户点击它时,它会启动一个javascript函数,我想在其中获取表单特定字段的值。该字段是联系实体的属性。 这是HTML网络资源:

<html>
<head>
    <style type="text/css">
        body 
        {
         margin: 0;
         padding: 0;
         }
     </style>
    <script type="text/javascript">
        function call() {
            var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
        }
    </script>
<meta>
</head>
<body style="word-wrap: break-word;">
    <img onmouseover="this.style.cursor='pointer';" src="/webresources/new_/image/image.png" onclick="call()">
</body>
</html>

我也尝试过如下获取数据:

window.parent.Xrm.Page.data.entity.attributes.get("telephone1").getValue()

但它也不起作用: 无法读取null的实体

问题是getAttribut返回null,尽管我想要的实体字段。它总是 未定义 有人有想法吗?

4 个答案:

答案 0 :(得分:1)

GetGlobalContext function and ClientGlobalContext.js.aspx (client-side reference)

  

使用Web资源编程时使用GetGlobalContext函数   获取上下文信息的访问权限。获取GetGlobalContext   HTML网络资源中的函数,包括对引用的引用   ClientGlobalContext.js.aspx。

     

包含引用时,可以使用GetGlobalContext函数   到位于Web根目录的ClientGlobalContext.js.aspx页面   资源目录。

更多建议:

Webpage (HTML) web resources

尝试从window中删除window.parent.Xrm.Page

  

添加到表单的HTML Web资源无法使用定义的全局对象   由表单中加载的JavaScript库。 HTML网络资源可能   与表单中的Xrm.Page或Xrm.Utility对象进行交互   使用parent.Xrm.Page或parent.Xrm.Utility ,但是使用全局对象   使用父级无法访问由表单脚本定义的内容。您   应该加载HTML Web资源所需的任何库   HTML Web资源,因此它们不依赖于加载的脚本   形式。

Use IFRAME and web resource controls on a form

尝试从表单脚本传递输入。

  

对于网页(HTML)网络资源,请使用setSrc方法进行操作   查询字符串参数直接。

     

在HTML页面中,可以使用以下方法访问参数   JavaScript中的window.location.search属性。

Sample: Pass multiple values to a web resource through the data parameter

答案 1 :(得分:0)

如果您不能采用优秀的James Wood解决方案,请尝试:

<强> 1。您必须检查您的商品是否在iframe中

您可以从以下脚本中获得灵感:

Xrm.Page.ui.controls.get('id_iframe').getObject().onload= function() {
    var element = Xrm.Page.ui.controls.get('id_iframe').getObject().contentWindow.document.getElementById('id_element_inside_iframe');
    console.log(element);
};

Xrm.Page.ui.controls.get('id_iframe')。getObject():返回HTML对象iFrame

<强> 2。你可能会遇到一个叫做问题的事件。

您可以从以下脚本中获得灵感:

<HTML>
  <BODY onload="SetupEvents()">
    <label id="myLabel" >Click me</label>
  </BODY>
  <SCRIPT>
      function DoTheThing() {  alert('thing was done');   }
      function SetupEvents() {
          addEvent( document.getElementById('myLabel'),'click', function () { DoTheThing(); });
      }

        function addEvent(element, evnt, funct){
            if (element.attachEvent)
            return element.attachEvent('on'+evnt, funct);
            else
            return element.addEventListener(evnt, funct, false);
        }
</SCRIPT>
</HTML>

答案 2 :(得分:0)

我认为这是一个Turbo Forms问题,因为Turbo Forms并行加载Javascript并加载 ClientGlobalContext.js.aspx 作为最后一项。 IFrame包含 OnReadyStateCompleted 事件,我建议您在该事件下添加以下代码。

function call() {
            var phoneNumber = window.parent.Xrm.Page.getAttribute("mobilephone").getValue();
        }

见下图 ReadyStateComplete

答案 3 :(得分:0)

让我们说你的网络资源是根标签...然后你必须首先添加ClientGlobalContext参考

<script src="ClientGlobalContext.js.aspx" type="text/javascript"></script>

执行此操作后,您应该能够通过首先删除"window"部分来获取您的函数的属性值

<script type="text/javascript">
    function call() {
        var phoneNumber = parent.Xrm.Page.getAttribute("mobilephone").getValue();
    }
</script>