Import using Apex in Salesforce

Visualforce page:

<apex:page controller=”ImportCtrlr”>
<apex:form >
<apex:pageblock >
<apex:pageBlockSection columns=”2″>
<apex:pageBlockSectionItem >
<apex:outputLabel value=”Select Object”/>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:selectList size=”1″ value=”{!obj}” >
<apex:selectOptions value=”{!objs}”/>
</apex:selectList>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:outputLabel value=”Select File”/>
</apex:pageBlockSectionItem>
<apex:pageBlockSectionItem >
<apex:inputFile value=”{!fileContent}” filename=”{!fileName}”/>
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
<apex:pageblockButtons >
<apex:commandButton value=”Import” action=”{!importData}”/>
</apex:pageblockButtons>
</apex:pageblock>
</apex:form>
</apex:page>



Apex:


public class ImportCtrlr 
{
public Map<String, Schema.SObjectType> objs {get; set;}
public String obj {get;set;}
public Blob fileContent {get;set;}
public String filename {get;set;}
public List<List<String>> parsedCSVdata;
public List<sObject> sObjectDatatoStore;

public ImportCtrlr()
{
objs = Schema.getGlobalDescribe();
}

public void importData()
{
String fileString = fileContent.toString();
parsedCSVdata = parseCSV(fileString,false);
System.debug(‘Parsed CSV Data –>’ + parsedCSVdata);
sObjectDatatoStore = csvTosObject(parsedCSVdata,obj);
System.debug(‘sObjectDatatoStore –>’ + sObjectDatatoStore);
insert sObjectDatatoStore;
}

/* Method to parse CSV to List<List<String>> */
public List<List<String>> parseCSV(String contents,Boolean skipHeaders) 
{  

     List<List<String>> allFields = new List<List<String>>();  

     // replace instances where a double quote begins a field containing a comma  
     // in this case you get a double quote followed by a doubled double quote  
     // do this for beginning and end of a field  

     contents = contents.replaceAll(‘,”””‘,’,”DBLQT’).replaceall(‘”””,’,’DBLQT”,’);  


     // now replace all remaining double quotes – we do this so that we can reconstruct  

     // fields with commas inside assuming they begin and end with a double quote  

     contents = contents.replaceAll(‘””‘,’DBLQT’);  


     // we are not attempting to handle fields with a newline inside of them  

     // so, split on newline to get the spreadsheet rows  

     List<String> lines = new List<String>();  


     try 

     {  
         lines = contents.split(‘n’);  
     } 
     catch (System.ListException e) 
     {  
         System.debug(‘Limits exceeded?’ + e.getMessage());  
     }  

     Integer num = 0;  


     for(String line : lines)

{  

         // check for blank CSV lines (only commas)  


         if (line.replaceAll(‘,’,”).trim().length() == 0) break;             

         List<String> fields = line.split(‘,’);      

         List<String> cleanFields = new List<String>();  


         String compositeField;  


         Boolean makeCompositeField = false;  


         for(String field : fields) 

         {  

             if (field.startsWith(‘”‘) && field.endsWith(‘”‘)) 

             {  
                 cleanFields.add(field.replaceAll(‘DBLQT’,'”‘));  
             } else if (field.startsWith(‘”‘)) 
             {  
                 makeCompositeField = true;  
                 compositeField = field;  
             } 
             else if (field.endsWith(‘”‘)) 
             {  
                 compositeField += ‘,’ + field;  
                 cleanFields.add(compositeField.replaceAll(‘DBLQT’,'”‘));  
                 makeCompositeField = false;  

             } 

             else if (makeCompositeField) 
             {  
                 compositeField +=  ‘,’ + field;  
             } 
             else 
             {  
                 cleanFields.add(field.replaceAll(‘DBLQT’,'”‘));  
             }  
         }            
         allFields.add(cleanFields);  

     }  


     if (skipHeaders) allFields.remove(0);  


     return allFields;        
 

/* Method to parse List<List<String>> to sObject */
public list<sObject> csvTosObject(List<List<String>> parsedCSV, string objectType)
    {
        Schema.sObjectType objectDef = Schema.getGlobalDescribe().get(objectType).getDescribe().getSObjectType();
        System.debug(‘Object Definition –> ‘ + objectDef);
        
        list<sObject> objects = new list<sObject>();
        list<string> headers = new list<string>();
        
        for(list<string> row : parsedCSV)
        {
            for(string col : row)
            {
                headers.add(col);
            }
            break;
        }
        System.debug(‘Headers –> ‘ + headers);
        integer rowNumber = 0;
        for(list<string> row : parsedCSV)
        {
            if(rowNumber == 0)
            {
                rowNumber++;
                continue;
            }
            else
            {
                sObject thisObj = objectDef.newSobject();
                integer colIndex = 0;
                for(string col : row)
                {                   
                    string headerName = headers[colIndex].trim();
                    system.debug(‘========================= Column Name ‘ + headerName);
                    if(headerName.length() > 0)
                    {                  
                        try
                        {                       
                        if(col.contains(‘/’))
                        {
                        Date tempDate;
                        String[] tempStr = col.split(‘/’);
                        Integer d = Integer.valueOf(tempStr[0]);
                        Integer m = Integer.valueOf(tempStr[1]);
                        Integer y = Integer.valueOf(tempStr[2]);
                        tempDate = Date.newInstance(y,m,d);
                        thisObj.put(headerName,tempDate);
                        }
                        else
                        {
                        thisObj.put(headerName,col.trim());
                        }                            
                        }
                        catch(exception e)
                        {
                            system.debug(‘============== Invalid field specified in header ‘ + headerName);                           
                        }
                        colIndex++;
                    }
                } 
                objects.add(thisObj);
                rowNumber++;
            }       
        }        
        System.debug(‘Object Data –> ‘ + objects);
        return objects;
    }
}


Cheers!!!

Leave a Reply