CONTENTS
This tutorial is targeted for Salesforce programmers beginning to learn Apex. This will bring you to an Intermediate level of expertise in Apex programming covering all the important aspects of Apex with complete hands-on code experience.
Apex OOPs Concepts
Object means a real world / run time entity such as marker, car, table, chair etc. Object-Oriented Programming is a methodology or way to design a program using classes and objects. It eases the software development and its maintenance by providing some beautiful concepts as followed.
- Classes
- Objects
- Encapsulation
- Polymorphism
- Inheritance
- Abstraction
Object
Any real world entity that has state and behavior is known as an object. For example: marker, book, table, chair, mouse, car etc.
Technically, we can say object is an instance of a class or in other words you can say it is an implementation of a class.
Class
Class is a concept or prototype or template i.e. it is a logical entity.
Technically, we can say that we create an individual object of a class.
Encapsulation
It is a binding of code and data together into a single unit known as encapsulation. For example, a capsule, it is wrapped with different types medicines into single unit.
An apex class is the example of encapsulation.
Polymorphism
One name many forms known as polymorphism. Real world example of polymorphism: A person at the same time can have different characteristic. Like a woman at the same time is a mother, a wife, an employee and a daughter etc.
In Apex, we use method overloading and method overriding to achieve polymorphism.
Inheritance
When one class acquires all the properties and behaviors of super/parent class it is known as inheritance. It provides code reusability as well as we can used to achieve runtime polymorphism.
Note: Without inheritance we cannot achieve runtime polymorphism.
Abstraction
Hiding internal complexity and showing functionality is known as abstraction. For example: Car Drive, we don’t know the internal processing.
In Apex, we use abstract class and interface to achieve abstraction.
What is Apex in Salesforce?
Apex is a programming language developed by Salesforce. It is a strongly typed, object-oriented programming language that allows developers to execute flow and transaction control statements on the Salesforce platform.
How Apex Works in Salesforce
Note : It’s a case insensitive language.
- Apex syntax looks mostly like a Java programming language.
- Apex allows developers to write business logic to the record save process.
- Apex has built in support for unit test creation and its execution.
Apex provided build in support for followings:
- Data Manipulation language(DML) calls to insert, update, and delete record.
- Inline SOSL or SOQL statements for retrieving records from sObjects.
- Looping control structures that help with bulky processing.
- A record locking syntax that prevents records being conflicts.
- Custom public API calls.
- Send and receive an email.
- Web services(REST/SOAP) request/response integrations.
- Warnings and errors to prevent sObjects referenced by Apex from being modified.
As a language apex is Integrated, Very easy to use, Data focused, Rigorous, Hosted, Multi-Tenant aware, automatically upgradable in nature, easy to test and versioned.
When developers write & save their code in a platform, which is compiled on force.com platform and stored in the form of metadata in Salesforce servers then end users can send requests from UI & retrieve results from Salesforce servers.
Below are few capabilities of Apex
When we can use Apex programming?
Apex should be used as a solution when:
- You need to write complex business logic to rows of data being saved by any means.
- You need to create additional web services API functionality for exposing logic either within Salesforce or to outside of Salesforce.
- You need to call out to an external Web service and process the results.
- You need to manage incoming or outgoing emails in ways more complex than the declarative functionality.
- Apex triggers execute no matter how the triggering data is being saved.
- Apex executes regardless of whether the action originates in the user interface, through AJAX toolkit, or from web services API.
- If you only want the code to execute through UI, consider making a visualforce page and controller.
Difference b/w traditional programming & Apex programming
Traditional code is fully flexible, and can tell the system to do anything as per the requirement.
Apex is a governed language, can only do what the system allows.
A variable is a container which holds the value while the Apex program is executed. Actually a variable is a name of memory location which internally hold a memory location that is why it assigned with a data type, so that we can tell to memory that what type of data this memory location is going to store in it as well as size of the allocated .
There are three types of variables in apex:
- local
- Instance
- Static
There are two types of data types in apex:
- Primitive
- Non-Primitive.
Variable in depth
Variable is name of reserved area allocated in memory i.e. RAM. In other words, we can say it is a name of memory location. Variable value can be changed.
Integer i = 100;
Types of Variables
There are three types of variables in apex:
o local variable
o instance variable
o static variable
- Local Variable
- Instance Variable
- Static variable
A variable declared inside the body/scope of the method is called local variable. You can use this variable only within that method or in other words you can say scope of that method only and the other methods in the class are not even aware that the variable exists.
Note : A local variable never be defined with “static” keyword.
A variable declared inside the class but outside the body/scope of the method, is called instance variable. It is also not declared as static.
It is called instance variable because its value is instance specific and is not shared among instances.
A variable which is declared as static is known static variable. It cannot be defined as local. It creates a single copy of static variable and share among all the instances of the same class. Memory allocation for static variable happens only once when the class is loaded into the memory.
Types of variables in apex with example for better understanding
public class VariableDemo { integer i=100; //instance variable static integer j =200; //static variable void fun(){ integer k=300;//local variable } // end of method } //end of class scope
Apex Variable Example: Adding Two Numbers:
public class Addition { public void doAdd() { integer a = 10; integer b = 20; integer res = a+b; System.debug(res); // this statement is used to print on console } }
Output:
30
Data types are used to specify the different sizes and values that can be stored in a variable.
Apex supports the following data types −
- Primitive (Integer, Double, Long, Date, Datetime, String, ID, or Boolean)
- Enums
- sObject
- Classes and Interfaces
- Collections (Lists, Sets and Maps)
Apex Primitive Data Types
Here, we will discuss the Apex Primitive Data Types supported by Apex.
Boolean & Character Data Types
Boolean: This variable can either be false, true or null. In programming many times, this type of variable can be used as flag to identify if the particular condition is set or not set.
Apex Code Example:
Boolean b = false;
String: String is basically sequence of char values within single quotes. It does not have any limit for the number of characters. Here, the heap size will be used to determine the number of characters in Apex programming.
Apex Code Example:
String str = ‘Welcome to Salesforcedrillers.com’
Numerical Data types without Decimal points (i.e., whole numbers)
Integer: It is a 32-bit number without any decimal value . The value range for this data type starts from -2,147,483,648 and the maximum value go up to 2,147,483,647.
Apex Code Example:
Integer i = 5;
Long: This is a 64-bit number without any decimal point. This is used when we need a range of values wider than integer.
Apex Code Example:
Long l = 50;
Numerical Data types with Decimal points (i.e., fractional numbers)
Decimal: A number that includes a decimal point. Decimal is an arbitrary precision number. In Apex Programming, Currency fields are automatically assigned the type Decimal.
And also Decimal has lot of built-in methods and rounding options.
Apex Code Example:
Decimal dec = 12.34
Double: This is a 64-bit number with a decimal point. This is used when we need a range of values wider than decimal.
Apex Code Example:
Double dbl = 5.1234
Apex Specific Data Types
ID:A valid 18-alphanumeric character force.com record identifier.
Apex Code Example:
ID i = ‘b022w00000EKkeNBBO’
Note: If you set ID as 15-character value, Apex converts the value to its 18-character representation. All invalid ID values are rejected at runtime with runtime exception.
Blob: Blob is basically used to store files(e.g., images, emails, documents)
Date: This data type indicates a date. This can only store the date and not the time. For saving the date along with time, we will need to store it in data type of DateTime.
Apex Code Example:
Date dt = date.today();
Datetime: This data type indicates a date with time. This can store the date with time.
Apex Code Example:
DataTime currentDT = DateTime.now();
Time: This data type indicates a time. This can store only the time.
Apex Code Example:
Time currentT = DateTime.now().time();
Note:
- Null is actually the absence of value so please do not be confused with an empty string or a zero which represents the actual values.
How does all this relate to Salesforce Field Types?
We can equate the Apex data types of field types in Salesforce as follows:
Salesforce Field Type | Apex Data Type |
Auto-Number | String |
Checkbox | Boolean |
Currency | By default assign as Decimal |
Date | Date |
Number | Integer or Double, depending on if you set the decimal place to zeroor more then zero when you create the field. |
Percentage | By default assign as Decimal |
Phone | String |
Text, Text(Encrypted), Text Area, Text Area(Long), Text Area(Rich) | String |
URL | String |
Enum
Enum is an abstract data type that is used to stores one value of a finite set of specified identifiers. You can use Enum keyword to define an Enum. Enum can be used as any other data type in Apex Programming Language.
Example of Enum :
public enum Season { SUMMER, WINTER, SPRING, FALL}
sObject
This is a special data type in Salesforce. It is very similar to a table in SQL and contains fields which are similar to columns in SQL. Sobjects are types of either standard or custom objects that stores record data in the force.com database.
For example, Account is a standard sObject and any other user-defined object (like Merchandise object that we created) is a Custom sObject.
Note: Developers refers to SObject and their fields by their API names into the program.
Apex Code Example:
// Declaring a sObject variable of type Standard Object – Account Account act = new Accont(); act.name = ‘SalesforceDrillers’; act.description = ‘Best site for learning new technologies’; System.debug(‘act variable value is = ’ + act); // Declaring a sObject variable of type Custom Object – Merchandise__c Merchandise__c mer = new Merchandise__c(); mer.name = ‘Jeans’; mer.description__c = ‘For Kids’; System.debug(‘mer variable value is = ’ + mer);
Apex Keywords
Apex keywords are also known as reserved words. Keywords are particular words which act as a key to a code. These are predefined words by Apex so it cannot be used as a variable or object name as per requirements.
- Class: This keyword is used to define/declare a class.
- Abstract: This keyword is used to define/declare a abstract class. An abstract class that contains abstract methods and non-abstract methods.
- Virtual: This keyword defines/declare a class or method that allows extension and overrides. We can’t override a method with the override keyword unless the class or method has been defined as virtual which means if a class is virtual then only that class allows extension and if method is virtual then allows overrides in sub class.
- Extends: Defines a class that extends another class, which means a child class can extends a parent class using extends keywords.
- Interface: Apex interface keyword is used to declare an interface. It can have only abstract methods. A class always implements an interface and an interface always extends another interface. Java implements keyword is used to implement an interface.
- Implements: Apex implements keyword is used to implement an interface.
- Static: This keyword defines a method/variable that is only initialized once at a class level, and it is associated with an (outer) class. We can call static variables/methods by class name directly. No need of creating instance of a class.
- Final: This keyword is used to define constants and methods that can’t be overridden within the child class.
- This: This keyword represents the current instance of a class , in constructor chaining.
- Super: This keyword invokes a constructor on a superclass.
- Return: This keyword returns a value from a method.
- Transient: This keyword declares instance variables that cannot be saved, and should not be transmitted as part of the view state in the visualforce controllers and extensions.
- Null: This keyword defines a null constant that can be assigned to any variable so that it removes the garbage value.
- Public: Apex public keyword is an access modifier. It is used to indicate that an item is accessible anywhere with the Salesforce environment.
- Global: Apex global keyword is an access modifier. It is used to indicate that the item is accessible anywhere. Which means within the Salesforce or outside the salesforce too, It has the widest scope among all other modifiers in Apex.
- With sharing & Without sharing keywords
With sharing Keyword: This keyword enforces the sharing rules of the org that apply to the current user. We usually called it user mode also.
Without sharing keyword: Ensures that the sharing rules of the org are not going to apply on current user. We usually called it system mode also.
Apex If-else
Apex If-else Statement
The Apex if statement is used to test the condition. It always checks boolean condition: true or false. There are various ways of if statement in Apex.
Here, we are going to study the basic and advanced structure of decision-making and conditional statements in Apex. Decision-making is necessary to control the flow of execution when certain condition is met or not. Following diagram depicts the general form of a typical decision-making structure found in most of the programming languages
- if statement
- if-else statement
- if-else-if ladder
- nested if statement
o An if statement consists of a Boolean expression followed by one or more statements as per requirements.
o An if statement can be followed by an optional else statement, which executes whenever specified Boolean expression is false.
o An if statement can be followed by an optional else if as well as else statement, which is very useful to test multiple conditions using single if..else if statement..
o You can use one if or else if statement inside another if or else if statement(s) as per your requirements.
Loops in Apex
In Apex programming languages, loops are used to execute a set/piece of code repeatedly with the desired number of iteration till condition is true. There are basically three types of loops in Apex.
- for loop
- while loop
- do-while loop
For loop in depth: The Apex for loop is used to iterate a piece of the program several times, till then condition is satisfied. If the number of iteration is fixed, it is advisable to use for loop.
Apex Simple For Loop
A simple for loop is the same as C/C++/Java. We can initialize the variable, check condition and then increment/decrement value. It consists of 4 parts:
- Initialization: It is the initiation of condition which is executed once when the loop get started. We can initialize the variable, or we can use an already initialized this variable. It is completely optional condition within the for loop.
- Condition: It is the second condition which is executed each and every time to evaluate the condition of the loop. It continues execution till the condition is true. It must return Boolean value either true or false. It is again an optional condition.
- Statement: The statement of the loop is executed each and every time until the second condition is false.
- Increment/Decrement: It increments/decrements of the variable value. It is an optional condition.
Syntax of for loop:
for (initialization;condition;increment/decrement) { //statement or code to be executed }
Flow of for loop:
Example:
//Apex Program to demonstrate the example of for loop //which prints table of 2 public class ForLoopDemo { public void printForLoop() { for(integer i=1;i<=10;i++) { System.debug(i*2); } } }
Apex While Loop
The Apex while loop is used to iterate a piece of the program several times, till condition is true. If the number of iteration is not fixed, it is advisable to use while loop.
Syntax of While loop:
while(condition){ //code to be executed }
Example of While loop:
public class WhileDemo { public void getcount() { integer i=1; while(i<=10){ System.debug(i); i++; } } }
Java Infinitive While Loop
If you pass true in the while loop, it will become infinitive while loop.
Syntax infinitive while loop:
while(true){ //code to be executed }
Example of infinitive while loop:
public class WhileInfinitiveDemo { public void printInfinitiveValue() { while(true){ System.debug('infinitive while loop'); } } }
Apex do-while Loop
The Apex do-while loop is used to iterate a piece of the program several times. If the number of iteration is not fixed and you must have to execute the loop at least once in a life of loop, it is advisable to use do-while loop.
The Apex do-while loop is executed at least once because condition is checked after loop body in Apex do-while loop.
Syntax of do-while loop:
do{ //code to be executed }while(condition);
Flow of do-while loop:
Example of Do-while loop:
public class DoWhileDemo { public void printValue() { integer i=1; do{ System.debug(i); i++; }while(i<=10); } }
Apex Comments
The Apex comments are the statements that are not executed by the Apex compiler. The comments can be used to provide additional information about the variable, method, class or any other statement.
Types of Apex Comments
There are two types of comments in Apex.
- Single Line Comment
- Multi Line Comment
- Apex Single Line Comment
- Java Multi Line Comment
The single line comment is used to comment one line at a time.
Syntax of single line comment:
// this is single line comment in code
Example of Single line comment:
Public class SingleLineCommentDemo { Integer i = 100; // initialized i variable with 100 value public void getValue() { System.debug(i); } }
The multi line comment is used to comment multiple lines of code in a single go.
Syntax:
/* This is multi line comments in Apex */
Example of Multi line comment:
Public class MultiLineCommentDemo { /* initialized i variable with 100 value as well as we are showing its value too using debug statement */ Integer i = 100; public void getValue() { System.debug(i); } }