Explain about “Too Many SOQL Error: 101”


Error: System.LimitException: Too many SOQL queries: 101

Too many SOQL queries: 101




“System.LimitException: Too many SOQL queries: 101” errors occur when you exceed SOQL queries governor limit. Actuval limit is “you can run up to a total 100 SOQL queries in a single call or context”.




Ho to resolve this “Error: System.LimitException: Too many SOQL queries: 101”

  • Change your code by fallowing apex code best practices so that the number of SOQL fired is less than 100.
  • If you need to change the context, you can use @future annotation which will run the code asynchronously.

Apex runs on a multi-tenant platform, the apex run time engine strictly enforces limits to ensure code does not monopolize shared resources.

  • Avoid SOQL queries in for loops.
  • Fallow Apex code key principals while writing Triggers and bulk requests.

Reference for Apex code best practices: https://developer.salesforce.com/page/Apex_Code_Best_Practices






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