2

I've already set a default value for the field name with testUser

However, when I tried to create an object from Account.

The object still not coming with the default value on the name field.

Any possible to do so?

Because I'm creating a Web API (non-restful) and pass a new object with default values to the front-end.

How could I get it?

Why doesn't Salesforce provide with such an essential function?

Account acc = new Account();

System.Debug(LoggingLevel.DEBUG, JSON.serializePretty(
        acc
));

Expected output

10:57:50.27 (29577741)|USER_DEBUG|[3]|DEBUG|{
  "attributes" : {
    "type" : "Account"
  },
  "Name" : "testUser"
}

Actual output

10:57:50.27 (29577741)|USER_DEBUG|[3]|DEBUG|{
  "attributes" : {
    "type" : "Account"
  },
}
4
  • you should be able to see the Json of account in debug logs but are you saying that you don't see any new account created with that name? Jan 18, 2017 at 18:56
  • pls see my update, thanks~~ I provide more concrete outputs
    – newBike
    Jan 18, 2017 at 18:59
  • where did you set the default value for the account? I don't see it now? Jan 18, 2017 at 19:21
  • I set the value here . i.imgur.com/XUyK3NY.png
    – newBike
    Jan 18, 2017 at 19:26

3 Answers 3

3

You can instantiate a record with its default values using the SObjectType method newSObject. Note it has a signature which accepts recordTypeId and loadDefaults.

SObjectType accountType = Account.sObjectType;
Account recordWithDefaults = (Account)accountType.newSObject(/*recordTypeId*/ null, /*loadDefaults*/ true);
2
  • I know it's usually not a good thing to change an accepted answer, but I am doing it since the right method is now . newSObject not .newInstance. Aug 10, 2018 at 17:23
  • 1
    @SebastianKessel No problem nice catch
    – Adrian Larson
    Aug 10, 2018 at 18:31
1

Default values will be populated for unspecified fields at the moment the record is inserted, not when a JSON deserialize is performed. You can also describe fields and get the getDefaultValue method from the DescribeSObjectFieldResult class.

5
  • It doesn't work for custom objects. I also have a custom object Loan_Account__c . And I got this exception Variable does not exist: Loan_Account__c.Description
    – newBike
    Jan 18, 2017 at 19:25
  • the field should be Loan_Account__c.Description__c Jan 18, 2017 at 19:28
  • Still not working on custome objects. Loan_Account__c.Description__c Compile failure on line 3, column 9: Variable does not exist: Loan_Account__c.Description__c
    – newBike
    Jan 18, 2017 at 19:45
  • can you please post the whole code? Also, please check field accessibility for that field Jan 18, 2017 at 19:47
  • @newBike I have to agree. It sounds like a compilation error. You're doing something not quite right.
    – sfdcfox
    Jan 18, 2017 at 19:47
0

Finally, I found salesforce provides this feature actually.

Schema.getGlobalDescribe().get('loan_account__c').newSObject(null, true)

Put the first argument as null for the ID and set 2nd arg as true for loading defaults.

1
  • 2
    So if you compare that with my answer, the difference is that instead SObjectType accountType = Account.sObjectType, you're doing a more verbose (and dramatically less efficient) SObjectType accountType = Schema.getGlobalDescribe().get('loan_account__c'). Getting the global describe consumes a lot of CPU Time, so avoid it if you can. Just change Account.sObjectType to Loan_Account__c.sObjectType.
    – Adrian Larson
    Jan 18, 2017 at 21:30

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .