MS Dynamics Portals:如何修改查找下拉框的文本值?
实现查找字段下拉框自定义显示文本的简便方法
方法一:使用计算字段(无代码方案)
这是最简便的非开发方案,适合不需要动态逻辑的场景:
- 打开被引用表的设计界面(比如你引用的是「客户」表,就去客户表的表设计),新建一个单行文本类型的计算字段。
- 根据目标字段类型配置计算规则:
- 若目标字段是普通文本/数字等:
(PrimaryName & " - " & AnotherFieldPrimaryName替换为实际主名称字段名,AnotherField替换为目标字段名) - 若目标字段是选项集:
(PrimaryName & " - " & TEXT(AnotherOptionSet)TEXT()函数会自动把选项集的数值转换成对应的显示文本)
- 若目标字段是普通文本/数字等:
- 保存并发布该计算字段。
- 回到引用字段所在的表单编辑界面,打开查找字段的属性面板:
- 切换到「显示」选项卡,在「查找字段」区域,将默认的主名称字段替换为刚创建的计算字段;
- 若只是临时需求,也可在被引用表的「主属性」设置中,临时将该计算字段设为主属性(不推荐长期使用)。
- 保存发布表单,此时下拉框就会显示
{主名称} - {目标字段值/选项文本}的格式。
方法二:使用JavaScript自定义渲染(灵活方案)
适合需要动态调整显示规则,或不想修改被引用表结构的场景:
- 在表单的「OnLoad」事件中添加自定义脚本,核心逻辑是修改查找字段的下拉选项文本:
function customizeLookupOptions(executionContext) { var formContext = executionContext.getFormContext(); var lookupControl = formContext.getControl("your_lookup_field_schema_name"); // 替换为查找字段的架构名 var relatedEntityName = "your_related_entity_schema_name"; // 替换为被引用表的架构名 var selectFields = "primaryname,another_field,another_optionset"; // 替换为需要获取的字段(主名称+目标字段) // 获取当前下拉选项 var options = lookupControl.getOptions(); var updatedOptions = []; var recordIds = options.map(opt => opt.value.replace(/[{}]/g, "")).join(","); // 批量获取所有相关记录的字段值,减少API调用 Xrm.WebApi.retrieveMultipleRecords(relatedEntityName, `?$select=${selectFields}&$filter=incidentid in (${recordIds})`).then( function success(result) { var recordMap = {}; // 把查询结果转成ID映射的对象 result.entities.forEach(record => { recordMap[record.id.replace(/[{}]/g, "")] = record; }); // 遍历选项,更新文本 options.forEach(option => { var recordId = option.value.replace(/[{}]/g, ""); var targetRecord = recordMap[recordId]; if (targetRecord) { var primaryName = targetRecord.primaryname; var displayValue; // 判断目标字段类型 if (targetRecord.another_optionset) { // 获取选项集文本 displayValue = Xrm.Utility.getOptionSetText(formContext.getAttribute("another_optionset"), targetRecord.another_optionset); } else { displayValue = targetRecord.another_field; } option.text = `${primaryName} - ${displayValue}`; updatedOptions.push(option); } else { updatedOptions.push(option); } }); // 重新设置下拉选项 lookupControl.setOptions(updatedOptions); }, function error(error) { console.error("获取记录失败:", error.message); } ); } - 将脚本发布到环境,并在表单事件中绑定该函数,确保启用「传递执行上下文」。
方案对比
- 计算字段:操作简单、无需开发、性能稳定,但只能实现静态规则,修改规则需要调整表结构。
- JavaScript:灵活支持动态逻辑、无需修改表结构,但需要开发能力,且需考虑API调用的性能损耗。
内容的提问来源于stack exchange,提问作者suttonb1
相关产品推荐
相关产品推荐

