Had an issue getting Default value of a Custom object field (Picklist) automatically when the object is instantiated in controller class. Below worked for me.

InstantiatedObject.Field = (Type_of_Field) ObjectType.Field.getDescribe().getDefaultValue();

Do we have any better alternative to get default values in controller method/class?


There's a new method you can use while creating a record in memory, using a new two-parameter version of newSobject:

Account record = (Account)Account.SObjectType.newSobject(null, true);

The null value is the record type to use, and true specifies that all default field values should be populated.

This method is significantly faster than checking every field on an object to see if there's a default value to populate.

  • Hi @sdfcfox Thanks. But it's giving me below error. Unable to create/update fields: IsDeleted. Please check the security settings of this field and verify that it is read/write for your profile or permission set. An unexpected error has occurred. Your development organization has been notified. which seems weird. In security settings there seems no such fields as IsDeleted. This is used within SF instance and by standard user. Therefore I believe there is no need to set special permissions as such.. – Pasan Eeriyagama Nov 21 '16 at 23:32
  • 1
    @PasanEeriyagama That must be something else in your code; I tried this in my developer org and it worked as documented. There is a "hidden" field called IsDeleted, but it should never be set by code, as the system enforces the integrity of the field. It might be worth investigating as a separate question. – sfdcfox Nov 22 '16 at 1:29
  • @sdfcfox I tried with a custom object with no special coding. When I just initialised object by new CustomObject(); it works fine, when I used above, it caused the exception and it wasn't captured by try catch block too. Thanks for the help on this. – Pasan Eeriyagama Nov 22 '16 at 3:11

If you are doing DML into database and want the picklist field value to be default, you can simply leave it unset. It will automatically be setup as the default value.

If you use it for other purpose, I guess you need to go through the getDescribe() way.

  • Thanks Lance, It's needed to show on screen, therefore need it populated as we create new object. – Pasan Eeriyagama Nov 21 '16 at 23:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.