触发重复CSV

时间:2013-05-12 05:40:29

标签: salesforce apex-code force.com

我正在尝试使用导入向导上传CSV文件/插入大量记录。总之,我想保留最新记录,以防万一找到重复记录。重复记录是名字,姓氏和标题的组合

例如,如果我的CSV文件如下所示:

James,Wistler,34岁,纽约,已婚 詹姆斯,Wistler,34,伦敦,已婚
....
....

James,Wistler,34岁,纽约,离婚

这应该只保留在我的组织中: James,Wistler,34岁,纽约,离婚

我一直在尝试在更新/插入之前编写一个触发器,但到目前为止没有成功这是我的触发器代码:(代码尚未完成(仅使用Firstname进行文件保存),我在删除找到的副本时出现问题我的CSV)任何提示。谢谢你的阅读!

trigger CheckDuplicateInsert on Customer__c(before insert,before update){

Map <String, Customer__c> customerFirstName = new Map<String,Customer__c>();
list <Customer__c> CustomerList = Trigger.new;

for (Customer__c newCustomer : CustomerList)
{
    if ((newCustomer.First_Name__c != null) && System.Trigger.isInsert )
    {
        if (customerFirstName.containsKey(newCustomer.First_Name__c) )
        //remove the duplicate from the map
        customerFirstName.remove(newCustomer.First_Name__c);
        //end of the if clause
    // add this stage we dont have any duplicate, so lets add a new customer
    customerFirstName.put(newCustomer.First_Name__c , newCustomer);
    }  
    else if ((System.Trigger.oldMap.get(newCustomer.id)!= null)&&newCustomer.First_Name__c !=System.Trigger.oldMap.get(newCustomer.id).First_Name__c )
    {//field is being updated, lets mark it with UPDATED for tracking
    newCustomer.First_Name__c=newCustomer.First_Name__c+'UPDATED';
    customerFirstName.put(newCustomer.First_Name__c , newCustomer);
    }

 }


for (Customer__c customer : [SELECT First_Name__c FROM Customer__c WHERE First_Name__c IN  :customerFirstName.KeySet()])
{
    if (customer.First_Name__c!=null)
    {
        Customer__c newCustomer=customerFirstName.get(customer.First_Name__c);
        newCustomer.First_Name__c=Customer.First_Name__c+'EXIST_DB';
    }
}
}   

1 个答案:

答案 0 :(得分:0)

纯粹的非SF解决方案是对它们进行排序&amp;例如,在Excel中进行重复数据删除;)


好消息 - 你不需要触发器。坏消息 - 您可能不得不放弃导入向导并开始使用Data Loader。解决方案很长,看起来很可怕但是一旦掌握了它,它应该开始变得更有意义,并且在将来比编写代码更容易维护。

您可以在制作组织的设置区域下载数据加载器,这里有一些basic info about the tool

反正。

  1. 我会在您的联系人上创建一个新文本字段,将其称为“唯一密钥”或其他内容,并将其标记为外部标识。如果你从未使用过ext。 ids - Jeff Douglas有a good post about them
  2. 您可能需要在继续之前填充现有数据上的字段。最简单的方法是将所有联系人导出为空白(例如,从报告中),填写一些Excel公式并导回。
  3. 如果需要,您甚至可以编写工作流规则来处理唯一键的生成。当Jane Doe夫人结婚并成为Jane Bloggs时,这可能会有所帮助,并且会使前一点变得更容易(您只需导入联系人而无需更改,只需“触摸”它们,工作流程就会触发)。就像是
    • 条件:ISBLANK(Unique_key__c) || ISCHANGED(FirstName) || ISCHANGED(LastName) || ISCHANGED(Title)
    • 新值:Title + FirstName + ' ' + LastName
  4. 几乎就在那里。 Fire Data Loader并准备一个upsert作业(因为我们想插入一些记录,当发现重复时 - 改为替换它们。)
  5. 我唯一担心的是,当你的例子中发送到SF的1“批”记录中有效的同一行会出现多次时会发生什么。 Upsert不知道哪个值有效(就像设置x = 7;x = 5;一样保存到DB)并且将决定使这些行失败。因此,您可能需要在Data Loader的设置中调整批处理中的记录数量。