Explain about Asynchronous Apex in Salesforce?

Asynchronous Apex Salesforce

Asynchronous Apex

Asynchronous Apex is used to run process in a separate thread at later time. It is process or function that executes a task “in the back ground” without the user having to wait for the task to finish.

We can typically use asynchronous process for callouts to external systems, operations that require higher limits, and code that needs to run at a certain time.

Benefits of Asynchronous process are User efficiency, Scalability and higher limits.

There different ways to implement Asynchronous process in Apex.

  1. Future methods
  2. Batch Apex
  3. Queueable Apex
  4. Scheduled Apex

To know more about Asynchronous Process refer this URL: https://trailhead.salesforce.com/trails/force_com_dev_intermediate/modules/asynchronous_apex/units/async_apex_introduction

What is Platform Cache in Salesforce?

Platform Cache – Salesforce

What is a Cache? Cache is a temporary storage for frequently accessed data from a database

What is Platform Cache? It is a memory layer that stores Salesforce session and org data for later access. When you use Platform Cache, your applications can run faster because they store reusable data in memory. Applications can quickly access this data; they don’t need to duplicate calculations and requests to the database on subsequent transactions. In short, think of Platform Cache as RAM for your cloud application.

Types of Platform Cache:

  1. Org Cache: Org Cache stores org-wide data that anyone in the org can use. Org Cache is accessible across sessions, requests, and org users and profiles.
  2. Session Cache: Session Cache stores data for an individual user and is tied to that user’s session. The maximum life of a session is 8 hours.

What is Cache Partition? Cache partition allows you to allocate space to balance usage and performance across apps. Caching data to designated partitions ensures that the cache space isn’t overwritten by other apps or by less critical data. Before you can use cache space in your org, you must create partitions to define how much capacity you want for your apps. Each partition capacity is broken down between org cache and session cache.

Cache allocation by edition: Platform Cache is available to customers with Enterprise Edition orgs and above.

Enterprise Edition – 10 MB by default, Unlimited Edition – 30 MB by default, Performance Edition – 30 MB by default.

Future method in salesforce – @future

Explain about future method in salesforce?

Future method in salesforce: Future methods are used to run the process in a separate thread, at later time when system resources are available. We can use future methods for any operation we would like to run asynchronously in its own thread.

Future methods provide the benefits of not blocking the users from performing other operations and providing higher governor and execution limits for the processes.

Future method syntax:

  • Use @future annotation before method declaration.
  • Future methods must be static methods, and can only return a void type.
  • The specified parameters must be primitive data types, arrays of primitive data types, or collections of primitive data types.
  • Future methods can’t take standard or custom objects as arguments.
  • A common pattern is to pass the method a list of record IDs that you want to process asynchronously.

global class YourClassName {

  @future

  public static void yourFutureMethodName(List<Id> recordIds) {

    List<Account> acc = [Select Id, Name from Account Where Id IN :recordIds];

    // process account records to do awesome stuff

  }

}

Best practices to implement future methods:

  • Ensure that future method execute as fast as possible.
  • If using webservice callouts, try to bundle all callouts together from same future method, rather than using a separate future method for each callout.
  • Conduct thorough testing at scale. Test that a trigger enqueuing the @future calls is able to handle a trigger collection of 200 records. This helps determine if delays may occur given the design at current and future volumes.

 Consider using Batch Apex instead of future methods to process large number of records asynchronously. This is more efficient than creating a future request for each record.

To know more,  refer below Salesforce Trailhead URL.

https://trailhead.salesforce.com/trails/force_com_dev_intermediate/modules/asynchronous_apex/units/async_apex_future_methods

How to access metadata from APEX?

How to access metadata from APEX? – Summer’17 release feature

Access Metadata from Apex, What is metadata in salesforce? In Salesforce, if you create object, field, class, page, trigger and any other component type which represents org configuration and customization will be stored in the form of metadata. We can access this metadata by using Metadata API. With Summer’17 Salesforce release, we can use classes in the metadata name space to access metadata components from Apex Code.

As per the salesforce release notes documentation, Access metadata from your Apex code to handle below tasks.

