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

如何在Dynamics 365 CRM中通过C#代码填充Contact实体的Lookup字段

核心实现逻辑

Dynamics CRM 中Lookup类型字段只能通过EntityReference类型赋值,你需要先获取到要关联的City记录的主键GUID,再对应赋值即可。


第一步:补充获取目标City记录ID的逻辑

你传入的city参数如果是名称的话,需要先查询City实体拿到对应记录的GUID,示例代码:

// 传入的city名称参数,查询对应City记录的ID
static Guid GetCityIdByName(string cityName)
{
    ConditionExpression cityCond = new ConditionExpression("new_name", ConditionOperator.Equal, cityName);
    FilterExpression cityFilter = new FilterExpression();
    cityFilter.Conditions.Add(cityCond);
    QueryExpression cityQuery = new QueryExpression("new_city"); // 替换为你City实体的实际逻辑名
    cityQuery.ColumnSet = new ColumnSet("new_cityid"); // 替换为你City实体主键的实际逻辑名
    EntityCollection cityResult = crmService.RetrieveMultiple(cityQuery);
    if (cityResult.Entities.Count > 0)
    {
        return cityResult.Entities[0].Id;
    }
    throw new Exception("未找到对应的City记录");
}

第二步:修改原有FillContactLookupByLastname方法,完成Lookup赋值和更新

static void FillContactLookupByLastname(string lastname, string cityName) 
{
    // 先拿到要关联的City记录ID
    Guid cityId = GetCityIdByName(cityName);
    
    ConditionExpression condition1 = new ConditionExpression();
    condition1.AttributeName = "lastname";
    condition1.Operator = ConditionOperator.Equal;
    condition1.Values.Add(lastname);

    FilterExpression filter1 = new FilterExpression();
    filter1.Conditions.Add(condition1);

    QueryExpression query = new QueryExpression("contact");
    query.ColumnSet.AddColumns("firstname", "lastname");
    query.Criteria.AddFilter(filter1);

    EntityCollection result1 = crmService.RetrieveMultiple(query);
    Console.WriteLine(); Console.WriteLine("Query using Query Expression with ConditionExpression and FilterExpression");
    Console.WriteLine("---------------------------------------");
    foreach (var a in result1.Entities)
    {
        Console.WriteLine("Name: " + a.Attributes["firstname"] + " " + a.Attributes["lastname"]);
        // 给Lookup字段赋值,EntityReference参数分别为【City实体逻辑名】、【City记录ID】
        a["new_cityid"] = new EntityReference("new_city", cityId); // 替换为你Contact上City lookup字段的实际逻辑名、City实体逻辑名
        // 调用更新接口保存修改
        crmService.Update(a);
    }
}

如果你是要创建新的Contact记录,赋值逻辑完全一致,示例如下:

Entity newContact = new Entity("contact");
newContact["firstname"] = "张";
newContact["lastname"] = "三";
// 直接给City lookup赋值EntityReference即可
newContact["new_cityid"] = new EntityReference("new_city", cityId);
// 调用创建接口
Guid newContactId = crmService.Create(newContact);

注意事项

  • 所有标注要替换的实体逻辑名、字段逻辑名,必须和你Dynamics 365/CRM环境里的配置完全一致,否则会触发无效字段报错
  • 操作前请确认服务账号拥有Contact的创建/修改权限、City实体的读取权限
  • 如果查询City时可能存在重名,你可以自行调整查询逻辑过滤唯一值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:06:02