Data and metadata
Since its release, one of the biggest selling points of the Salesforce1 Platform is the ease at which anyone can make configuration changes through the platform's GUI. Naturally, when Apex was first developed, a key requirement was the ability to easily interact with these objects and their data in the database. The folks at salesforce.com took an innovative approach to this and tightly coupled Apex with the metadata of the Salesforce1 Platform.
The data stored on the Salesforce1 Platform has the sObject data type. This data type can be used to refer to the generic concept of any record regardless of the object type. Each of the built-in tables and custom tables you create on the Salesforce1 Platform automatically have their own unique data type that is inherited from the generic sObject data type.
When you write Apex code, you can refer to any of the metadata on the Salesforce1 Platform. The data type of that metadata is automatically known by a compiler and the Force.com IDE. This allows you to reference sObjects and their fields without having to cast them. It also makes the IDE's code complete functionality extremely useful as it provides you with all the attributes and methods you need at the touch of your fingers.
Even more amazing is that the Salesforce1 Platform is aware of the metadata you reference in your Apex code. When you reference a sObject or field in your code, the platform automatically protects those components from destructive changes. This amazing attention to detail ensures that once your code can rely on sObject and fields as existing and being of the same data type, not just upon compilation but every time it is executed in the future. Given the ease at which someone can make changes to sObjects and fields, this is a critical feature which is shown as follows:
Account newAccount = new Account(); newAccount.Name = 'Acme'; //This is a string field newAccount.IsCustomerPortal = true; //This is a boolean field newAccount.AnnualRevenue = 10000000; //This is an integer field List<sObject> myList = new List<sObject>(); //This is a List that can hold multiple sObjects regardless of table. myList.add(newAccount); insert myList; //This creates a new record in the database
In this code, we first construct a new instance of an Account
sObject. This is a standard sObject that is included in the Salesforce1 Platform, and it is typically used to track a company. We're able to reference all the fields on the Account
table by name and the data types of those fields are automatically known by Apex. This means that it will not be possible to set the AnnualRevenue
variable to a string or IsCustomerPortal
to a date. Next, we constructed a list of sObjects (in this case, we could have constructed a list of Account
objects and been limited to adding only objects of the Account
data type). We then use the .add()
method to add our newly constructed account to the list. Finally, we insert the entire list of sObjects into the database. We'll discuss all of these concepts in greater detail later, and you can always read more about the specific methods in Force.com Apex Code Developer's Guide located at http://developer.salesforce.com.