Loading Converted Leads

      When you are migrating data from one system to another there will be a need to load the leads as converted as they would have been already converted in the source system.    First step is to raise the case with salesforce.com to open up the audit fields for your organisation. The fields CONVERTEDACCOUNTID, CONVERTEDCONTACTID, CONVERTEDOPPORTUNITYID and CONVERTEDDATE will not be visible while inserting or updating by default.

Once the salesforce allows you to load these system fields you can start your process.

Steps for Loading

  • Firstly, Load Account, Contact and Opportunity which needs to be associated with the converted lead.
  • Next prepare a csv files with information of lead and get the ids from previous step and load it into the appropriate converted fields of file as mentioned above.
  • The field Isconverted should be set to true
  • Insert, Update or Upsert the leads as necessary.

Things to consider while loading

  • Converted Account is mandatory . Converted contact and opportunity is not mandatory. converted contact and opportunity need not belong to converted account.
  • You cannot see the information of converted leads. If you go to the lead detail page through its id you will see information on Converted date, Converted account, Contact and opportunity whichever was mapped. Only way to extract the information is through API
  • Lead conversion mapping will not be respected.For eg Lead description is mapped to contact description and when u load the converted lead with description it will not be carried over to the converted contact.
  • Converted date if not mapped will give value This lead was converted on {0} on lead detail page. If you need to enter converted date make sure you also enter created date . Otherwise it would error out as created date would be defaulted to now which will be at future date when compared to converted date.
  • Lead triggers and validation rules will be fired.
  • Converted Leads cannot be updated but can be deleted

click here to have a look at the sample csv file.

If you have any questions please post it in comments section

Rendering VF page as pdf and sending pdf as an attachment from a list view

Thought i would share something which i needed to work on. I thank Jeff Douglas for his awesome post which helped me in this assignment.Requirement

    There is a custom visualforce page which is rendered as pdf. There is a button on contact detail page which when clicked would call this vf page. These things were present. In addition to viewing this pdf from contact detail there was also a necessity to email these PDFs that too in bulk from list views.
list button was created with source as VF page.
Controller is where all the code is
public  class emailcontact {
     public ApexPages.StandardSetController propcontroller{get;set;}
    public list props{get;set;}  
    public emailcontract(ApexPages.StandardSetController controller) {
    propcontroller =(ApexPages.StandardSetController)controller;   
    public pagereference sendingemail(){
        props = propcontroller.getSelected();// Contains the list of record which is selected from the list  
        PageReference pdf = Page.VFpagetoberenderedaspdf;
        for(contact pr : props)
            attachment attach = new attachment();
            Blob body;
            try {
                body = pdf.getContentAsPDF();
            catch (VisualforceException e) {
                body = Blob.valueOf(‘Missing Text’);
            // ********************* for attachment to the contactrecord ******************************   
            attach.Body = body;        
            attach.Name = ‘Contact’ +system.today+’.pdf’;
            attach.IsPrivate = false;
            attach.ParentId = pr.Id;
            catch(exception e)
            // ************************ for email creation************************************   
            Messaging.EmailFileAttachment attach2 = new Messaging.EmailFileAttachment();
            attach2.Body = body;
            Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
            String[] toAddresses = new String[] {pr.Email};
            mail.setSubject(‘Offer for’ + pr.name);// alternatively use templates as well
            mail.setFileAttachments(new Messaging.EmailFileAttachment[] { attach2 });
            mail.setHtmlBody(‘Please find attached a cash offer for your listing at ‘);           
    if(att!= null)
    insert att;
    if(em_sent != null)
    pagereference pr  = new pagereference(‘/a0e/o’);//will redirect to contact tab
    return pr;
Also you can add a piece of code to send an email to yourself to indicate the success or failure of the action or display it in the page
Major limitation i faced is no of the records the code can process (Governor limits on callouts). It was limited to 10 after which time out error happened. I tried using batch as well as future calls. Both returned me empty PDFs. Waiting for Salesforce to remove these limitations in future.

Setting a child record to play a unique primary role to parent through config

There are many use cases where there is need to set one of the child record as primary and when another child record is updated as primary it should throw up an error saying that primary record already exists (similar to contact roles function). Many of  the developers would suggest an apex trigger solution But this can be achieved through configuration alone.Its a simple 2 step process.

  1. Create a Roll up summary field on the parent object. It would roll up the count of the child records which have the primary checkbox set to true.


  • Create a validation rule on this field if the number becomes more than 1 validation error will be thrown.



U are good to go now. When the child record is updated to primary rollup would happen. But when there is a primary record rollup will try to become 2 triggering the validation error thus preventing it from saving the record. But if the relationship between child and parent is lookup or u want user to be pointed to the primary record in the error message listen to developers 🙂