CRM CSV导入控制台应用未调用账户却提示ID=[id]的账户不存在如何解决
你虽然没有直接调用account实体,但报错大概率是自定义项目实体elca_Project的elca_Customer字段赋值错误导致的。该字段在CRM中是关联account实体的查找字段,你直接将CSV中读取的字符串赋值给该字段,CRM会将传入的内容误识别为account的GUID去查询,找不到对应记录就会抛出账户不存在的错误。
修复步骤
- 第一步:修正客户字段赋值
查找字段不支持直接赋值字符串,需要先根据CSV中存储的客户标识(名称/编号)去CRM查询对应的account记录ID,返回EntityReference类型再赋值。参考代码如下:
static EntityReference GetCustomerRef(CrmServiceClient crmSvc, string customerInfo) { var query = new QueryExpression("account") { ColumnSet = new ColumnSet(false), Criteria = new FilterExpression() }; // 匹配条件根据CSV中存的是客户名称还是客户编号调整属性名 query.Criteria.AddCondition("name", ConditionOperator.Equal, customerInfo); var accounts = crmSvc.RetrieveMultiple(query).Entities; if (accounts.Any()) { return accounts.First().ToEntityReference(); } // 可根据业务需求调整:不存在时抛错/自动创建新客户 throw new KeyNotFoundException($"未找到客户:{customerInfo}"); }
将原代码中newProject.elca_Customer = data.Customer.ToString();替换为:
newProject.elca_Customer = GetCustomerRef(crmSvc, data.Customer.ToString());
第二步:校验其他关联字段合法性
检查以下字段对应的取值方法返回值是否为真实存在的实体引用:new_ProjectGroup:确认QueryGroup方法返回的实体引用ID在对应实体中存在elca_Members:确认addMem方法返回的成员ID在系统用户/联系人实体中存在OwnerId:确认你调用接口使用的账号没有被禁用、权限正常
第三步:排查后台触发逻辑
如果上述修改后仍报错,检查elca_Project实体的创建/更新消息是否绑定了同步插件、工作流,这类后台自动触发的逻辑如果有操作account实体的代码,也可能触发该报错。第四步:添加调试日志
在调用Create/Update方法前,将所有关联字段的ID输出到日志,核对对应记录在CRM中是否真实存在,快速定位无效ID来源。
内容的提问来源于stack exchange,提问作者Mai Hương
相关产品推荐
相关产品推荐

