function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
mukesh guptamukesh gupta 

Hi Expert

Hi Expert,

I want to add Lead in Campaign, but i have a  DML error.
 
String searchItem = selectedValue;
 List<Lead> l = [SELECT id,leadsource FROM LEAD WHERE Name = :selectedValue];
 String cname = l[0].leadsource;

 List <CampaignMember> cm = new list<CampaignMember>();
 Campaign c = new Campaign(name = cname);
 insert c;

 CampaignMember cml = new CampaignMember();
 cml.campaignid = c.id;
 cml.leadid = l[0].id;
 cm.add(cml);
 insert cm;
Please suggest.

Thanks
Mukesh
 
Best Answer chosen by mukesh gupta
Waqar Hussain SFWaqar Hussain SF
use allowdml="true in your <apex:page> tag

All Answers

rajat Maheshwari 6rajat Maheshwari 6
Hi Mukesh,

follow below code,
String searchItem = selectedValue;

system.debug('CheckSelectedValue'+ searchItem );

 List<Lead> l = [SELECT id,leadsource, Name FROM LEAD WHERE Name LIKE:searchItem ];

 System.debug('leadCheck'+l);
 String cname = l[0].leadsource;

 List <CampaignMember> cm = new list<CampaignMember>();
 Campaign c = new Campaign(name = cname);
 insert c;

 CampaignMember cml = new CampaignMember();
 cml.campaignid = c.id;
 cml.leadid = l[0].id;
 cm.add(cml);
 insert cm;
Please check debug log.

Thanks
Waqar Hussain SFWaqar Hussain SF
Hi Mukesh, What error is showing to you. Can you please explain
Nishad KNishad K
Hi Mukesh,

ContactId is Required field (ID of the Contact who is associated with a Campaign) in  CampaignMember
Nishad KNishad K
try like this :
 
String searchItem = selectedValue;
 List<Lead> l = [SELECT id,leadsource FROM LEAD WHERE Name = :selectedValue];
 String cname = l[0].leadsource;

 List <CampaignMember> cm = new list<CampaignMember>();
 Campaign c = new Campaign(name = cname);
 insert c;
 contact cont = new contact(LastName ='LastName');
 insert cont;


 CampaignMember cml = new CampaignMember();
 cml.campaignid = c.id;
 cml.leadid = l[0].id;
 cml.ContactId = cont.id;
 cm.add(cml);
 insert cm;

 
mukesh guptamukesh gupta
Hi All,


this apex code is working fine in developer console. but when i select a lead from visualforce page dropdown list and click the button then get an error 

Visualforce Error

System.LimitException: DML currently not allowed 
Class.associateList.searchMethod: line 20, column 1



This is Apex code
public class associateList {
     public String selectedValue { get; set; }
     public List<String> strSearch { get; set; }  
  
    
    public PageReference searchMethod() {
        
  
        String searchItem = selectedValue;
        
        List<Lead> l = [SELECT id,leadsource FROM LEAD WHERE Name = :selectedValue];
        String cname = l[0].leadsource;
        
        List <CampaignMember> cm = new list<CampaignMember>();
        
        Campaign c = new Campaign(name = cname);
        insert c;
        CampaignMember cml = new CampaignMember();
        cml.campaignid = c.id;
        cml.leadid = l[0].id;
        cm.add(cml);
        insert cm;
     
        return null; 
    }
    
    public associateList(){
    strSearch = new List<String>();
    
    for(Lead l: [SELECT id, Name From Lead]){
        strSearch.add(l.name);
    }
    
    
    }

}
this is Visualforce page
<apex:page controller="associateList" docType="html-5.0">
   <apex:form >
    <apex:inputText list="{!strSearch}" value="{!selectedValue}"/>
    <apex:commandButton value="Search Lead and Contact" action="{!searchMethod}"/>
    
   
   
 </apex:form>
</apex:page>

 
Waqar Hussain SFWaqar Hussain SF
use allowdml="true in your <apex:page> tag
This was selected as the best answer
Ramssf70Ramssf70
Hi mukesh gupta ,

 I tried this it is working fine for me .if you can share the error i can try to help you
​String searchItem = 'testlead';
 List<lead> l= [select  id,leadsource FROM LEAD where name=:searchItem];
 String cname = 'mycamaign';

 List <CampaignMember> cm = new list<CampaignMember>();
 Campaign c = new Campaign(name = cname);
 insert c;

 CampaignMember cml = new CampaignMember();
 cml.campaignid = c.id;
cml.leadid = l[0].id;
 cm.add(cml);
 insert cm;

Thank you