如何从控制台访问控件

How to access controls from a console

本文关键字:访问 控件 控制台      更新时间:2023-09-26

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

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

这正是我在插入CRM的web资源中使用的语法。然而,我只得到一个错误消息说,"无法获得属性'controls'的未定义或空引用"。

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

  1. 什么语法将工作从控制台(F12)指的东西在屏幕上?
  2. 为什么它不像我那样工作?ui是从哪里来的?

我检查了我可以同时引用XrmCrm。Page但显然uinull(当我打印出Page但设置为null时列出)。

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

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
    }

它所做的基本上是循环通过0-5找到帧Xrm.Page.ui不是undefined,一旦它得到它,它将它分配给Xrm并打破循环。

如何使用

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

这适用于我Xrm.Page.getControl("controlId")。这只是你已经知道的一个快捷方式。can -disable-set-to-read-only-protect- grey -out-etc-a-field

除了@Daryl所说的,我还可以补充一点,我使用了不同的语法。不知道为什么,我也没办法让他工作。可能与不同的浏览器版本或其他有关。相反,如果你仍然不能让它工作(尽管我必须承认他更短=更好),试着执行这个。

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

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

如果这两种方法都不适合你,那么你的CRM或浏览器可能出现了一些奇怪的问题。

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

frames[0].customScriptsFrame.myFunctionName();