Dynamics 365 v9:如何在HTML Web资源中使用executionContext.getFormContext()?
在HTML Web资源中使用executionContext.getFormContext()的正确姿势
我来帮你搞定这个问题!在Model-Driven Apps(原Dynamics 365)里,parent.Xrm.Page确实已经被官方弃用,改用executionContext.getFormContext()才是符合当前最佳实践的方式。下面我一步步给你拆解正确的实现方法:
1. 表单中配置Web资源时开启上下文传递
当你把HTML Web资源添加到表单上时,一定要记得在Web资源属性里勾选「传递上下文信息」(英文环境是「Pass execution context as first parameter」)。这个开关是核心——它会让系统自动把executionContext对象作为参数传递给Web资源的加载函数。
2. 在HTML脚本中接收并使用executionContext
接下来在你的HTML文件里,通过加载函数接收这个上下文参数,再调用getFormContext()获取表单上下文对象。直接看示例代码更清楚:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>My Custom Web Resource</title> <script type="text/javascript"> // 定义加载函数,接收executionContext参数 function initWebResource(executionContext) { // 获取formContext,这就是替代parent.Xrm.Page的核心对象 var formContext = executionContext.getFormContext(); // 示例1:读取字段值 var accountName = formContext.getAttribute("name").getValue(); console.log("当前账户名称:", accountName); // 示例2:设置字段值 formContext.getAttribute("telephone1").setValue("138-0000-0000"); // 示例3:注册字段变更事件 formContext.getAttribute("name").addOnChange(function() { var updatedName = formContext.getAttribute("name").getValue(); alert("账户名称已更新为:" + updatedName); }); // 示例4:控制字段可见性 formContext.getControl("fax").setVisible(false); } </script> </head> <!-- 在body的onload事件中传递arguments[0],这就是系统传来的executionContext --> <body onload="initWebResource(arguments[0])"> <h4>我的自定义Web资源</h4> <!-- 这里可以放你的HTML内容,比如按钮、表格等 --> </body> </html>
关键注意事项
- 别漏了勾选「传递上下文信息」:如果没开这个选项,
executionContext会是undefined,调用getFormContext()肯定会报错。 - 避免直接用
parent.Xrm.Page:它不仅会被逐步移除,而且在复杂场景(比如子网格、多表单嵌套)下容易出现上下文混乱的问题,formContext是更可靠的选择。 - 如果用外部JS文件:把
initWebResource函数放在外部JS里,在HTML中通过<script src="your-external-script.js"></script>引用,用法和上面完全一致,同样接收executionContext参数即可。
内容的提问来源于stack exchange,提问作者Decio Figueira
相关产品推荐
相关产品推荐

