Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.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 如何从控制台访问控件_Javascript_Dynamics Crm 2011_Dynamics Crm Online_Dynamics Crm 2013 - Fatal编程技术网

Javascript 如何从控制台访问控件

Javascript 如何从控制台访问控件,javascript,dynamics-crm-2011,dynamics-crm-online,dynamics-crm-2013,Javascript,Dynamics Crm 2011,Dynamics Crm Online,Dynamics Crm 2013,我试图从控制台执行以下命令 var subject = Xrm.Page.ui.controls.get("subject"); 这正是我在插入CRM的web资源中使用的语法。然而,我只收到一条错误消息,说“无法获取未定义或空引用的属性‘控件’” 我确实理解这个信息。我想知道的是双重的 控制台(F12)将使用什么语法来引用屏幕上的内容 为什么它不像我那样工作?ui从何而来 我已经检查过,我可以同时引用Xrm和Crm.Page,但ui显然是空的(当我打印页面内容时会列出它,但设置为空)。这对我有

我试图从控制台执行以下命令

var subject = Xrm.Page.ui.controls.get("subject");
这正是我在插入CRM的web资源中使用的语法。然而,我只收到一条错误消息,说“无法获取未定义或空引用的属性‘控件’”

我确实理解这个信息。我想知道的是双重的

  • 控制台(F12)将使用什么语法来引用屏幕上的内容
  • 为什么它不像我那样工作?ui从何而来

  • 我已经检查过,我可以同时引用Xrm和Crm.Page,但ui显然是空的(当我打印页面内容时会列出它,但设置为空)。

    这对我有效
    Xrm.Page.getControl(“controlId”)
    。这只是你已经拥有的东西的捷径…

    除了@Daryl所说的,我可以补充说我使用了不同的语法。由于某种原因,我也不能让他工作。可能与不同的浏览器版本或其他有关。相反,如果你仍然不能让它工作,试着执行它(尽管我必须承认他的更短=更好)

    lastname部件在一分钟前创建实体Contact实例时进行了测试。我只是在一个脚本中插入了一个断点,该脚本在一次更改中执行,当断点指向时,我将上面的命令输入到控制台

    var subject = Xrm.Page.ui.controls.get("subject");
    

    如果这两种方法都不适用于您,您的CRM或浏览器就会出现一些奇怪的问题。

    我知道这是一个有点旧的线程,但如果您在从控制台执行命令(即F12)时仍然遇到“object Not support property…”错误;试着从框架中调用它,即

    frames[0].Xrm.Page.getAttribute("controlId").getValue();
    
    在CRM 2013中,情况略有不同

    frames[1].Xrm.Page
    

    在不同的浏览器中检测帧有点困难,所以这个小小的javascript可以帮助您:

    for(var i=0;i<5;i++) //loop through 0 to 4
        if(frames[i].Xrm.Page.ui != undefined) //check if undefined    
        {
            Xrm = frames[i].Xrm;  //assign Xrm
            console.info("~: Xrm updated with frame " + i + " :~"); //show info
            break; //breakout the loop
        }
    

    for(var i=0;i一些人需要此信息的原因是访问他们自己的代码。如果您需要从控制台访问自己的方法,2011年,javascript中的所有全局方法(或名称空间)都是以[0]的形式出现的。显然,仅从命名的角度来看,这是一个坏主意。在forms v6+中,任何全局对象或函数都位于名为customScriptsFrame的对象中,位于frames[0](或者可能是找到Xrm的任何帧)


    框架[0]。customScriptsFrame.myFunctionName()

    您的命令代码是否封装在JS函数中?因为在其他情况下,
    Xrm.Page.ui
    将始终被解释为null或不是对象,就像您的情况一样。您能解释一下为什么会这样吗?Xrm是一个可以从控制台访问的变量-为什么封装在函数中的调用会有所不同?谢谢!@Ryan I相信他弄错了,或者他误解了这个问题。整个DOM中都有一大堆Xrm和Xrm.Page。但是针对所见内容的页面是通过在其前面添加帧[0]来访问的(当从控制台尝试时,而不是从web资源).更强程度的烦恼…这非常有用!非常感谢。我不明白为什么帧[0]是必需的,或者为什么它会有帮助。我不完全确定,但这可能与应用程序运行在其中一个框架中有关,尽管人们看不到它。我猜您可能会尝试注册两个不同的组织,在同一个浏览器、同一个窗口或可能不同的浏览器中访问它们,然后检查ey可能会获得帧[0]、帧[1]等。当CRM与自己的控件对话时,它知道自己是哪个实例,并且无法访问其他组织。但当控制台窗口发出调用时,引用变得模糊。可能。请检查-返回给我们并告诉。:)当我在web资源中运行代码时,我会让它找到我的组件(称为subject)但是当我从控制台执行它时,我得到“Object不支持属性或方法'getControl'”。这就像通过控制台访问时,我的Xrm.页面中没有定义getControl。我会做错什么?!@AndreasJohansson你运行的是什么版本的IE?你尝试过其他计算机吗?我从来没有在CRM中直接调用过任何东西,而不是试图从命令行手动调用它……我已经尝试过ED IE10在Windows Server上的Win8和IE8上。相同的问题是:你可以点击“新建”并启动一个新的联系人,在这个过程的中间,你可以按下F12并访问字段内容:<代码> XRM.Page。GETFAULL(“所有者”)。GETValuy()<代码>?!只要我点击了“开始调试”。按钮,是的。你说的开始调试是指F12,对吗?还是我遗漏了什么,没有遵循正确的方法?你错了。我现在坐在CRM 2013上,它仍然是帧[0]。但是,您可能想阅读我上面的评论。也许这就是您的计算机上发生的事情?这一次知道会很酷。@lazarogonzales事实上,我必须补充一点,我可能也有部分错误。2011年和2013年之间的帧[索引]部分以及内部部署和在线之间似乎存在差异(如果在2015年之前/之后的更新、汇总和提升之间的差异有所不同,我不会感到窒息)。很好的提示!框架[0]适用于我使用CRM 2015内部更新0.1,Chrome 46.0.2490.80
    frames[0]是钱!我曾经尝试在页面上的一些随机JS文件中调试。总是很难找到一个有效的。这可以让你直接进入控制台。你可以考虑有条件的不同语法。首先,我会自发地尝试避免<代码>!我相信如果(!frames[i].Xrm.Page.ui)
    只可以使用
    。第三,我相信这可能是for循环的一个条件,使所有行的数量最小化。是的,可以进行修改,但是如果(!frames[i].Xrm.Page.ui)不起作用,并且无法获取未定义或空引用的属性“Xrm”