如何在Dynamics 365中用JavaScript获取字段值?Xrm.Page返回未定义
解决Dynamics 365中Xrm.Page返回undefined及获取字段值的问题
老兄,你碰到的这个问题其实有两个核心原因:一是Xrm.Page在Dynamics 365统一界面(UCI)里已经被微软弃用,二是你写错了调用方式——Xrm.Page()是带括号的函数调用,但它其实是个对象,不能这么用!下面给你一步步讲怎么解决:
一、当前正确的字段值获取方式(UCI界面)
现在微软推荐用FormContext来访问表单元素,不管是写表单脚本还是控制台测试,都得用它:
1. 在表单脚本中获取(正式开发场景)
如果你是在表单的事件(比如字段 onChange、表单 onLoad)里写代码,系统会自动把执行上下文传给你的函数,你只需要通过它拿到FormContext:
function getCityFieldValue(executionContext) { // 从执行上下文获取FormContext const formContext = executionContext.getFormContext(); // 获取字段值(这里的new_city是字段的逻辑名称,不是显示名!) const cityValue = formContext.getAttribute("new_city").getValue(); console.log("获取到的城市值:", cityValue); }
⚠️ 重要提醒:在设置脚本的时候,一定要勾选「传递执行上下文」的选项,不然executionContext会是undefined!
2. 在浏览器控制台直接测试
如果想在控制台快速验证,用这个方法获取FormContext:
// 先拿到全局上下文,再获取当前表单的FormContext const formContext = Xrm.Utility.getGlobalContext().getFormContext(); // 读取字段值 const cityValue = formContext.getAttribute("new_city").getValue(); console.log(cityValue);
二、旧版经典界面的兼容写法(几乎不用了)
如果你的环境还在使用非常老的经典界面,那Xrm.Page是可用的,但注意不要加括号!正确写法是:
const cityValue = Xrm.Page.getAttribute("new_city").getValue();
你之前写的Xrm.Page()是错误的,这也是导致返回undefined的直接原因之一。
三、额外排查要点
如果按上面的方法还是报错,检查这几点:
- 确认字段逻辑名称正确:
new_city必须是字段的逻辑名称(可以在解决方案的字段属性里查看),别用显示名称。 - 字段是否在当前表单上:如果字段没添加到表单布局里,
getAttribute()会返回null,自然调用不了getValue()。 - 表单状态:如果是只读表单,部分字段可能无法正常获取值(不过大部分场景还是可以的,优先排查前两点)。
内容的提问来源于stack exchange,提问作者user53301
相关产品推荐
相关产品推荐

