Saturday, February 28, 2015

Quick Overview of Spring ‘15 Features for Developers

Salesforce Search Infrastructure

Salesforce Search Infrastructure has changed from bigram tokenisation to morphological tokenisationRead more...

Flexible Pages have been renamed Lightning Pages

Flexible Pages have been renamed Lightning Pages throughout the Salesforce documentation and user interface. They are still known as FlexiPages in the API, however. Read more…

Deploy 10,000 components / files

You can now deploy 10,000 files at a time. Read more...

Long-running Asynchronous Callouts requests from a Visualforce page

Long-running Asynchronous Callouts requests from a Visualforce page to an external Web serviceRead more...

Submit up to 100 batch jobs simultaneously

Chain Jobs (unlimited number of times) with Queueable Apex

Size of callout request or response

The size of callout request or response (HTTP request or Web services call) has increased from 3 MB to 6 MB (for synchronous) and 12 MB (for asynchronous)Read more…

New annotation @testSetup for Test Classes

New classes for Address and Location

With Spring ‘15, you can now query compound fields and their components using the new Address and Location class methods. Read more… 

Geolocation fields are now queryable in Apex

Geolocation fields are now queryable in Apex. However, their locations are editable in Apex only as components of the compound field. Read and set geolocation field components by appending “__latitude__s” or “__longitude__s” to the field name, instead of the usual “__c.” For example:
Double theLatitude = myObject__c.aLocation__latitude__s;
myObject__c.aLocation__longitude__s = theLongitude;

Quick Overview of Winter ‘15 Features for Developers

Security Token for Callout

Security tokens are now required for API logins from callouts in API version 32.0 and later. Read more…

Deploy with Active Jobs

An option has been added to the Deployment Settings page that lets you deploy components referenced by active Apex jobs. With this option, you don’t have to cancel Apex jobs to be able to have a successful deployment.

Lightning Connect
With Lightning Connect you can view and search records that are stored outside Salesforce. Instead of copying the data into Salesforce, which would be redundant and inefficient, it will be using external objects to reference the data and access the data in real time via Web service callouts. Read more…

Maximum number of methods with the future annotation allowed per Apex invocation: from 10 to 50
Maximum number of callouts (HTTP requests or Web services calls) in a transaction: from 10 to 100
Maximum number of test classes that can be queued per 24-hour period: The greater of 500 or 20 multiplied by the number of test classes in the organisation.

Queueable Interface

Submit and Monitor Jobs for Asynchronous Execution with the Queueable Interface

Lightning Components (Beta)
Use the Lightning Component framework to develop dynamic Web apps for mobile and desktop devices. It’s a modern framework for building single-page applications engineered for growth. Read more… 

Quick Overview of Spring ‘15 Features for Administrators

Import Accounts and Contacts with different Sources

Convert Leads to Contacts (Beta)

If you enable Duplicate Management, you can now convert qualified leads to contacts in Salesforce1 app. Read more…

Prevent Duplicate Records on Lead/Account/Contact/Custom Objects

With Spring ‘15 Duplicate Management feature is Generally Available with considerations and limitations. Read more…

Field History Tracking for Product Object

With Spring ‘15 now you can track field history on Product object. Read more…

Access Salesforce during Maintenance and Planned Upgrades

If your Salesforce org is accessible in a 24/7 then definitely it is very critical to lock down during maintenance windows of Salesforce.
With Spring ‘15 Salesforce has introduced a feature “Business Continuity with Organisation Sync” and it is now Generally Available. This will set up a secondary, synced Salesforce organisation where users can work when your primary organisation is unavailable. Read more…

Record Types and Page Layouts for Files object

Salesforce Files now support Record Types and Page Layouts. Read more…

New name for Territory Management 2.0

Territory Management is now renamed to “Enterprise Territory Management”Read more…


Delegated Administrators Can Manage Public Groups

Now delegated administrators can create public groups, and you can specify public groups in which delegated administrators can add and remove users in specified roles and all subordinate roles. Read more…

Modify Records by Inactive User

With Spring ’15, administrators and all users with the CREATE or EDIT permission can CREATE or EDIT accounts, opportunities, and custom object records that are owned by inactive users. Read more...

Quick Overview of Winter ‘15 Features for Administrators

Access to Connected Apps

In order to access connected apps (Salesforce1 downloadable apps for iOS and Android devices, Salesforce for Outlook, Connect for Outlook, Connect for Office), User must have “API Enabled” profile permission Turned On. Read more...

Salesforce1 Mobile Browser App URL Update

If you enable Lightning components, the URL for accessing Salesforce1 with a mobile browser will be changed.
(a) URL without Lightning components
(b) URL with Lightning components
Note:  If you navigate to the old URL, it redirects to the new URL. Read more…

