Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Dynamics CRM 365-无法访问HTML web资源中的Xrm.Page.entity_Javascript_Html_Dynamics Crm_Dynamics Crm 365 - Fatal编程技术网

Javascript Dynamics CRM 365-无法访问HTML web资源中的Xrm.Page.entity

Javascript Dynamics CRM 365-无法访问HTML web资源中的Xrm.Page.entity,javascript,html,dynamics-crm,dynamics-crm-365,Javascript,Html,Dynamics Crm,Dynamics Crm 365,我在我的联系人表单中添加了一个html资源,它只包含一个小图像,以便将其放置在联系人字段旁边。当用户单击它时,它会启动一个javascript函数,我想在其中获取表单特定字段的值。该字段是联系人实体的属性。 以下是HTML web资源: <html> <head> <style type="text/css"> body { margin: 0; padding: 0;

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

<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>
但它也不起作用:无法读取null的实体

问题是getAttribute返回null,不管我想要获取的实体的字段是什么。它总是未定义的 有人有主意吗

使用web资源编程时,请使用GetGlobalContext函数 获取上下文信息。要获取GetGlobalContext 函数,包括对 ClientGlobalContext.js.aspx

在包含引用时,可以使用GetGlobalContext函数 指向位于web根目录下的ClientGlobalContext.js.aspx页面 资源目录


还有几点建议:

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

添加到表单的HTML web资源不能使用定义的全局对象 通过在表单中加载的JavaScript库HTML web资源可能会 通过以下方式与表单中的Xrm.Page或Xrm.Utility对象交互 使用parent.Xrm.Page或parent.Xrm.Utility,但使用全局对象 无法使用父级访问由表单脚本定义的。你 应在中加载HTML web资源需要的任何库 HTML web资源,因此它们不依赖于 形式

尝试从表单脚本传递输入

对于网页(HTML)web资源,请使用setSrc方法操作 querystring参数直接输入

在HTML页面中,可以使用 JavaScript中的window.location.search属性


如果您无法服用詹姆斯·伍德的绝妙解决方案,请尝试:

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);
};
<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>
Xrm.Page.ui.controls.get('id\u iframe').getObject():返回HTML对象iframe

2。您可能会遇到一个名为“问题”的事件。

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

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);
};
<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>

点击我
函数DoTheThing(){alert('thing was done');}
函数SetupEvents(){
addEvent(document.getElementById('myLabel'),'click',函数(){DoTheThing();});
}
函数addEvent(元素、evnt、funct){
if(元素附件)
返回元素.attachEvent('on'+evnt,funct);
其他的
返回元素.addEventListener(evnt、funct、false);
}

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

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

假设您的Web资源位于根标签上。。。然后必须首先添加ClientGlobalContext引用

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

非常感谢您的回答,但我可以访问Xrm.Page,甚至可以访问Xrm.Page.Context,但不能访问显示实体的数据,例如联系人…啊,没有注意到这个细节。是的。。。你有什么想法吗?非常感谢。我目前正在尝试该解决方案:。稍后将尝试您的解决方案:)放置在表单上的HTML web资源不会放置在项目中。我刚刚创建了一个Web资源并将其放置在表单上。我在Microsoft Dynamics 2015上做了同样的事情(更具体地说是在统一服务台上),效果很好。。。但在Dynamics 365上,但在检查DOM之后,似乎已将HTML ressource添加到iFrame中。我会尝试你的解决方案。@HubertSolecki:我认为将HTML web资源放在iFrame或web资源控件中不会有什么区别。在Dynamics CRM 2016/365中,在大多数情况下,web资源的加载早于与之集成的表单。因此,在将函数附加到iFrame的onload事件之后,还需要设置它的源。@Henk van Boeijen>>“因此,在将函数附加到iFrame的onload事件之后”->,出于这个原因,我使用了Xrm.Page.ui.controls.get('id_iFrame').getObject().onload…有些不对劲,您提供的两个代码示例都可以正常工作。将调试器语句放入调用函数中,在浏览器中打开开发工具,然后单击调用。然后,在开发工具中,当您点击调试器时,检查window.parent.location。它返回的值是您期望的值吗?同时检查window.parent.Xrm.Page。它应该有一个getAttribute方法和一个数据属性。这种类型的调查可能会发现一些错误。另外,您在所有浏览器中得到的错误都是相同的吗?