帐户不应该有重复的联系人

Account Should not have a duplicate contact

祝你一切顺利!!!

谁能帮我实现这个逻辑。

逻辑是关于帐户不应该有重复的联系人(我使用了联系人的姓氏)。

代码如下

public static void duplicateLogicForAccContact(List<Contact> conList){
    Map<Id,String> accContactMap = new Map<Id,String>();
    for(Contact con:conList ){
        accContactMap.put(con.AccountId,con.LastName);
    }
    List<contact> contactAccountList = [SELECT Id,LastName,AccountId FROM Contact WHERE AccountId IN : accContactMap.keySet()];
    for(contact cons: contactAccountList){
        if(accContactMap.containsKey(cons.AccountId)){
            cons.LastName.addError('The Second Name you have entered is showing as duplicate in our DataBase');
        }
    }
}

错误显示为错误:“无效数据。 查看下面的所有错误消息以更正您的数据。 Apex 触发器 Trigger_Example 导致意外异常,请联系您的管理员:Trigger_Example:执行 BeforeInsert 导致:System.FinalException:SObject 行不允许错误

请指导我。

提前致谢,

问题是您正在尝试向已保存的记录添加错误假设第一个联系人是 john doe,因此已保存

然后当你第二次去时你试图保存同名的联系人 jhon doe 然后你正在查询所有联系人并向所有联系人添加错误所以你将它添加到第一个 john doe,我做了对以下代码进行一些更改

enter code here
public static void duplicateLogicForAccContact(List<Contact> conList){
Map<Id,String> contactMap = new Map<String,Contact>();   
Map<Id,String> accContactMap = new Map<Id,String>();
for(Contact con:conList ){
    accContactMap.put(con.AccountId,con.LastName);
    contactMap.put(con.LastName,con);
}
List<contact> contactAccountList = [SELECT Id,LastName,AccountId FROM Contact 
WHERE AccountId IN : accContactMap.keySet()];
for(contact cons: contactAccountList){
    if(accContactMap.containsKey(cons.AccountId)){
        contactMap.get(cons.LastName).LastName.addError('The Second Name you 
have entered is showing as duplicate in our DataBase');
    }
}

}