Newer Version Available

This content describes an older version of this product. View Latest

Working with Salesforce Records

It’s easy to work with your Salesforce records in Apex.

The term sObject refers to any object that can be stored in Force.com. This could be a standard object, such as Account, or a custom object that you create, such as a Merchandise object.

An sObject variable represents a row of data, also known as a record. To work with an object in Apex, declare it using the SOAP API name of the object. For example:

1Account a = new Account();
2MyCustomObject__c co = new MyCustomObject__c();

For more information on working on records with Apex, see Working with Data in Apex.

This example controller persists an updated Account record. Note that the update method has the @AuraEnabled annotation, which enables it to be called as a server-side controller action.

1public class AccountController {
2
3    @AuraEnabled
4    public static void updateAnnualRevenue(String accountId, Decimal annualRevenue) {
5        Account acct = [SELECT Id, Name, BillingCity FROM Account WHERE Id = :accountId];
6        acct.AnnualRevenue = annualRevenue;
7        update acct;
8    }
9}

For an example of calling Apex code from JavaScript code, see the Quick Start.

Loading Record Data from A Custom Object

Load record data using an Apex server-side controller and setting the data on a component attribute. This server-side controller returns records on a custom object myObj__c.
1public class MyObjController {
2    
3    @AuraEnabled
4    public static List<MyObj__c> getMyObjects() {
5        return [SELECT id, name, myField__c FROM MyObj__c];
6    }
7}

This example component uses the previous controller to display a list of records from the myObj__c custom object.

1<aura:component controller="namespace.MyObjController"/>
2<aura:attribute name="myObjects" type="namespace.MyObj__c[]"/>
3<aura:iteration items="{!v.myObjects}" var="obj">
4    {!obj.name}, {!obj.namespace__myField__c}
5</aura:iteration>
This client-side controller sets the myObjects component attribute with the record data by calling the getMyObjects() method in the server-side controller.
1getMyObjects: function(component){
2    var action = component.get("c.getMyObjects");
3    action.setCallback(this, function(a){
4        component.set("v.myObjects", a.getReturnValue());
5    });
6    $A.enqueueAction(action);
7}

For an example on loading and updating records using controllers, see the Quick Start.

Loading Record Data from a Standard Object

Similarly, you can load records from a standard object. This server-side controller has methods to return a list of opportunity records and an individual opportunity record.
1public class OpportunityController {
2
3    @AuraEnabled
4    public static List<Opportunity> getOpportunities() {
5        List<Opportunity> opportunities = 
6                [SELECT Id, Name, CloseDate FROM Opportunity];
7        return opportunities;
8    }
9
10    @AuraEnabled
11    public static Opportunity getOpportunity(Id id) {
12        Opportunity opportunity = [
13                SELECT Id, Account.Name, Name, CloseDate, 
14                       Owner.Name, Amount, Description, StageName
15            FROM Opportunity
16            WHERE Id = :id
17         ];
18        return opportunity;
19    }
20}
This example component uses the previous server-side controller to display a list of opportunity records.
1<aura:component controller="namespace.OpportunityController">
2    <aura:attribute name="opportunities" type="Opportunity[]"/>
3    <aura:iteration var="opportunity" items="{!v.opportunities}">
4                {!opportunity.Id} : {!opportunity.Name}
5    </aura:iteration>
6</aura:component>
To set the record data on a component attribute, call the getOpportunities() server-side controller from a client-side controller and set the opportunities attribute, as shown in the previous example. For more information about calling server-side controller methods, see Calling a Server-Side Action.