如何在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
相关产品推荐
相关产品推荐

