2014-05-12 5 views
1

Profile__c 레코드를 복제하려고합니다. 리드에는 프로필 __c이 (가) 연관되어 있습니다. 전환이 발생하면 리드의 Profile_c가 생성 된 계정에 복사됩니다. 필자가해야 할 일은 변환 후에 생성 된 새 계정에서 Profile__c의 깊은 복제입니다. profile_c를 복사 할 수 있지만 복제에서이 오류가 발생합니다.Salesforce Lead Trigger CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY

오류 : System.DmlException : 업데이트하지 못했습니다. ID가 00QJ0000007dDmHMAU 인 행 0에 대한 첫 번째 예외. 첫 번째 오류 : 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 
} 

답변

0

필드에서 변환 된 리드 ID 값에 액세스하는 삽입 작업 (클론 목록 삽입)을 수행하고 있습니다. 변환 된 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)); 그러면 오류가 발생합니다.

희망이 도움이 될 것입니다.

감사합니다 :)

+0

여기에서 문제는 Profile__c 레코드를 복제하려고합니다. . 리드에는 프로필 __c이 (가) 연결되어 있으므로 계정도 연결됩니다. 전환이 발생하면 리드의 Profile_c가 생성 된 계정에 복사됩니다. 내가해야 할 일은 전환 후 계정의 Profile__c에있는 모든 필드를 복제하는 것입니다. –

+0

가능합니다. 트리거를 사용하여 리드 변환 후 Profile__c 레코드를 가져온 다음 모든 필드를 계정에 복사하고 해당 계정을 업데이트 할 수 있습니다. – Promila

+0

필드를 필드에 복사하지 않습니다. 저는 프로필 __c을 리드에 계정을 변환 한 후 연결하는 것입니다. 즉, profile__c는 리드 및 계정 개체에 대한 관련 목록입니다. 전환 후 이미 리드와 연결된 프로필 __c을 복제하고 두 계정을 계정과 연결하려고합니다. –

0

우리는 리드가 변환되면 리드에 어떤 동작을 수행 할 수 없다. 변환 된 리드를 업데이트하려고하면 오류가 발생합니다.

0

은 무엇 결국 나를 위해 그것을 한 일은 변환 후, 나는 convertedAccountIds를 잡고 있었다. 변환 후 프로필 __c를 이미 계정에 복사 했으므로 프로필을 복제하고 업데이트 할 수 없으므로 해당 프로필의 선두를 null로 설정해야합니다.