Customizing app installs or upgrades: During or after an install (or upgrade), your app can create or update metadata to let users configure your app.

Customizing apps after installation: After your app is installed, you can use metadata in Apex to let admins configure your app using the UI that your app provides rather than having admins manually use the standard Salesforce setup UI.

Securely accessing protected metadata: Update metadata that your app uses internally without exposing these types and components to your users.

Creating custom configuration tools: Use metadata in Apex to provide custom tools for admins to customize apps and packages.

This feature (Metadata access in apex) is currently limited to custom metadata records and page layouts. We can retrieve, create or update custom metadata but we cannot delete metadata through Apex.

– Use Metadata.Operations class to retrieve and deploy metadata.

– Use the Metadata.Operations.retrieve() method to synchronously retrieve metadata from the current org.

-Use the Metadata.Operations.enqueueDeployment() method to asynchronously deploy metadata to the current org.

Refer Salesforce Apex developer guide to know how to use this feature.

Salesforce integration testing – WebServiceMock interface

Salesforce integration testing – WebServiceMock interface

Salesforce integration testing: Generating web service class and how to use those web service classes was explained in my previous post. Here I am going to explain about how to write test class for web services class generated WSDL2Apex.

Every Salesforce developer know about importance of test classes. At least 75% code coverage is required to deploy code to production. Test coverage includes classes generated by WSDL2Apex.

As a Salesforce developer, to write test classes for web service you should spend some time as test methods do not support web service callouts. Apex provides inbuild interface “WebServiceMock” and the “Test.setMock” method. Developers can use this interface to receive fake response in a test method.

What is WebServiceMock interface?

WebServiceMock interface enables sending fake response when testing web service callouts of a class auto-generated from WSDL.

doInvoke is the method of this interface.

doInvoke(stub, soapRequest, responseMap, endpoint, soapAction, requestName, responseNameSpace, responseName, responseType)

The implementation of this method is called by the Apex Runtime to send a fake response when a service callout is made after Test.setMock has been called.

You can refer below Salesforce documentation to know more about this interface.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_interface_webservicemock.htm

SOAP web service – Creating a class from WSDL

SOAP web service – How to creating a class from WSDL document?

SOAP web service class can be generated automatically by using WSDL document. Generating WSDL document allows Salesforce developers to make callouts to the external web service in their Apex code.

Follow below steps to generate apex class from a WSDL:

1.Go to Apex Classes form setup menu.
2.Click “Generate from WSDL” button.

SOAP Web Service 1
3.Select WSDL document(XML file) you are using to generate apex class by clikcing choose file lookup button. This WSDL document is base to generate apex class.

SOAP Web Service 2Here I selected Test-SOAP webservice WSDL file which is rounded by red color line in the above image. You can select WSDL by clicking on choose File button.

4.Click Parse WSDL button which is highleted in the above image to verify WSDL document contents. It generates default class name based on WSDL document. It report errors in case of the WSDL contains schema types or constructs that aren’t supported by Apex classes, or if the resulting classes exceed the 1-million-character limit on Apex classes. For example, the Salesforce SOAP API.

SOAP Web Service 3You can rename the class. And click on Generate Apex button. The final page of the wizard shows which classes were successfully generated, along with any errors from other classes. The page also provides a link to view successfully generated code.

Generated Apex classes include stub and type classes for calling the third-party Web service represented by the WSDL document. These classes allow you to call the external Web service from Apex.

When you generate Apex classes by using WSDL, it generated 2 classes, one is with given name for synchronus callouts and other is prefixed with Async for asynchronus callouts.

SOAP Web Service 4

Refere here to know more about SOAP callouts: https://trailhead.salesforce.com/modules/apex_integration_services/units/apex_integration_soap_callouts

Salesforce Integration – SOAP API basics

SOAP API basics

SOAP API (Simple Object Access Protocol API) can be used to create, retrieve, delete, update records. We can use SOAP API in any language that supports web services.

We can create, update, delete, retrieve records in force.com from any external system that supports SOAP based web services by using force.com SOAP API (like Java, .net etc.…) with more than 20 different calls.

SOAP-API also allows you to maintain passwords, perform searches, retrieve metadata.

