【发布时间】:2012-10-17 02:28:29
【问题描述】:
我正在使用 Dynamics CRM 2011 Online 并尝试重构一些适用于“报价”>“添加产品”页面的代码,以使其也适用于“订单”>“添加产品”。问题是,当页面加载时,我收到错误“无法获取未定义或空引用的属性 'getValue'。”
我进入 IE 控制台(尝试了 IE 9 和 10)并输入了我认为有问题的行:
Xrm.Page.getAttribute('ati_clin').getValue()
它抱怨“对象不支持属性或方法'getAttribute'”。我也试过了
document.getElementById('ati_clin')
但这也失败了。
这对我来说没有意义,因为我可以使用开发人员控制台的 HTML 视图来查找页面上的对象,并且它显然就在那里(也没有错字)。即使其中一个页面在运行时正常运行而另一个页面没有正常运行,该语句在两个页面上的控制台中都失败也是没有意义的。它不应该至少在运行时确实工作的页面上工作吗?
在做了一些研究之后,我认为以下帖子是最相关的,但我担心它不会让 我 得到一个答案,因为我对此有多么陌生:Xrm.Page.data is null
我的问题是,如果元素明显存在,为什么控制台会返回此错误?
【问题讨论】:
-
所以这发生在注册到
OrderDetail表单的OnLoad事件的代码中? -
我正在运行的代码,我在整个页面加载后从控制台执行。我打算运行的代码已注册为在 OnLoad 运行。
-
您会发现整个 CRM 中普遍存在这种情况。尝试在任何实体中运行您的代码,您会发现类似的行为。但是,如果您在代码中设置断点并进行调试,您应该会在中断模式下在控制台中看到正确的行为。在中断模式下,哪一行特别中断?
-
我采纳了您的建议并发现了两件事:(1)我关注的是错误的线路(调试帮助我看到这是一条失败的线路,而不是我最初认为的线路) 和 (2) 我使用了错误的实体名称。我使用的是“订单”而不是“销售订单”。
-
Xrm.Page 对象存在于框架的上下文中。如果您想在 IE 开发工具中使用控制台而不需要中断调试模式,您首先必须指向页面上的框架。示例:frames[0].Xrm.Page.getAttribute('ati_clin').getValue()
标签: javascript dynamics-crm dynamics-crm-2011 dynamics-crm-online