APEX Introduction
It is Object oriented programming language that is used to provide custom code to create business logic and database operation.
Key Points
-
Similar to Java and C#
-
Runs on Salesforce server (cloud)
-
Used for automation, validation, integration
APEX is also used to create salesforce triggers that will work automatically , before and after database operation(Insert, Update, Delete).
Apex provide SOQL and SOSL to manage database operation.
2. Apex Syntax and Data Types
Primitive Data Types
-
Integer
-
Double
-
Boolean
-
String
-
Date
-
Datetime
Integer num = 10;
String name = 'Shiva';
Boolean isActive = true;
Date today = Date.today();
Operator in APEX:
In Apex, operators are symbols used to perform operations on variables and values. They are similar to operators in Java because Apex syntax is based on Java.
1. Arithmetic Operators
Used for mathematical calculations.
Operator Description Example
+ Addition a + b
- Subtraction a - b
* Multiplication a * b
/ Division a / b
% Modulus (remainder) a % b
2. Relational (Comparison) Operators
Used to compare two values. They return true or false.
Operator Meaning
== Equal to
!= Not equal to
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal
Example
Integer a = 10;
Integer b = 5;
System.debug(a > b); // true
System.debug(a == b); // false
3. Logical Operators
Used to combine multiple conditions.
Operator Meaning
&& AND
`
! NOT
Example
Integer age = 20;
if(age > 18 && age < 60){
System.debug('Eligible');
}
4. Assignment Operators
Used to assign values.
Operator Example
= a = 10
+= a += 5
-= a -= 3
*= a *= 2
/= a /= 2
Example
Integer a = 10;
a += 5; // a = 15
5. Conditional (Ternary) Operator
Short form of if-else.
Syntax
condition ? value_if_true : value_if_false;
Example
Integer marks = 40;
String result = (marks >= 35) ? 'Pass' : 'Fail';
System.debug(result);
6. InstanceOf Operator
Used to check object type.
Example
Object obj = 'Hello';
if(obj instanceof String){
System.debug('It is a String');
}
Conditional Statement in APEX:
1. If–Else in Apex
if-else is used when you want to execute code based on a condition.
Syntax
if(condition){
// code if condition is true
}
else{
// code if condition is false
}
Example
Integer marks = 70;
if(marks >= 35){
System.debug('Student Passed');
}
else{
System.debug('Student Failed');
}
Multiple Conditions (Else If)
Integer marks = 85;
if(marks >= 75){
System.debug('Grade A');
}
else if(marks >= 60){
System.debug('Grade B');
}
else{
System.debug('Grade C');
}
2. Switch–Case in Apex
switch is used when you have multiple possible values of one variable.
⚠️ Available in newer versions of Apex.
Syntax
switch on variable {
when value1 {
// code
}
when value2 {
// code
}
when else {
// default code
}
}
Example
String day = 'Monday';
switch on day {
when 'Monday' {
System.debug('Start of week');
}
when 'Friday' {
System.debug('Weekend coming');
}
when else {
System.debug('Normal day');
}
}
3. Switch with Multiple Values
Integer number = 2;
switch on number {
when 1,2,3 {
System.debug('Small number');
}
when 4,5 {
System.debug('Medium number');
}
when else {
System.debug('Large number');
}
}
Loop in APEX:
loops are used to execute a block of code repeatedly until a condition is met. They are very similar to loops in Java.
Apex mainly supports 4 types of loops.
1. For Loop
Used when the number of iterations is known.
Syntax
for(initialization; condition; increment/decrement){
// code
}
Example
for(Integer i = 1; i <= 5; i++){
System.debug('Number: ' + i);
}
Output:
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
2. While Loop
Runs as long as the condition is true.
Syntax
while(condition){
// code
}
Example
Integer i = 1;
while(i <= 5){
System.debug('Value: ' + i);
i++;
}
3. Do-While Loop
Executes at least once, then checks the condition.
Syntax
do{
// code
}
while(condition);
Example
Integer i = 1;
do{
System.debug('Count: ' + i);
i++;
}
while(i <= 5);
4. For-Each Loop (Used with Collections)
Used to loop through lists or sets.
Example
List<String> names = new List<String>{'Ram','Shyam','Mohan'};
for(String name : names){
System.debug(name);
}
📘 Apex Arrays & Collections – Complete Tutorial
1. Introduction
In Apex, data structures are very important because Salesforce apps often deal with records, lists, and sets of data. Apex provides Collections to store and manipulate groups of values or objects.
👉 Collections in Apex:
-
List (like an Array in Java/C#)
-
Set
-
Map
⚡ Note: Unlike Java/C#, there is no fixed-length array in Apex. Instead, List<T> is used as a dynamic array.
2. Arrays in Apex (List<T>)
What is an Array?
An Array (or List) is an ordered collection of elements, indexed starting at 0. You can store primitive types (Integer, String, Boolean), sObjects (Account, Contact, etc.), or custom objects inside it.
Syntax:
Example with Integers:
Output
Shortcut Declaration:
Important Methods in List:
| Method | Description | Example |
|---|---|---|
add(value) | Add element | list.add(50); |
add(index,value) | Insert at position | list.add(1,100); |
get(index) | Get element | list.get(0); |
set(index,value) | Replace element | list.set(1,200); |
size() | Number of elements | list.size(); |
isEmpty() | Checks if empty | list.isEmpty(); |
remove(index) | Remove element | list.remove(0); |
clear() | Remove all | list.clear(); |
contains(value) | Check existence | list.contains('Mango'); |
clone() | Copy list | List<String> copy = fruits.clone(); |
List of sObjects Example:
3. Set in Apex
What is Set?
-
Unordered collection of unique elements.
-
Prevents duplicates.
-
Useful in scenarios like removing duplicate IDs, filtering data, etc.
Example:
Important Methods:
-
add(value) -
addAll(list/set) -
remove(value) -
contains(value) -
size() -
isEmpty() -
clear()
4. Map in Apex
What is Map?
-
A key-value pair collection.
-
Keys are unique, values can be duplicate.
-
Think of it like a dictionary in Python or HashMap in Java.
Example:
Map with sObjects:
5. Real-Time Example (Mixing Collections)
👉 Scenario: You want to fetch all Contacts of Accounts and organize them.
SOQL means salesforce Object Query Language and SOSL means salesforce object search language,
APEX language syntax is similar to Java programming language, it will compile and execute code using Apex cloud compiler.
Salesforce provide developer option to create APEX class and execute option to execute APEX Code.
Syntax of Apex
public class Classname{
public static retuntype Methodname() {
}
public retuntype Methodname() {
}
}
Execute Apex code:-
Classname ref = new Classname();
ref.methodname();
Static method means it will store data under class memory that's why it would be call by Classname.
Instance Method means dynamic, it will store data under external memory space that's why first we create memory space using object after that we can call method.
to create dynamic memory space, we will create object.
Classname ref = new Classname(); // it is the syntax object.
ref means address of object, new means memory allocation and Classname() is the constructor that is used to create the memory space.
Now I am creating sample program to differentiate static and dynamic
public class Hello {
public static void DisplayHello()
{
System.debug('hello world');
}
public void DisplayHello1()
{
System.debug('welcome in salesforce');
}
}
Press Ctrl + e to open execute window and write followings code.
Hello.DisplayHello();
Hello obj = new Hello();
obj.DisplayHello1();
Now i am creating another program to perform addition and subtraction in APEX class, where addition method is static and subtraction method is dynamic.
Solution:-
public class Operation {
static integer a,b,c;
integer x,y,z;
public static void add()
{
a=100;
b=200;
c=a+b;
System.debug('result is '+c);
}
public void sub()
{
x=100;
y=200;
z=x-y;
System.debug('result is '+z);
}
}
Execute this program:-
Operation.add();
Operation obj = new Operation();
obj.sub();
Assignment:-
1) Manage Employee Information with empid, empname, job, salary, joingdate, experience, dateofbirth with respective data type.
public class Employee {
private integer empid;
private string empname;
private string job;
private integer salary;
private double experience;
private date dob;
private date joiningdate;
public void Accept(integer empid,string empname,string job,integer salary,double experience,date dob,date joiningdate)
{
this.empid=empid;
this.empname=empname;
this.job=job;
this.salary=salary;
this.experience=experience;
this.dob=dob;
this.joiningdate=joiningdate;
}
public void Display()
{
System.debug('empid is '+empid + ' name is '+empname + ' job is '+job + 'salary is '+salary + 'experience is '+experience + ' dob is '+dob + ' Joining date is '+ joiningdate);
}
}
How to call it:-
Employee obj = new Employee();
obj.Accept(1001,'emp1','cleark',45000,2.5d,date.valueOf('1992-12-12'),date.valueOf('1992-12-12'));
obj.Display();
2) Calculate Simple Interest using APEX Class
3) WAP to swap two different numbers?
SOSL Query:
🔹 1️⃣ Search by Exact Keyword in All Fields
🔍 Searches for the word “Lucknow” anywhere in all searchable fields of Branch__c.
🔹 2️⃣ Search by Prefix (Wildcard at End)
🔍 Finds all Accounts whose Name starts with “Acc” (like “Accenture”, “AccountPro”).
🔹 3️⃣ Search by Suffix (Wildcard at Start)
🔍 Finds records ending with “tech” (like “Innotech”, “Hightech”).
🔹 4️⃣ Search by Exact Phrase
🔍 Finds Contacts whose Title or other text fields contain the exact phrase “Sales Manager”.
🔹 5️⃣ Search Using Logical Operators
🔍 Returns all employees who have either “Developer” or “Tester” in searchable fields.
🔹 6️⃣ Search Across Multiple Objects
🔍 Searches Delhi in Branch__c, Account, and Contact — all at once.
🔹 7️⃣ Limit and Order Results
🔍 Returns top 5 matching courses and top 3 students.
🔹 8️⃣ Use SOSL with Apex Variable (Bind Variable)
🔍 Uses a dynamic variable searchKey in Apex.
🔹 9️⃣ Use Wildcard to Return “All” Records with Text
🔍 Returns all Branch__c records that contain any text in searchable fields.
🔹 🔟 Use FIND with Specific Field Scope
🔍 Searches only email fields for the given email address.
🧩 Bonus — Combined Example in Apex
Salesforce SOQL — In-Depth Guide With Real Examples
SOQL (Salesforce Object Query Language) ka use Salesforce database se records retrieve karne ke liye hota hai.
Ye SQL jaisa hota hai but Salesforce Objects pe kaam karta hai.
Example:
SELECT Id, Name FROM Account
1. Basic SOQL Query
List<Account> accList = [SELECT Id, Name FROM Account];
for(Account acc : accList){
System.debug(acc.Name);
}
Use Case:
- Account records fetch karna
- Data display karna
2. WHERE Clause Example
List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name = 'Shiva Tech'];
Multiple Condition:
List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name = 'Shiva Tech'
AND Industry = 'IT'];
3. LIMIT Example
List<Account> accList =
[SELECT Id, Name
FROM Account
LIMIT 5];
Use Case:
- Top records fetch karna
- Performance improve karna
4. ORDER BY Example
List<Account> accList =
[SELECT Id, Name
FROM Account
ORDER BY Name ASC];
Descending:
ORDER BY Name DESC
5. LIKE Operator Example
List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Name LIKE 'Shiva%'];
Use Case:
- Search functionality
6. IN Operator Example
List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE Industry IN ('IT','Banking')];
7. Aggregate Query Example
Count:
Integer total =
[SELECT COUNT() FROM Account];
Sum Example:
AggregateResult[] result =
[SELECT SUM(AnnualRevenue) total
FROM Account];
System.debug(result[0].get('total'));
8. Parent to Child Relationship Query
Account → Contact
List<Account> accList =
[SELECT Id, Name,
(SELECT Id, Name FROM Contacts)
FROM Account];
for(Account acc : accList){
for(Contact con : acc.Contacts){
System.debug(con.Name);
}
}
Use Case:
- Account ke contacts fetch karna
9. Child to Parent Relationship Query
Contact → Account
List<Contact> conList =
[SELECT Id, Name, Account.Name
FROM Contact];
for(Contact con : conList){
System.debug(con.Account.Name);
}
Use Case:
- Contact ka Account fetch karna
10. Dynamic SOQL Example
String query = 'SELECT Id, Name FROM Account';
List<Account> accList = Database.query(query);
Dynamic WHERE:
String name = 'Shiva';
String query =
'SELECT Id, Name FROM Account WHERE Name = :name';
List<Account> accList = Database.query(query);
11. SOQL in Loop
for(Account acc : accList){
List<Contact> con =
[SELECT Id FROM Contact
WHERE AccountId = :acc.Id];
}
This causes Governor Limit Issue
Correct Approach
Set<Id> accIds = new Set<Id>();
for(Account acc : accList){
accIds.add(acc.Id);
}
List<Contact> conList =
[SELECT Id, AccountId
FROM Contact
WHERE AccountId IN :accIds];
12. Real Time Example — Search Account
public class AccountController{
public static List<Account> searchAccount(String name){
return [SELECT Id, Name, Industry
FROM Account
WHERE Name LIKE :('%'+name+'%')];
}
}
13. SOQL With Date Example
List<Account> accList =
[SELECT Id, Name
FROM Account
WHERE CreatedDate = TODAY];
Other Date Filters:
- TODAY
- YESTERDAY
- LAST_WEEK
- LAST_MONTH
14. SOQL Governor Limits (Important 🚨)
| Limit | Value |
|---|---|
| SOQL Queries | 100 |
| Records Returned | 50,000 |
| Query Rows | 50,000 |
15. Best Practices
✅ Avoid SOQL inside loop
✅ Use selective fields
✅ Use LIMIT
✅ Use Relationship Queries
✅ Bulkify queries
Interview Questions
Q1: Difference between SOQL & SOSL
SOQL
→ One Object Query
SOSL
→ Multiple Object Search
Q2: Why avoid SOQL in loop?
Because:
- Governor limit exceed
- Performance issue
Real Project Example
Lead Assignment
List<Lead> leadList =
[SELECT Id, Name, Status
FROM Lead
WHERE Status = 'Open'];
for(Lead l : leadList){
l.Status = 'Working';
}
update leadList;
🧠
Quick Summary of Common Scopes
| Scope | Description |
|---|---|
IN ALL FIELDS | Searches all searchable fields |
IN NAME FIELDS | Only in name-type fields (Account.Name, Contact.Name) |
IN EMAIL FIELDS | Only email fields |
IN PHONE FIELDS | Only phone fields |
IN SIDEBAR FIELDS | Same as global search scope |
Read about What is Salesforce?
0 Comments
POST Answer of Questions and ASK to Doubt