Difference between WhoID and WhatID

Refers to object.
Example: Account, Opportunity, Custom Objects.

Refers to people.
Example: Lead, Contact.

Roll up Summary field

Roll up Summary field is a read only field that displays

1. Count
2. Sum
3. Min
4. Max

from the child records of a related list.


Difference between ISBLANK and ISNULL

Determines if an expression has a value and returns TRUE if it does not. If it contains a value, this function returns FALSE.
Determines if an expression is null (blank) and returns TRUE if it is. If it contains a value, this function returns FALSE.
Text fields cannot be null. So use mainly for text fields.
Numeric fields cannot be blank. So use mainly for numeric fields.


Difference between Sandbox and Developer Edition

Developer Edition
The salesforce.com Sandbox environment is an exact copy of your salesforce.com instance.
Developer Edition was an edition created for development of integrations and apps, specifically for the AppExchange.
You can copy your live instance to a sandbox environment.
You have to perform manually from sandbox to developer edition.
You can either copy your configuration and data into a sandbox environment or just the configuration.
You cannot copy your configuration or data onto the Developer Edition, but you can customize it to match your instance’s look and feel.

For trial version, just create login credential using the below link



Editable in the objects and tabs section of the enhanced user profile interface

Editable in the objects and tabs section of the enhanced user profile interface after Summer '11 release are as follows
  1. Page layout assignments
  2. System Permissions


Salesforce DEV 401 Book

For DEV 401 Book, visit the below link


All the best...


Salesforce certification exam schedule

To maintain Salesforce Certification credentials, all certified professionals must successfully complete release maintenance exams specific to their credential. Depending on your credentials, you may have anywhere from one to three release exams per credential to complete each year.

To know the Salesforce certification exam schedule, visit the below link


Salesforce jobs



Asserts that the first two arguments are the same. If they are not, a fatal error is returned that causes code execution to halt.

Sample Code:


