4

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

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

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

我明白这个信息。我想知道的是两方面的。

  1. 控制台 ( F12) 使用什么语法来引用屏幕上的内容?
  2. 为什么它不像我那样工作?ui是从哪里来的?

我已经检查过我可以同时引用XrmCrm.Page但显然uinull(当我打印出Page的内容但设置为null时它已列出)。

4

5 回答 5

13

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

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

在 CRM 2013 中有所不同

frames[1].Xrm.Page
于 2013-05-28T17:11:51.630 回答
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代码。

于 2017-04-28T04:07:06.660 回答
2

这对我有用Xrm.Page.getControl("controlId")。这只是您已经拥有的东西的捷径...不能禁用设置为只读保护灰色输出等字段

于 2013-01-06T23:09:03.493 回答
1

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

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

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

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

于 2013-01-09T19:46:10.667 回答
0

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

frames[0].customScriptsFrame.myFunctionName();

于 2018-02-05T20:57:55.210 回答