You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Dynamics Portals:如何修改查找下拉框的文本值?

实现查找字段下拉框自定义显示文本的简便方法

方法一:使用计算字段(无代码方案)

这是最简便的非开发方案,适合不需要动态逻辑的场景:

  1. 打开被引用表的设计界面(比如你引用的是「客户」表,就去客户表的表设计),新建一个单行文本类型的计算字段。
  2. 根据目标字段类型配置计算规则:
    • 若目标字段是普通文本/数字等:
      PrimaryName & " - " & AnotherField
      
      (PrimaryName替换为实际主名称字段名,AnotherField替换为目标字段名)
    • 若目标字段是选项集:
      PrimaryName & " - " & TEXT(AnotherOptionSet)
      
      (TEXT()函数会自动把选项集的数值转换成对应的显示文本)
  3. 保存并发布该计算字段。
  4. 回到引用字段所在的表单编辑界面,打开查找字段的属性面板:
    • 切换到「显示」选项卡,在「查找字段」区域,将默认的主名称字段替换为刚创建的计算字段;
    • 若只是临时需求,也可在被引用表的「主属性」设置中,临时将该计算字段设为主属性(不推荐长期使用)。
  5. 保存发布表单,此时下拉框就会显示{主名称} - {目标字段值/选项文本}的格式。

方法二:使用JavaScript自定义渲染(灵活方案)

适合需要动态调整显示规则,或不想修改被引用表结构的场景:

  1. 在表单的「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);
            }
        );
    }
    
  2. 将脚本发布到环境,并在表单事件中绑定该函数,确保启用「传递执行上下文」。

方案对比

  • 计算字段:操作简单、无需开发、性能稳定,但只能实现静态规则,修改规则需要调整表结构。
  • JavaScript:灵活支持动态逻辑、无需修改表结构,但需要开发能力,且需考虑API调用的性能损耗。

内容的提问来源于stack exchange,提问作者suttonb1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:47:35