Dynamics表单lookup字段选值变更时联动更新字段及jscript库咨询
Dynamics 365 Lookup变更联动赋值实现方案
完全不需要找重型第三方通用库,自己写一段几十行的轻量工具函数存到解决方案的Web资源里,就能覆盖所有这类简单字段联动需求,比表单设计器拖低代码流程效率高得多,后续同类需求直接传参调用就行,不用重复写逻辑。
可直接复用的通用工具代码
把下面这段代码存为JS文件,作为JScript类型Web资源上传到你的解决方案,所有实体的Lookup联动场景都能复用:
const D365FormUtils = { /** * Lookup值变更时,自动拉取关联记录指定字段值填充到当前表单字段 * @param {object} executionContext 表单执行上下文,事件绑定时必须勾选传入执行上下文 * @param {string} lookupField 当前表单Lookup字段的逻辑名 * @param {string} sourceField 关联实体上待取值的字段逻辑名 * @param {string} targetField 当前表单待赋值的字段逻辑名 */ syncLookupRelatedField: async function(executionContext, lookupField, sourceField, targetField) { const formCtx = executionContext.getFormContext(); const lookupVal = formCtx.getAttribute(lookupField).getValue(); // Lookup被清空时同步清空目标字段 if (!lookupVal?.length) { formCtx.getAttribute(targetField).setValue(null); return; } const { id, entityType } = lookupVal[0]; const cleanId = id.replace(/[{}]/g, ''); try { const relatedRecord = await Xrm.WebApi.retrieveRecord(entityType, cleanId, `?$select=${sourceField}`); formCtx.getAttribute(targetField).setValue(relatedRecord[sourceField]); } catch (e) { console.error('关联字段填充失败:', e.message); Xrm.Navigation.openErrorDialog({ message: '关联信息自动填充失败,请手动录入' }); } } }
你当前需求的配置步骤
- 把上面的JS文件上传为Web资源后,添加到对应实体主表单的表单库列表中,发布
- 找到表单上的关联Lookup控件,为其添加OnChange事件:
- 库选择刚才上传的工具JS
- 函数名填写
D365FormUtils.syncLookupRelatedField - 必须勾选「将执行上下文作为第一个参数传递」
- 额外参数按顺序填三个字符串,用逗号分隔:
- 第一个参数:当前Lookup字段的逻辑名(比如
new_relatedid) - 第二个参数:关联实体name字段的逻辑名(系统实体通常是
name,自定义实体一般是new_name) - 第三个参数:当前实体待赋值的name字段逻辑名
- 第一个参数:当前Lookup字段的逻辑名(比如
- 保存发布表单即可生效,选中/切换Lookup值时会自动拉取关联记录的name填充到当前记录name字段,清空Lookup时目标字段也会同步清空。
扩展用法
这个工具函数不局限于同步name字段,只要是Lookup关联实体上的单行文本、数字、日期这类基础类型字段,都可以通过传对应字段逻辑名直接实现联动赋值,不需要修改工具代码。如果有多个Lookup需要做同类联动,只需要给对应Lookup重复绑定OnChange事件、传入对应字段参数即可,一次上传全环境所有实体通用。
注意:如果要同步的关联字段是选项集、Lookup这类特殊类型,只需要在拉取数据后加一行类型转换逻辑即可,基础框架不需要调整。
内容的提问来源于stack exchange,提问作者suttonb1
相关产品推荐
相关产品推荐

