如何从控制台访问控件

时间:2013-01-05 17:26:10

标签: javascript dynamics-crm-2011 dynamics-crm-online dynamics-crm-2013

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

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

这就是我在我插入CRM的网络资源中使用的确切语法。但是,我只收到一条错误消息,指出“无法获取未定义或空引用的属性'控件'。”

我明白这个消息。我想知道的是双重的。

  1. 从控制台( F12 )可以使用哪种语法来引用屏幕上的内容?
  2. 为什么它不像我那样工作? ui 来自哪里?
  3. 我已经检查过我可以参考 Xrm Crm.Page ,但显然 ui null (当我打印出 Page 的内容但是设置为 null 时,会列出它。)

5 个答案:

答案 0 :(得分:13)

我知道这是一个有点老的线程,但是如果从控制台执行命令时,你仍然得到'对象不支持属性..'错误,IE F12;试着从框架中调用它,即

frames[0].Xrm.Page.getAttribute("controlId").getValue();

在CRM 2013中,它有点不同

frames[1].Xrm.Page

答案 1 :(得分:3)

在不同的浏览器中检测帧很难,所以这个小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
    }

它的作用是什么?

  

它基本上做的是循环0-5以找到框架在哪里   Xrm.Page.ui不是undefined,一旦获得它就会将其分配给Xrm并打破循环。

如何使用?

  

要使用它,只需复制/粘贴并在浏览器控制台中运行一次   会话之后,您可以从浏览器控制台运行/测试所有 Xrm 代码。

答案 2 :(得分:2)

这对我有用Xrm.Page.getControl("controlId")。它只是你已经拥有的捷径... cant-disable-set-to-read-only-protect-gray-out-etc-a-field

答案 3 :(得分:1)

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

Xrm.Page.getAttribute("lastname").getValue();

lastname 部分在创建实体联系人的实例时在一分钟前进行了测试。我只是在一个执行 onchange 的脚本中放入了一个断点,虽然是破碎的,我把上面的命令输入到控制台。

如果这两种方法都不适合您,那么您的CRM或浏览器就会遇到一些奇怪的问题。

答案 4 :(得分:0)

有些人需要此信息的原因是访问自己的代码。如果您需要从控制台访问自己的方法,那么在2011年,您的javascript中的任何全局方法(或命名空间)也都在表单[0]中。显然,从命名的角度来看,这是一个坏主意。在表单v6 +中,任何全局对象或函数都位于frame [0]内的一个名为customScriptsFrame的对象中(或者可能是找到Xrm的哪一帧)。

frames[0].customScriptsFrame.myFunctionName();