咨询:在Dynamics CRM Lead中嵌入自定义HTML及获取上下文字段的技术方向
核心关注技术领域及实践要点
作为经常搞Dynamics/Dataverse定制的开发者,你要实现的这个需求(在Lead子版块嵌入XHR驱动的自定义HTML+获取UI上下文),主要得盯着下面这几个技术方向,我给你拆解清楚:
1. Power Apps Component Framework (PCF) —— 首选的现代嵌入方案
这是目前微软推荐的自定义UI嵌入方式,比传统Web Resource灵活太多,完全适配Dataverse的表单体系:
- 可以直接把你的自定义组件嵌入到Lead表单的**子版块(Tab/Section)**里,作为表单的一部分,而非生硬的iframe
- 自带上下文获取能力:通过
context对象能直接拿到当前Lead记录的字段值、ID、用户信息,甚至可以绑定特定字段,实时监听值的变化(比如当Lead的公司名称改变时,你的自定义HTML自动更新) - 数据请求不用自己写原生XHR:用
context.webAPI就能直接调用Dataverse的接口,自动处理认证和跨域,比自己封装XHR靠谱多了 - 支持用React/Vue这类框架构建HTML内容,样式可以用Fluent UI(微软官方组件库),和Dynamics原生UI风格统一,不会显得突兀
2. Web Resources —— 轻量化的传统嵌入方式
如果不想折腾PCF的打包部署,Web Resources(HTML/JS/CSS文件)是更轻量的选择:
- 把你的HTML页面上传为Web Resource,然后在Lead表单里添加一个iframe控件指向它
- 获取上下文要靠
getGlobalContext()和formContext:比如用formContext.data.entity.getId()拿到当前Lead的ID,用formContext.getAttribute("companyname").getValue()获取具体字段值;要是监听字段变化,就用formContext.getAttribute("companyname").addOnChange(yourUpdateFunction) - 数据请求可以用
Xrm.WebApi(官方封装的API),也可以自己写XHR,但要注意用Dataverse的REST端点,而且因为Web Resource在Dynamics域内,不用处理跨域问题
3. Dataverse Web API —— 数据交互的核心
不管用PCF还是Web Resource,你都得和Dataverse的数据打交道,这个API是核心:
- 支持OData查询和FetchXML两种方式,比如要获取当前Lead关联的联系人,用FetchXML写查询或者OData的
$expand参数都能实现 - 要是用XHR的话,记得请求头里要带
Authorization(可以通过getGlobalContext().getAuthenticationHeader()获取)和Accept: application/json,不过更推荐用官方封装的Xrm.WebApi或者PCF的context.webAPI,省得自己处理这些细节 - 可以调用自定义API或者原生实体的CRUD操作,满足你填充HTML的数据需求
4. 上下文同步与表单事件监听
要让你的自定义HTML和Dynamics UI联动,必须处理好上下文的同步:
- 在PCF里,通过字段绑定可以让组件自动感知字段变化,不用手动写监听;比如把组件的属性绑定到Lead的
statuscode,字段值变了组件自动更新 - 在Web Resource里,要在iframe加载完成后初始化上下文,还要监听表单的
onLoad、字段的onChange事件,确保自定义HTML能拿到最新的UI数据 - 注意避免内存泄漏:比如移除事件监听器,尤其是在表单卸载的时候
5. UI样式适配与用户体验
既然是嵌入到Dynamics的UI里,样式不能太违和:
- 用Dynamics原生的Fluent UI组件或者CSS类,比如
ms-TextField、ms-Button,让你的自定义HTML和原生表单风格统一 - 处理响应式:Dynamics表单会适配不同屏幕尺寸,你的自定义HTML也要做响应式布局,避免在手机端显示错乱
- 加载状态:XHR请求数据的时候要显示加载动画,别让用户以为页面卡住了
内容的提问来源于stack exchange,提问作者App2015
相关产品推荐
相关产品推荐

