Salesforce Lead Trigger CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

Искам да клонирам записа Profile__c. Потенциалният клиент има профил__c, свързан с него. Когато се случи преобразуване, Profile_c на потенциалния клиент се копира в създадения акаунт. Това, което трябва да направя, е дълбоко клониране на Profile__c в новия акаунт, създаден след преобразуването. Мога да копирам profile_c, но клонирането извежда тази грешка:

Грешка: System.DmlException: Неуспешна актуализация. Първо изключение на ред 0 с id 00QJ0000007dDmHMAU; първа грешка: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, профил: изпълнение на AfterUpdate, причинено от: System.DmlException: Вмъкването е неуспешно. Първо изключение на ред 0; първа грешка: CANNOT_UPDATE_CONVERTED_LEAD, не може да се препрати преобразуван потенциален клиент: [] Trigger.profile:, колона 1: [] (системен код)

trigger profile on Lead (after update) {

Map<Id, Lead> cl = new Map<Id,Lead>();
Lead parent;
List<Contact> clist = new List<Contact>();
Set<Id> convertedids = new Set<Id>();

//list of converted leads
for (Lead t:Trigger.new){
    Lead ol = Trigger.oldMap.get(t.ID);
    if(t.IsConverted == true && ol.isConverted == false)
    {
        cl.put(t.Id, t);
        convertedids.add(t.ConvertedContactId);
    }
}
 Set<Id> leadIds = cl.keySet();  

  List<Profile__c> mp = [select Id, lock__c, RecordTypeId, reason__c, End_Date__c,startus__c , Opportunity__c, Account__c, Lead__c from Profile__c where Lead__c in :leadIds];
  List<ID>AccountIDs = new List<ID>();
  List<Profile__c>clonedList = new list<Profile__c>();
  for (Profile__c mpi:mp){
    parent = cl.get(mpi.Lead__c );
    mpi.opportunity__c = parent.ConvertedOpportunityId;
    mpi.account__c = parent.ConvertedAccountId;
    AccountIDs.add(parent.ConvertedAccountId);
    Profile__c profile = mpi.clone(false,true,false,false);
    clonedList.add(profile);
    mpi.lock__c= true;
    mpi.reason__c= 'Converted';
  }
 update mp;
 insert clonelist
}

person Thomas Riddler    schedule 12.05.2014    source източник


Отговори (3)


Извършвате операция за вмъкване (вмъкване на списък за клонирани), в която осъществявате достъп до стойността на преобразувания идентификатор на потенциален клиент в поле. Не можете да използвате преобразувано поле LeadId в DML операции. По-долу е примерният код, който ще работи -

trigger ConvertedLead_Trigger on Lead (after update) {
Map<Id, Lead> cl = new Map<Id,Lead>();
Lead parent;
List<Contact> clist = new List<Contact>();
Set<Id> convertedids = new Set<Id>();

//list of converted leads
for (Lead t:Trigger.new){
    Lead ol = Trigger.oldMap.get(t.ID);
    if(t.IsConverted == true && ol.isConverted == false)
    {
        cl.put(t.Id, t);
        convertedids.add(t.ConvertedContactId);
    }
}
 Set<Id> leadIds = cl.keySet();
     List<ConvertLeadTest__c> mp =[Select Id,Name,Lead__c, Account__c,Opportunity__c from ConvertLeadTest__c where Lead__c in :leadIds];
    List<ConvertLeadTest__c> mp1=new List<ConvertLeadTest__c>();
    List<ConvertLeadTest__c> mp2=new List<ConvertLeadTest__c>();
    for(ConvertLeadTest__c cc:mp)
    {
        if(cl.containsKey(cc.Lead__c))
        {

          cc.Account__c=cl.get(cc.Lead__c).ConvertedAccountId;
          cc.Opportunity__c=cl.get(cc.Lead__c).ConvertedOpportunityId;
            mp1.add(cc);
            mp2.add(new ConvertLeadTest__c(Account__c=cl.get(cc.Lead__c).ConvertedAccountId,Opportunity__c=cl.get(cc.Lead__c).ConvertedOpportunityId));
        }
    }

    update mp;
    insert mp2;
}

Но ако напишете ConvertLeadTest__c(Lead__c=cc.Lead__c,Account__c=cl.get(cc.Lead__c).ConvertedAccountId,Opportunity__c=cl.get(cc.Lead__c).ConvertedOpportunityId)); тогава ще изведе грешка.

Надявам се това да ви помогне.

Благодаря :)

person Promila    schedule 12.05.2014
comment
Проблемът тук е, че искам да клонирам записа Profile__c. Възможният клиент има профил__c, свързан с него, както и акаунт. Когато се случи преобразуване, Profile_c на потенциалния клиент се копира в създадения акаунт. Това, което трябва да направя, е да клонирам всички полета на Profile__c в акаунта след преобразуването. - person Thomas Riddler; 12.05.2014
comment
Възможно е. Можете да извлечете запис на Profile__c след преобразуване на потенциален клиент с помощта на тригер и след това да копирате цялото му поле в акаунта и да актуализирате този акаунт. - person Promila; 13.05.2014
comment
Не копирам полетата в акаунта. Аз просто свързвам профила__c на потенциален клиент с акаунта след преобразуването. С други думи, profile__c е свързан списък както на потенциален клиент, така и на акаунт обекти. След преобразуването искам да дублирам profile__c, който вече е свързан с потенциалния клиент, и да свържа и двата с акаунта. - person Thomas Riddler; 13.05.2014

Не можем да извършим никаква операция върху потенциалния клиент, след като той бъде преобразуван. Всичко, което направите, за да опитате да актуализирате конвертирания потенциален клиент, ще ви даде грешка.

person user3627595    schedule 12.05.2014

Това, което в крайна сметка го направи за мен, беше след преобразуването, че хванах преобразуванитеAccountIds. Тъй като вече копирах Profile__c в акаунта след преобразуването, току-що клонирах профила там и трябваше да настроя потенциалния клиент на този профил на нула, тъй като не може да се актуализира

person Thomas Riddler    schedule 13.05.2014