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

Dynamics CRM 2016客户端动态填充查找字段问题咨询

Dynamics CRM 2016客户端复制记录:查找字段处理方案

针对你遇到的复制记录时普通字段正常但查找字段无法填充的问题,我来逐个解答你的疑问:

问题1:type值能否用于填充实体类型字段?具体如何实现?

你拿到的type值其实是CRM里的ObjectTypeCode(对象类型代码),每个系统实体(比如Account、Contact)和自定义实体都对应唯一的这个代码,完全可以用它来获取实体的逻辑名称,进而填充查找字段。

实现步骤:

  1. 通过ObjectTypeCode查询实体逻辑名称
    用CRM客户端的Xrm.WebApi查询entitymetadata实体(存储所有元数据的核心实体),过滤条件匹配你拿到的type值即可。示例代码如下:

    function getEntityNameByTypeCode(typeCode) {
        return Xrm.WebApi.retrieveMultipleRecords(
            "entitymetadata",
            "?$select=logicalname&$filter=objecttypecode eq " + typeCode
        ).then(
            function success(result) {
                return result.entities.length > 0 ? result.entities[0].logicalname : null;
            },
            function error(err) {
                console.error("查询实体元数据失败:", err.message);
                return null;
            }
        );
    }
    
  2. 构造查找字段值并填充
    拿到实体逻辑名称后,按照CRM要求的格式构造查找字段对象(必须包含id、name、entityType三个属性),再设置到目标字段上。示例:

    // 假设这是你获取到的待复制属性数据
    var sourceLookupData = {
        name: "this is the name",
        type: "10026",
        Value: "{6BddfDC-8B10-47F4-BC49-A537d2E43E}"
    };
    
    // 调用函数获取实体名称,填充目标查找字段
    getEntityNameByTypeCode(sourceLookupData.type).then(function(entityName) {
        if (entityName) {
            var targetLookupValue = [
                {
                    id: sourceLookupData.Value.replace(/[{}]/g, ""), // 移除GUID的大括号
                    name: sourceLookupData.name,
                    entityType: entityName
                }
            ];
            // 替换成你的目标查找字段逻辑名
            Xrm.Page.getAttribute("new_targetlookupfield").setValue(targetLookupValue);
        }
    });
    

问题2:是否可直接将原字段的name属性值填充到新字段中?

完全可以!这个name就是原查找字段显示的关联记录主名称(比如Account的公司名、Contact的全名),直接用它作为新查找字段的name属性即可。不过要注意两个关键点:

  • 单独设置name没用,必须同时搭配正确的id和entityType,否则查找字段只是显示文本,不会真正关联到对应的记录。
  • 只要你获取到的name是原查找字段的正确显示值,直接复用就没问题,不需要额外处理。

通用代码封装建议

如果要让代码更通用,可以封装一个处理查找字段复制的函数,适配任意查找字段:

function copyLookupField(sourceAttrData, targetFieldLogicalName) {
    getEntityNameByTypeCode(sourceAttrData.type).then(function(entityName) {
        if (entityName && sourceAttrData.Value) {
            var lookupValue = [
                {
                    id: sourceAttrData.Value.replace(/[{}]/g, ""),
                    name: sourceAttrData.name,
                    entityType: entityName
                }
            ];
            Xrm.Page.getAttribute(targetFieldLogicalName).setValue(lookupValue);
        }
    });
}

// 使用示例:copyLookupField(sourceLookupData, "new_targetlookupfield");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:02