如何通过Apex Data Loader自动更新导入数据表中的person_id空值列
解决Apex Data Loader导入后自动更新person_id为空记录的方案
方法1:用Apex触发器自动触发(最省心的自动方案)
直接写一个after insert触发器,在新记录插入后自动检查并更新person_id:
- 触发器会收集所有导入后person_id为空且员工编号不为空的记录,通过员工编号关联查询对应的Person记录获取ID,然后批量更新。
- 示例代码:
trigger UpdatePersonId on Employee__c (after insert) { Set<String> empNumbers = new Set<String>(); // 筛选出需要处理的记录 for(Employee__c emp : Trigger.new) { if(emp.person_id__c == null && emp.Employee_Number__c != null) { empNumbers.add(emp.Employee_Number__c); } } // 批量查询匹配的Person记录 Map<String, Person__c> empNumMap = new Map<String, Person__c>(); for(Person__c p : [SELECT Id, Employee_Number__c FROM Person__c WHERE Employee_Number__c IN :empNumbers]) { empNumMap.put(p.Employee_Number__c, p); } // 准备更新数据 List<Employee__c> updateList = new List<Employee__c>(); for(Employee__c emp : Trigger.new) { if(emp.person_id__c == null && empNumMap.containsKey(emp.Employee_Number__c)) { updateList.add(new Employee__c( Id = emp.Id, person_id__c = empNumMap.get(emp.Employee_Number__c).Id )); } } if(!updateList.isEmpty()) { update updateList; } }
- 注意:要保证员工编号在Person对象里是唯一的,避免匹配错误;同时要考虑Salesforce的 governor limit,触发器要支持批量操作。
方法2:导入后手动跑批量更新(无代码,适合临时需求)
如果不想写代码,分四步操作:
- 先用你的原始CSV完成数据导入。
- 用Data Loader导出目标表中person_id为空的记录,导出字段必须包含「员工编号」和「记录ID」。
- 用Excel的VLOOKUP函数或者Salesforce报表,通过员工编号匹配到对应的person_id,填充到导出的文件里。
- 用Data Loader的「Update」模式,导入填充后的文件,完成person_id的更新。
方法3:用流程构建器/流实现无代码自动更新
适合非开发人员,可视化配置:
- 创建一个记录触发流,触发条件设为「当目标对象记录被创建,且person_id为空」。
- 流里加一个「查找记录」元素,通过员工编号匹配对应的Person记录。
- 再加一个「更新记录」元素,把找到的Person ID填充到当前记录的person_id字段里。
- 保存激活后,后续导入的记录会自动触发更新。
内容的提问来源于stack exchange,提问作者Eyei
相关产品推荐
相关产品推荐

