Search

Tuesday, 31 May 2016

Useful Summer 16 Features


Cloning Sandboxes


You can now create a sandbox by cloning an existing sandbox rather than using your production org as your source. Save time by populating any type of sandbox with a previously chosen set of data and metadata. (Sandbox templates, which serve a similar purpose, are available only for Full or Partial Copy Sandboxes.) Sandbox-to-sandbox cloning facilitates iterative development, allowing you to freeze development in one sandbox and pick up where you left off in a new one. This feature is available in both Lightning Experience and Salesforce Classic.



Simplify Development of Asynchronous Callouts by Using Named Credentials


You can now use named credentials in long-running asynchronous callouts from a Visualforce page’s controller. A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. Salesforce manages all authentication for callouts that specify a named credential as the callout endpoint so that your Apex code doesn’t have to. You can also skip remote site settings, which are otherwise required for callouts to external sites, for the site defined in the named credential. This feature is available in both Lightning Experience and Salesforce Classic.




Get a Map of Populated SObject Fields


We’ve added a method on the Apex SObject class that makes it more efficient to iterate over fields that have been populated in memory. Previously, iterating over just the populated the fields of an SObject involved some complicated programming. For example, if you queried an SObject using SOQL, it wasn’t easy to tell which fields were returned. In Summer ’16, we’ve introduced a new method on the SObject class that returns a map of populated field names and their corresponding values:

Account a = new Account();
a.name = 'TestMapAccount1';
insert a;
a = [select Id,Name from Account where id=:a.Id];
Map fieldsToValue = a.getPopulatedFieldsAsMap();

for (String fieldName : fieldsToValue.keySet()){
    System.debug('field name is ' + fieldName + ', value is '
    + fieldsToValue.get(fieldName));
}

Admittedly the example by Salesforce above isn’t amazing but if the SOQL was a dynamic SOQL I can see a lot of benefit in this

You can also perform without a SOQL

Account a = new Account();
a.name = 'TestMapAccount1';
insert a;

Map fieldsToValue = a.getPopulatedFieldsAsMap();
for (String fieldName : fieldsToValue.keySet()){
   System.debug('field name is ' + fieldName + ', value is ' +      
   fieldsToValue.get(fieldName));
}



EmailTemplate Functions


RenderEmailTemplateBodyResult Class

getMergedBody() Returns the rendered body text with merge field references replaced with the corresponding record data.



System.Messaging Class

renderEmailTemplate(whoId, whatId, bodies)
Returns an array of RenderEmailTemplateBodyResult objects, each of which corresponds to an element in the
supplied array of text bodies. Each RenderEmailTemplateBodyResult provides a success or failure indication
along with either an error code or the rendered text.

renderStoredEmailTemplate(templateId, whoId, whatId)
Renders a text, custom, HTML, or Visualforce email template that exists in the database into an instance of
Messaging.SingleEmailMessage.




$Resource Global Value Provider And Lightning


The $Resource global value provider lets you reference images, style sheets, and JavaScript code you’ve uploaded in static resources. Using $Resource lets you reference assets by name, without worrying about the gory details of URLs or file paths. You can use $Resource in Lightning components markup and within JavaScript controller and helper code. To reference a specific resource in component markup, use $Resource.resourceName within an expression. Include CSS style sheets or JavaScript libraries into a component using the tag. To obtain a reference to a static resource in JavaScript code, use $A.get('$Resource.resourceName').




Saturday, 21 May 2016

Get a Map of Populated SObject Fields

We’ve added a method on the Apex SObject class that makes it more efficient to iterate over fields that have been populated in memory. Previously, iterating over just the populated the fields of an SObject involved some complicated programming. For example, if you queried an SObject using SOQL, it wasn’t easy to tell which fields were returned. In Summer ’16, we’ve introduced a new method on the SObject class that returns a map of populated field names and their corresponding values:


      Account a = new Account();
      a.name = 'TestMapAccount1';
      insert a;
      a = [select Id,Name from Account where id=:a.Id];
      Map<String, Account> fieldsToValue = a.getPopulatedFieldsAsMap();

      for (String fieldName : fieldsToValue.keySet()){
         System.debug('field name is ' + fieldName + ', value is ' +          
         fieldsToValue.get(fieldName));
      }


Admittedly the example by Salesforce above isn’t amazing but if the SOQL was a dynamic SOQL I can see a lot of benefit in this
You can also perform without a SOQL
 ld names and their corresponding values:


      Account a = new Account();
      a.name = 'TestMapAccount1';
      insert a;
     
      Map<String, Account> fieldsToValue = a.getPopulatedFieldsAsMap();

      for (String fieldName : fieldsToValue.keySet()){
         System.debug('field name is ' + fieldName + ', value is ' +          
         fieldsToValue.get(fieldName));
      }