Dynamics 365 v9.0 查找字段展示重复记录的实现方案咨询
Dynamics 365 9.0 重复记录筛选联动实现方案
是否需要使用自定义工作流
不需要。该需求属于表单前端实时交互场景,自定义工作流多用于后端数据逻辑的异步/同步处理,无法直接实现表单控件的实时联动效果。
具体实现步骤
1. 前置字段准备
- 确认目标实体已创建两个自定义字段:
- 单行文本类型的输入字段,用于用户输入Name值,逻辑名可设为
new_inputname - 查找类型的选择字段,查找目标为当前实体本身,用于展示匹配的重复记录,逻辑名可设为
new_duplicate_lookup
- 单行文本类型的输入字段,用于用户输入Name值,逻辑名可设为
2. 开发前端Web资源
新建JavaScript类型的Web资源,核心实现逻辑如下:
- 为输入字段绑定
onChange触发事件 - 事件触发后先获取用户输入的Name值,做非空校验
- 校验通过后为查找字段绑定
addPreSearch钩子,注入自定义过滤规则,仅保留name字段等于输入值的记录 - 输入为空时清空查找字段的过滤规则与已选值
核心代码示例:
function onNameInputChange(executionContext) { const formContext = executionContext.getFormContext(); const inputVal = formContext.getAttribute("new_inputname").getValue()?.trim(); const lookupControl = formContext.getControl("new_duplicate_lookup"); const targetEntityName = "你的目标实体逻辑名"; // 先移除之前绑定的过滤规则,避免重复绑定 lookupControl.removePreSearch(duplicateFilter); if (!inputVal) { formContext.getAttribute("new_duplicate_lookup").setValue(null); return; } // 绑定自定义过滤规则 lookupControl.addPreSearch(function duplicateFilter() { const filterXml = `<filter type="and"> <condition attribute="name" operator="eq" value="${inputVal}" /> </filter>`; lookupControl.addCustomFilter(filterXml, targetEntityName); }); }
3. 表单配置
- 打开目标实体的主表单编辑器,将上述两个字段添加到表单的可见区域
- 选中输入字段,切换到事件配置tab,上传刚才开发的JavaScript Web资源,为
onChange事件绑定onNameInputChange函数,勾选「传递执行上下文作为第一个参数」 - 保存表单,发布所有自定义项(Web资源、实体字段、表单)
4. 功能验证
- 打开目标实体的新建/编辑页面,在输入框中输入已存在的记录Name值,点击查找字段,下拉列表仅会展示所有同名的重复记录,可直接选择目标记录
- 清空输入框内容后,查找字段恢复默认的全量可选范围
内容的提问来源于stack exchange,提问作者Ruruboy
相关产品推荐
相关产品推荐