Switch Between Accounts in Multiple Organizations and Communities in SalesforceA

Now you can easily access multiple accounts in different organisations without having to log out and log in each time you need to switch to a different account.
Note: The account switcher is available only in the SalesforceA mobile app. It’s not available if you access SalesforceA from a browser. Read more…

Add Custom Lookup Fields on Activities with Limitations

You can now add custom fields on Activities (Tasks & Events) with data type “Lookup”. To enable this feature in your Salesforce organisation, contact Customer Support. Read more…

Territory Management 2.0 (Generally Available)

With Winter ‘15, you do need to contact support to enable Territory Management in your Salesforce organization. Organizations created before Winter ’15 need to call customer support to enable this feature. Readmore…

New Names for some Products and Features

  1. Salesforce Analytics is now called Salesforce1 Reporting.
  2. Analytic Snapshots is now called Reporting Snapshots.
  3. The “Manage Analytic Snapshots” user permission is now called “Manage Reporting Snapshots.”
  4. Embedded Analytics is now called Embedded Report Charts.
  5. Analytics API via Apex is now called Salesforce1 Reporting API via Apex.
  6. Analytics REST API is now called Salesforce1 Reporting REST API.

A Step added for Enabling Multiple Currencies

Support of IE7 and IE8 browsers

With Summer ‘15 release, Salesforce will no longer support IE7 and IE8 browsers. Less than 5% customers are using IE7 and less than 16% are using IE8. Read more...

Features Enabled by Customer Support

Following features can be enabled by Customer Support:

(a) Organization Administrators Can Login as Any User:
Login option associated to each User under “Manage Users” section. You need to contact customer support to enable this feature. Read more...

(b) Active Lookup Filters:
In each object of Salesforce we can have lookup filters. It can be “Required” or “Optional”. You can create “Optional” lookup filters as many as you want. BUT you can ONLY have 5 “Required” lookup filters on an object. You can contact customer support to enable it up to 10. Ten (10) is the maximum limit of “Required” lookup filters on an object.

(c) Audit / System Fields:
For data migration if you have audit / system fields (Created Date, Last Modified Date, Created By, Last Modified By) and you want them to be migrated as well then you need to enable “Audit / System fields” by logging a case to customer support. Read more... Related Article...

Play with Apex Collections

public class ApexCollectionConversion{

    /******************** FOR LIST **********************************************/
    public void convert_List_INTO_Set(){
        // Conver List into Set
        List<String> lstEnglishCapitalLetters = new List<String> {'A', 'B'};
        // Method 1:
        Set<String> setEnglishCapitalLetters = new Set<String>(lstEnglishCapitalLetters);
        // Method 2:
        // Method 3:
        for(String engLetter : lstEnglishCapitalLetters){

    public void convert_List_INTO_Map(){
        // Conver List into Map
        // Method 1:
        List<String> lstEnglishSmallLetters = new List<String> {'a', 'b'};
        Map<String, String> mapEnglishSmallLetters = new Map<String, String>();
        for(String engLetter : lstEnglishSmallLetters){
            mapEnglishSmallLetters.put(engLetter, engLetter);
        // Method 2:
        List<Account> lstAccounts = [SELECT Id, Name FROM Account WHERE Name = 'Salesforce'];
        Map<Id, Account> mapAccounts = new Map<Id, Account>(lstAccounts);

    /******************** FOR SET **********************************************/

    public void convert_Set_INTO_List(){
        // Conver Set into List
        Set<String> setFruitsName = new Set<String>{'Apple', 'Orange'};
        // Method 1:
        List<String> lstFruitsName = new List<String>(setFruitsName);
        // Method 2:

    public void convert_Set_INTO_Map(){
        // Conver Set into Map
        Set<String> setVagetablesName = new Set<String>{'Potato', 'Carrot'};        
        Map<String, String> mapVagetablesName = new Map<String, String>();
        for(String vegetable : setVagetablesName){
            mapVagetablesName.put(vegetable, vegetable);

    /******************** FOR MAP **********************************************/

    public void convert_Map_INTO_List(){
        // Conver Map into List
        Map<String, String> mapCountryAbbreviations = new Map<String, String>{'USA' => 'United States of America', 'UK' => 'United Kingdom'};
        List<String> lstCountryShortName = new List<String>(mapCountryAbbreviations.keySet());
        List<String> lstCountryFullName = new List<String>(mapCountryAbbreviations.values());

    public void convert_Map_INTO_Set(){
        // Conver Map into Set
        Map<String, String> mapCityCodes = new Map<String, String>{'1001' => 'California', '1002' => 'London'};
        Set<String> setCountryShortName = new Set<String>(mapCityCodes.keySet());
        Set<String> setCountryFullName = new Set<String>(mapCityCodes.values());