I'm trying to write a method for working with sObject.put(field, value)
statements in a loop where the Schema.DisplayType
of the fields received varies.
The goal is to have the method return the name of a compatible DisplayType
you can convert the value to in order to have it assign properly without breaking the statement. Although I could figure this out by trial and error, I was wondering if anyone knew (off the top of their head) or could direct me to (since I haven't been able to find it online) a list of compatible types. As an example, in my method below, I've grouped String, TextArea, Id, Picklist, Reference, Phone, Email and URL together because if you pass a string to fields of any of these fields, it will accept the value, but I'm wondering if I can get away with further grouping. E.g. could I put Boolean in that list too, or are some of the Boolean field values 0 and 1, and passing a string would be problematic? Or if I pass an Integer field a Decimal value, will it just truncate it, or will an error be thrown?
/** SCHEMA DISPLAY TYPE COMPATIBILITY
* @param field <Scehma.SObjectField
* @return <String>
**/
public static String schemaDisplayTypeCompatibility(Schema.SObjectField field){
DescribeFieldResult fielddesc = field.getDescribe();
DisplayType fieldType = fielddesc.getType();
Boolean canUpdate = fielddesc.isUpdateable();
if(canUpdate == FALSE)
return 'NOT UPDATEABLE';
if(fieldType == Schema.DisplayType.String ||
fieldType == Schema.DisplayType.TextArea ||
fieldType == Schema.DisplayType.Id ||
fieldType == Schema.DisplayType.Picklist ||
fieldType == Schema.DisplayType.Reference ||
fieldType == Schema.DisplayType.Phone ||
fieldType == Schema.DisplayType.Email ||
fieldType == Schema.DisplayType.URL)
return 'String';
if(fieldType == Schema.DisplayType.Currency ||
fieldType == Schema.DisplayType.Double)
return 'Decimal';
if(fieldType == Schema.DisplayType.Integer)
return 'Integer';
if(fieldType == Schema.DisplayType.Boolean)
return 'Boolean';
if(fieldType == Schema.DisplayType.DateTime)
return 'DateTime';
if(fieldType == Schema.DisplayType.Date)
return 'Date';
if(fieldType == Schema.DisplayType.Time)
return 'Time';
if(fieldType == Schema.DisplayType.Combobox)
return 'Combobox';
if(fieldType == Schema.DisplayType.MultiPicklist)
return 'MultiPicklist';
if(fieldType == Schema.DisplayType.EncryptedString)
return 'EncryptedString';
if(fieldType == Schema.DisplayType.DataCategoryGroupReference)
return 'DataCategoryGroupReference';
if(fieldType == Schema.DisplayType.base64 )
return 'base64 ';
//if(fieldType == Schema.DisplayType.anytype)
// return 'anytype';
return 'UNKNOWN';
}