Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.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 无法从CRM 2011中的HTML web资源中访问Xrm.Page.data_Javascript_Html_Dynamics Crm 2011 - Fatal编程技术网

Javascript 无法从CRM 2011中的HTML web资源中访问Xrm.Page.data

Javascript 无法从CRM 2011中的HTML web资源中访问Xrm.Page.data,javascript,html,dynamics-crm-2011,Javascript,Html,Dynamics Crm 2011,我正在尝试从HTML web资源中访问Xrm.Page.data对象,该资源已插入CRM 2011中的表单中。但是,根据我尝试访问Xrm实体的方式,我发现它未定义或Xrm.Page.data为null。web资源的代码如下所示: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <htm

我正在尝试从HTML web资源中访问Xrm.Page.data对象,该资源已插入CRM 2011中的表单中。但是,根据我尝试访问Xrm实体的方式,我发现它未定义或Xrm.Page.data为null。web资源的代码如下所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<script type="text/javascript">

function OpenMyApp(e){
    alert('Xrm defined: ' + (typeof Xrm != 'undefined'));
        // The line above returns the string 'Xrm defined: false'

    alert('window.top.opener.parent.Xrm defined: ' + (typeof window.top.opener.parent.Xrm != 'undefined'));
        // The line above returns the string 'window.top.opener.parent.Xrm defined: true'


    alert('frames[0].Xrm defined: ' + (typeof frames[0].Xrm != 'undefined'));
        // the line above will actually throw an error and stop the script, because the frames collection is empty. 

    alert(window.top.opener.parent.Xrm.Page.data);
        // the line above returns null. 

    // var myId = Xrm.Page.data.entity.attributes.get("new_field_i_want").getValue();
        // The line above is what I would like to see work. 

    e.preventDefault();
 }
</script>

</head>
<body>
<a onClick="OpenMyApp(event);" href="#">My Link</a>
</body>
</html>

函数OpenMyApp(e){
警报('Xrm已定义:'+(Xrm的类型!='undefined');
//上面的行返回字符串“Xrm defined:false”
警报('window.top.opener.parent.Xrm defined:'+(typeof window.top.opener.parent.Xrm!='undefined');
//上面的行返回字符串“window.top.opener.parent.Xrm defined:true”
警报('frames[0].Xrm defined:'+(frames[0].Xrm!=“undefined”);
//上面的一行实际上会抛出一个错误并停止脚本,因为frames集合是空的。
警报(window.top.opener.parent.Xrm.Page.data);
//上面的行返回null。
//var myId=Xrm.Page.data.entity.attributes.get(“new_field_i_want”).getValue();
//上面这一行是我希望看到的工作。
e、 预防默认值();
}
我已经从JavaScript函数中成功访问了Xrm.Page.data,该函数是在表单事件(例如form.Load)触发的库的一部分。当它嵌入表单上的HTML web资源时,我遇到了这个问题。谁能解释一下我做错了什么,以及是否真的有一种方法可以以我希望的方式访问Xrm.Page.data


多谢各位

尝试使用以下语法访问Xrm:

window.parent.Xrm.Page.getAttribute()...

window.parent.Xrm.Page.getControl()...

window.parent.Xrm.Page.context...


来自示例代码。

这适用于在iframe/对话框中加载web资源的情况。它可以访问父帧,然后查找所有可用帧,并检查哪个帧具有

Xrm.Page.data!=空的

代码

$.each(parent.window.frames, function(i,val){   
    if (parent.window.frames[i].Xrm.Page.data != null) {
           parent.window.frames[i].Xrm.Page.data.entity.attributes.get('ownerid').setValue([{ id: '{' + sourceKey + '}', name: name, entityType: "systemuser" }]);
           parent.window.frames[i].Xrm.Page.data.entity.save();
           break;
    }
});   

根据TWilly的回答,我创建了下面的函数来检索
Xrm
对象

GetXrm: function () {

    var frame = $.grep(parent.window.frames, function (e) {
        if (e.Xrm.Page.data)
            return true;
     });

     return frame[0].Xrm;
}

在此之前设置Xrm,如下所示:

  var Xrm = parent.Xrm;
    var Url = Xrm.Page.data.entity.attributes.getByName("attributename").getValue();

我也有同样的问题。我在Chrome37上运行这个。我有一个webresource显示在实体表单的IFrame中。我已经尝试了所有的组合,但仍然无法获得Xrm对象。谢谢你的帮助!您可以执行
var Xrm=window.parent.Xrm
因此每个
Xrm
调用都不需要在
window.parent
前面加前缀@塔哈·艾哈迈德,如果未定义Xrm,请尝试
帧[0]。Xrm
帧[1]。Xrm
。因此,您可以执行
var Xrm.Page.data=Xrm.Page.data | | frames[0]。Xrm.Page.data | | | frames[1]。Xrm.Page.data | | window.parent.Xrm.Page.data。类似于我关于识别脏字段的讨论。
  var Xrm = parent.Xrm;
    var Url = Xrm.Page.data.entity.attributes.getByName("attributename").getValue();