Tag Archives: SOQL

How to Lock records using Apex in Salesforce?

Using UPDATE keyword in SOQL helps us to lock the records from being updating from another request.

Sample Code:

Account [] objAccts = [SELECT Id, Name FROM Account where Country='India' FOR UPDATE];

Note: We can’t use the ORDER BY keywords in any SOQL query that uses locking.

Transaction Control using SavePoint and Rollback in Salesforce

SavePoint and Rollback will help us to maintain transaction for DML statement.
Suppose you  have written multiple lines of DML statements in a try block, If any error occurs during DML Operations, the operation will be rolled back to the most recent save point and the entire transaction will not be aborted.

Savepoint sp;
try{
   sp = Database.setSavepoint();
 
   Account a = new Account();
   a.Name = 'Test Account';
   insert a;
 
   Contact c = new Contact(Account = a.Id);
   c.FirstName = 'Biswajeet';
   c.LastName = 'Samal';
   insert c;
  }
catch(Exception e){
    Database.RollBack(sp);
}

In this example, if any error occurs while inserting the Account ‘a’ or Contact ‘c’, then the entire transaction will be rolled back to SavePoint ‘sp’, as specified in the catch section by Database.Rollback method.

toLabel() function in SOQL

  • toLabel() is used to convert the results of a field into user’s language.
  • toLabel() can convert the results into user’s language, if the translation workbench is enabled.
  • In all Salesforce edition we can use toLabel().
  • For picklist and Record type values we can use the toLabel() function in SOQL.

Here is an example:

SELECT Name, toLabel(Industry) FROM Account

Result:

download (1)

Not Like Operator in SOQL

Sometimes we need “NOT LIKE” operator in SOQL.
But SOQL will not allow someone to write simple query using “Not Like” operator such as:

SELECT Name From Account Where Name Not Like '%Test%';

So, here is the solution:

SELECT Name From Account Where Not Name Like '%Test%';

If you are using “GROUP By” clause with “Not Like” operator, here is an example:

SELECT Name From Account Where Not Name Like '%Test%' Group By Name;