You can do it like blow assuming that map contains key values as string pair of object field name and value
Map<String, Schema.SObjectType> descMap = Schema.getGlobalDescribe();
Schema.SObjectType leadSchema = descMap.get(objectName);
Map<String, Schema.SObjectField> fieldMap = leadSchema.getDescribe().fields.getMap();
// objectRecord is the object of any custom or standard object
// recordMap is the map of <String, String>
for (String sfdcFieldName: recordMap.keySet()) {
String fieldValue = recordMap.get(sfdcFieldName);
Schema.DisplayType fieldDataType = fieldMap.get(sfdcFieldName).getDescribe().getType();
if (String.isNotBlank(fieldValue)) { // this is just to make sure we are not setting blank. if you need to set blank then remove this check.
if (String.valueOf(fieldDataType).equalsIgnoreCase('boolean')) {
objectRecord.put(sfdcFieldName, Boolean.valueOf(fieldValue.toLowerCase()));
}
else if(String.valueOf(fieldDataType).equalsIgnoreCase('decimal') ||
String.valueOf(fieldDataType).equalsIgnoreCase('currency') ||
String.valueOf(fieldDataType).equalsIgnoreCase('double') ||
String.valueOf(fieldDataType).equalsIgnoreCase('percent')) {
objectRecord.put(sfdcFieldName, Decimal.valueOf(fieldValue.toLowerCase()));
}
else if(String.valueOf(fieldDataType).equalsIgnoreCase('date'))) {
objectRecord.put(sfdcFieldName, Date.valueOf(fieldValue));
}
else if(String.valueOf(fieldDataType).equalsIgnoreCase('datetime'))) {
objectRecord.put(sfdcFieldName, Datetime.valueOf(fieldValue));
}
else {
objectRecord.put(sfdcFieldName, fieldValue);
}
}
}
1 answer