Триггер для потенциальных клиентов Salesforce CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

Я хочу клонировать запись Profile__c. Лид имеет связанный с ним profile__c. Когда происходит конвертация, Profile_c лида копируется в созданную учетную запись. Мне нужно сделать глубокий клон Profile__c в новой учетной записи, созданной после преобразования. Я могу скопировать profile_c, но клонирование вызывает эту ошибку:

Ошибка: System.DmlException: не удалось выполнить обновление. Первое исключение в строке 0 с идентификатором 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. Лид имеет связанный с ним profile__c, как и Account. Когда происходит конвертация, Profile_c лида копируется в созданную учетную запись. Что мне нужно сделать, так это клонировать все поля в Profile__c учетной записи после преобразования. - person Thomas Riddler; 12.05.2014
comment
Это возможно. Вы можете получить запись Profile__c после преобразования лида с помощью триггера, а затем скопировать все ее поля в учетную запись и обновить эту учетную запись. - person Promila; 13.05.2014
comment
Я не копирую поля в аккаунт. Я просто связываю profile__c в лиде с учетной записью после преобразования. Другими словами, profile__c является связанным списком как для объекта лида, так и для объекта учетной записи. После преобразования я хочу продублировать профиль__c, уже связанный с лидом, и связать их с учетной записью. - person Thomas Riddler; 13.05.2014

После преобразования интереса мы не можем выполнять какие-либо операции с лидом. Все, что вы делаете, чтобы обновить преобразованный интерес, приведет к ошибке.

person user3627595    schedule 12.05.2014

Что в конечном итоге помогло мне, так это после преобразования я взял convertAccountIds. Поскольку я уже копировал Profile__c в учетную запись после преобразования, я просто клонировал профиль туда и мне пришлось установить для этого профиля значение null, поскольку его нельзя обновить.

person Thomas Riddler    schedule 13.05.2014