对象不支持属性或方法“getAttribute”

4

我正在使用 Dynamics CRM 2011 Online 并尝试重构一些代码,使其在报价>添加产品页面上工作的同时也能在订单> 添加产品页面上工作。问题在于当页面加载时,我会收到错误消息“无法获取未定义或空引用的‘getValue’属性。”

我进入了 IE 控制台(尝试了 IE 9 和 10),并输入了我认为是有问题的代码行:

Xrm.Page.getAttribute('ati_clin').getValue()

它报错显示“Object doesn't support property or method 'getAttribute'”。我也尝试过。
document.getElementById('ati_clin')

但是这也失败了。

这对我来说没有意义,因为我可以使用开发者控制台的HTML视图找到页面上的对象,它显然存在(也没有拼写错误)。即使其中一个页面在运行时正常运行,另一个页面也无法解释为什么此语句在两个页面的控制台中都失败了。它不应该至少在运行时正常工作的页面上起作用吗?

经过一些研究,我认为以下帖子最相关,但我担心它不能为我提供答案,因为我对此还很陌生:Xrm.Page.data为空

我的问题是,如果元素明显存在,为什么控制台会返回此错误?


那么这是发生在OrderDetail表单的OnLoad事件注册的代码中? - Peter Majeed
我正在运行的代码是在整个页面加载完成后从控制台执行的。我打算运行的代码已经注册在OnLoad上运行。 - Chris76786777
1
你会发现这通常是在CRM中普遍存在的情况。尝试在任何实体中运行代码,你会发现类似的行为。然而,如果你在代码中设置断点并进行调试,在断点模式下应该能够看到正确的行为。在断点模式下,哪一行特别容易出错? - Peter Majeed
我采纳了您的建议并发现了两件事:(1)我关注的是错误的行(调试帮助我看到失败的是一行更远的代码,而不是我最初认为的那一行),(2)我使用了错误的实体名称。我使用的是“order”而不是“salesorder”。 - Chris76786777
3
Xrm.Page 对象存在于框架的上下文中。如果您想在IE开发工具中使用控制台而不必进入调试模式,则首先必须指向页面上的框架。例如:frames [0] .Xrm.Page.getAttribute('ati_clin').getValue()。 - Svendberg
显示剩余2条评论
1个回答

3

在调试此类问题时,以下技巧可能会有所帮助:

Xrm.Page对象存在于框架的上下文中。如果您想要在IE开发人员工具中使用console而不必进入调试模式,您首先需要指向页面上的框架。

例如:

frames[0].Xrm.Page.getAttribute('ati_clin').getValue()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接