3

我在我的联系表单中添加了一个 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

4 回答 4

2

GetGlobalContext 函数和 ClientGlobalContext.js.aspx(客户端参考)

使用 Web 资源进行编程时使用 GetGlobalContext 函数来访问上下文信息。要在 HTML Web 资源中获取 GetGlobalContext 函数,请包含对 ClientGlobalContext.js.aspx 的引用。

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


更多建议:

网页 (HTML) 网络资源

尝试windowwindow.parent.Xrm.Page.

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

在表单上使用 IFRAME 和 Web 资源控件

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

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

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

示例:通过 data 参数将多个值传递给 Web 资源

于 2016-12-02T09:09:06.960 回答
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>
于 2016-12-02T10:19:23.700 回答
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>
于 2017-02-14T22:01:06.450 回答
0

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

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

见下图 就绪状态完成

于 2017-02-08T15:01:45.993 回答