Monday, 6 April 2015

How to insert record through dynamic SObject

public void InsertSOjects(String sObjectApiName, Map<String, Map<string,string>>   keyvalue)
    {
        Map<String, Map<string,string>>  fieldMap = keyvalue;
        Schema.SObjectType targetType = Schema.getGlobalDescribe().get(sObjectApiName);
        SObject newSobject = targetType.newSObject();
        Map<String, Schema.sObjectField> targetFields = targetType.getDescribe().fields.getMap();
        system.debug('****targetFields****'+targetFields);
        for (String key : fieldMap.keySet())
        {
          map<string,string> objinnerMap=  fieldMap.get(key);
        for (String innerkey : objinnerMap.keySet())
        {
            String  value = objinnerMap.get(innerkey);
              system.debug('****key****'+key);
               system.debug('****value****'+value);
            Schema.DisplayType valueType = targetFields.get(key).getDescribe().getType();
         
                  string svalue = objinnerMap.get(innerkey);
                  system.debug('****svalue ****'+svalue );
                if (valueType == Schema.DisplayType.Date)
                    newSobject.put(key, Date.valueOf(svalue));
                else if(valueType == Schema.DisplayType.DateTime)
                    newSobject.put(key, DateTime.valueOfGmt(svalue));
                else if (valueType == Schema.DisplayType.Percent || valueType == Schema.DisplayType.Currency)
                    newSobject.put(key, svalue == '' ? null : Decimal.valueOf(svalue));
                else if (valueType == Schema.DisplayType.Double)
                    newSobject.put(key, svalue == '' ? null : Double.valueOf(svalue));
                else if (valueType == Schema.DisplayType.Integer)
                    newSobject.put(key, Integer.valueOf(svalue));
                else if (valueType == Schema.DisplayType.Base64)
                    newSobject.put(key, Blob.valueOf(svalue));
               else if (valueType == Schema.DisplayType.Boolean)
                    newSobject.put(key, boolean.valueOf(svalue));
           
                else if (valueType  == Schema.DisplayType.String)
                  newSobject.put(key, string.valueOf(svalue));
                else
                    newSobject.put(key, svalue);
       
        }
        }
        system.debug('****newSobject****'+newSobject);
        insert newSobject;
    }

No comments:

Post a Comment