trigger AccountTrigger on Account ( before insert ) {

    for ( Account acct : trigger.new ) {
        if ( acct.Name == 'Test Account' )
            acct.Description = 'Test';

Test Class:

private class SampleTestClass {

    static testMethod void insertAcctTest() {

        Account acc = new Account(Name = 'Test Account');
        insert acc;
        acc = [ SELECT Description FROM Account WHERE Id = : acc.Id ];
        System.assertEquals('Test', acc.Description);



In the above example, the expected Description of the Account is 'Test'. If any other additional processes like Workflow Field update, Process Builder, etc updates the Description other than 'Test', it will throw an error and fails the test method. This will make sure that developed code is working as expected.

Opposite to System.assertEquals() is System.assertNotEquals().

Changing Lookup to Master-Detail relationship

For changing Lookup to Master-Detail relationship, ensure that existing records are properly parented. Before changing Lookup to Master-Detail relationship, all the records should have lookup values.

If a field is created on Object 'B' with relation Lookup/Master-Detail to Object 'A', then Object 'A' is Parent/Master and Object 'B' is Child/Detail.

Converting a lookup to a master-detail-relationship changes the organization-wide default to Controlled by Parent and the sharing model is updated to public read/write.

Birthday Reminder or Automatic Birthday wisher using apex in Saleforce

For Birthday Reminder or Automatic Birthday wisher using apex in Saleforce, use the below codes. I have implemented this using Batch Apex.


global class MemberIterable implements Iterator<Member__c{
   List<Member__c> memList{get; set;}
   Integer i {get; set;}

   public MemberIterable() {
       memList = [SELECT E_Mail_Id__c,
Birthday__c FROM Member__c];
       i = 0;
   global boolean hasNext() {
       if(i >= memList.size())
           return false;
       } else {
           return true;

   global Member__c next() {
       if(i > memList.size()) {
           return null;
       return memList[i-1];


global class callMemberIterable implements iterable<Member__c> {
   global Iterator<
Member__c> Iterator() {
      return new memberIterable();


global class memberBirthdayBatch implements Database.batchable<Member__c> {
   global Iterable<
Member__c> start(Database.batchableContext info) {
       System.debug('Start method');
       return new callMemberIterable();
   global void execute(Database.batchableContext info, List<
Member__c> scope) {
Member__c> memsToUpdate = new List<Member__c>();
       System.debug('Member list size is ' + scope.size());
Member__c m : scope) {
           Date myDate = date.today();
           Integer todayDy = myDate.day();
           Integer todayMon = myDate.month();
           System.debug('Day is ' + m.
           Integer dy =  m.
           Integer mon =  m.Birthday__c.month();
           if(todayDy == dy && todayMon == mon) {
               Messaging.SingleEmailMessage email = new Messaging.SingleEmailMessage();
               List<String> toAddresses = new List<String>();
               List<String> ccAddresses = new List<String>();
               ccAddresses.add('[email protected]');
               email.setSubject('Happy Birthday. Have a blast -- Birthday Reminder!');
               String message = '<html><table cellspacing = "7"><tr><td style="font-weight:bold;color:green;">Happy Birthday!!!</td></tr><tr><td style="font-weight:bold;color:pink;">Many more Happy returns of the day.</td></tr><tr><td></td></tr><tr><td></td></tr><tr><td style="font-weight:bold;">Cheers,</td></tr><tr><td style="font-weight:bold;">Magulan D</td></tr></table></html>';
               Messaging.sendEmail(new Messaging.SingleEmailMessage[]{email});
   global void finish(Database.batchableContext info) {


global class scheduleBirthdayWish implements Schedulable {
    global void execute(SchedulableContext SC) {
        memberBirthdayBatch mbw = new memberBirthdayBatch();


Schedule the 'scheduleBirthdayWish' as mentioned below in App Setup --> Apex Classes --> Schedule Apex and select 'scheduleBirthdayWish' class. Check Weekly and select all the days. Give Start and End dates and Preferred Start time and Click 'Save' button.

To check the scheduled job, go to Administration Setup --> Monitoring --> Scheduled Jobs

Extensions having same method name

    If Extensions are having same method name, it gets overridden.
    Overrides are defined by whichever methods are defined in the “leftmost” extension, or, the extension that is first in the comma-separated list.

Apex Page:

<apex:page standardController="Account"  extensions="ExtOne,ExtTwo" showHeader="false">
    <apex:outputText value="{!Str}" />


public class ExtOne 
    public ExtOne(ApexPages.StandardController acon) { }

    public String getStr() 
        return 'Str-One';

public class ExtTwo 
    public ExtTwo(ApexPages.StandardController bcon) { }

    public String getStr() 
        return 'Str-Two';

    The value of the <apex:outputText> component renders as Str-One. Overrides are defined by whichever methods are defined in the “leftmost” extension, or, the extension that is first in the comma-separated list. Thus, the getFoo method of ExtOne is overriding the method of ExtTwo.

Force.com IDE Installation for Eclipse 3.4.x

1. Start Eclipse.

2. Go to Help --> Software Updates..

3. Click Add Sites.

4. Set the Location to "http://www.adnsandbox.com/tools/ide/install/", then click "OK."

5. Check Force.com IDE Update Site and click Install...

 6. Check Force.com IDE and click Next.

7. Check I accept the terms of the license agreement and click Finish.

8. Restart the Eclipse.

9. Once Eclipse restarts, select Window > Open Perspective > Other and select "Force.com", then click "OK."

Or visit the below link

View state in Salesforce

    The view state of a web page is composed of all the data that's necessary to maintain the state of the controller during server requests (like sending or receiving data). Since the view state contributes to the overall size of your page, performance of a page can depend on efficiently managing the view state. The View State tab in the development mode footer provides information about the view state of your Visualforce page as it interacts with Salesforce.

  • Minimize number of form on a page.  Use apex:actionRegion instead of using 2 or more forms.
  • Refine your SOQL to only retrieve the data needed by the page.
  • All public and private data members present in Standard, Custom and Controller extensions are saved.
  • The transient variables are not passed to view state and therefore not stored in View State.
Check the below link for enabling View State


How to enable view state in Salesforce

1. Go to setup --> Administration Setup --> Manage Users --> Users.

2. Select the user.

3. Click 'Edit' button.

4. Check the 'Show View State in Development Mode' checkbox.

5. Click 'Save' button.


Record Level Security

    After setting object- and field-level access permissions, you may want to configure access settings for the actual records themselves. Record-level security lets you give users access to some object records, but not others. Every record is owned by a user or a queue. The owner has full access to the record. In a hierarchy, users higher in the hierarchy always have the same access to users below them in the hierarchy. This access applies to records owned by users, as well as records shared with them.

    To specify record-level security, set your organization-wide sharing settings, define a hierarchy, and create sharing rules.


Object Level Vs Field Level Security in Salesforce

Object level security:

CRUD (Create, Read, Update, Delete) permission.

Field level security:
  • Read Only
  • Hidden
If object level security is just read, you can make any field of that object to hidden.
If object level security is CRUD, you can make any field of that object to Read Only or Hidden.



    The Salesforce AppExchange is the destination for great business apps. It is a cloud computing marketplace, developed and hosted by salesforce.com.

    It was launched in 2005 by salesforce.com. It is the world’s first and largest cloud computing applications and services platform. AppExchange is a community where you can build, develop, customize and market your applications and share it with millions of other users, all over the world. Through AppExchange, you can also get instant access to thousands of applications built by others.

    The application development is done through the Force.com PaaS (Platform as a Service). There is no need to purchase and install the software – everything is done through the hosted interface. Built your application, upload it to AppExchange and share with others. AppExchange has tools and features that allow you to showcase your creation.

    AppExchange offers numerous application categories such as Reporting, Dashboards, Finance & Administration, IT, HR and Recruitment, Sales and many more. So people across different service sectors like business analysts, developers, IT and finance professionals, to name a few, use AppExchange to their advantage.

For more info, visit