Salesforce provides two different SOAP API WSDLs (WSDL: Web service description language).

     1. Enterprise WSDL

     2. Partner WSDL

What is WSDL?

WSDL (Web service description language) is an XML document which contains a standardized description on how to communicate using a web service.

What is Enterprise WSDL?

Enterprise WSDL is a strongly typed WSDL for customers who want to build an integration with their Salesforce organization.  It is intended primarily for customers.

What is partner WSDL?

Partner WSDL is a loosely typed WSDL for customers and partners who are building client applications for multiple originations. This WSDL can be used to access data within any organization. It I intended primarily for partners.

How to download WSDL file?

Click Setup -> Customize -> Develop -> API
Click the link to download the appropriate WSDL.
and Save the file locally, giving the file a “.wsdl” extension.

What are the different types of Salesforce APIs?

Different types of Salesforce APIs

Salesforce APIs: Below are the different types of Salesforce APIs available.

REST API: This is useful to access objects in your Salesforce organization using REST.

SOAP API: This API is useful to integrate your Salesforce organization data with other application using SOAP.

Bulk API: This API is useful to work with large number of records (Load or delete large number of records).

METADATA API: This API is useful to manage build tools and manage customizations.

Streaming API: This API provides a stream of data reflecting data changes in your Salesforce organization.

Tooling API: This API is useful to build custom development tools for force.com applications.

Chatter REST API: This API is useful access chatter feeds and social data using REST.

Wave Analytics REST API: We can access Wave analytics data sets programmatically by using this API.

Apex REST API: This API is useful build your own REST API in APEX. This API exposes Apex Classes as RESTful web services.

Apex SOAP API: This API is useful to create custom SOAP web service. This API exposes Apex Classes as SOAP web service.

Salesforce Integration– Apex REST API basics

REST API or Representational state transfer(REST) or RESTful web service basics

As per previous post REST API is based on HTTP callouts. Force.com platform provides multiple built in classes to work with HTTP services and create services like GET, POST, PUT and delete.

Note: HTTP classes also useful to integrate SOAP based services as an alternate option to generate code from WSDL.

Below are the pre-defined HTTP classes.

HTTP Class: This class is useful to initiate HTTP request & Response.

HttpRequest Class: This class supports Request types like GET, POST, PUT, DELETE, TRACE, CONNECT, HEAD, OPTIONS. Supports Request headers, redirects, read and connection timeouts and Content of the message body.

HttpResponse Class: This class is useful to handle the HTTP response returned by HTTP like HTTP status code, Response headers and content of the response body.

Example/Sample Class to understand basic of HTTP callouts:

public class HttpCalloutExampleClass {
// Pass in the endpoint to be used using the string url
public String getCalloutResponseContents(String url) {
// Instantiate a new http object
Http ht = new Http();
/* Instantiate a new HTTP request, specify the method (GET) as well as the endpoint */
HttpRequest req = new HttpRequest();
req.setEndpoint(url);
req.setMethod(‘GET’);
// Send the request, and return a response
HttpResponse res = ht.send(req);
return res.getBody();
}
}

Salesforce Integration – Introduction

Salesforce Integration/Apex Integration

Salesforce Integration/Apex Integration Introduction

Apex Callout: A callout makes a call to external web service or sends HTTP request to from Apex Code, and then receives the response.

An Apex callout helps you to integrate Apex code with an external web service.

Below are the two types Apex Callouts: 

SOAP: Web service callout to SOAP web service use XML. This require a WSDL document for code generation.

REST: HTTP callouts to services typically use REST with JSON.

Both SOAP & REST callouts are similar in terms of sending a request to a service and receiving a response. WSDL-based callouts apply to SOAP Web services, HTTP callouts can be used with any HTTP service, either SOAP or REST.

Remote site administration and security: Register you external site in salesforce remote site settings before callout can call external site, otherwise callouts will fail. Salesforce prevents calls to unauthorized network addresses.

How to add remote site setting?

To add remote site setting go to setup -> remote site setting Click New remote Site Setting enter remote site setting name and URL click on save.

Salesforce Integration

Remote Site Setting 1