Friday 18 December 2015

How to learn Salesforce | Trailhead | Learn and win | Sample project in salesforce


When Ever any one asking me how learn salesforce . First thing which come in mind is TrailHead. Really Trailhead is the one of the best option to learn salesforce with lots of example and exercise.

https://developer.salesforce.com/trailhead



If any one is interested to do some hand-on exercise Then below module one of best module for any new salesforce learner

Build a Battle Station App

Above module include six interesting module to learn 

1) Create the Battle Station App

This module contain information how to create a app and custom object in salesforce

2) Build the Object Model
In this  module you can learn how to create custom object and custom fields.

3) Modify the User Experience
In this module you will learn about page layout in salesforce.

4) Adding Business Logic
In this module you can learn about validation rule and process builder

5) Reports and Dashboards
Report and Dashboard is one which your will like to much. :)

6) Make the App Mobile
This module will give you idea about salesforce 1.

NOTE:- And Most import part is the if you will complete above module before 30 DEC you can win also.
https://developer.salesforce.com/blogs/developer-relations/2015/12/stay-target-win-prizes-latest-trailhead-badge.html?utm_campaign=trailhead&utm_source=HelloBar&utm_medium=sfdc-dev

There are to many module waiting for you. Please try trailhead for learning

Thanks you Salesforce for providing the Trailhead for new learner .



Wednesday 16 December 2015

How to get RecordTypeId without SOQL | Get RecordTypeId by Describe Call



Some time in code we need to get recordTypeId . For that generally we used SOQL like below :-


Id contRecordTypeId = [Select id from RecordType where sObjectType = 'Contact' and developerName ='NameOfRecordType' ].id ; 


You can try below Describe to get record Type Id without SOQL


Id contRecordTypeId = Schema.SObjectType.Contact.getRecordTypeInfosByName().get('NameOfRecordType').getRecordTypeId();


Thanks
Amit Chaudhary

Tuesday 15 December 2015

Record ID Prefix | Object Type from Record ID Prefix | Prefix of an Object in Salesforce.


We know there are two types of record-id are present in salesforce (18 digit -- Case Insensitive,15 digit -- Case Sensitive). Only 3 digit of ids represent object type .The following is a list of the Salesforce Standard Object ID prefixes


Object
Prefix
Account
001
NOTE
002
Contact
003
User
005
Opportunity
006
Activity
007


 Please check below post for more detail

If you want to get the Prefix of any object . Please try below code.


String keyPrefix = Account.sObjectType.getDescribe().getKeyPrefix();
System.debug('PREFIX--' + keyPrefix );


If you want to get the Object Name from RecordId then please try below code.


public class SchemaGlobalDescribeToGetObjectName
{
    public static String findObjectNameFromRecordIdPrefix(String recordIdOrPrefix)
 {
  String objectName = '';
        try
  {
            String IdPrefix = String.valueOf(recordIdOrPrefix).substring(0,3); 
            Map<String, Schema.SObjectType> gd =  Schema.getGlobalDescribe(); 
            for(Schema.SObjectType stype : gd.values())
   {
                Schema.DescribeSObjectResult r = stype.getDescribe();
                String prefix = r.getKeyPrefix();
                if(prefix!=null && prefix.equals(IdPrefix))
    {
                    objectName = r.getName();
                    System.debug('Object Name! ' + objectName);
                    break;
                }
            }
        }catch(Exception e){
            System.debug(e);
        }
        return objectName;
    }
}


If you want to Get the Object prefix by Workbench then please try below step :-

The easiest way to find out which key prefix maps to which object is by using a tool like the workbench . After you log into workbench, go to and pick an object from the pick list.

Step 1 :- Login in to Workbench

Step 2:- Info > Standard & Custom Objects 


Step 3:- Then select your object





Thanks
Amit Chaudhary

Thursday 19 November 2015

Apex Describe | Dynamic retrieval of object label & field label


     Dynamic retrieval of object label & field label


You can describe sObjects either by using tokens or the describeSObjects Schema method.


Apex Class


public with sharing class DescibeDemoController 
{
    public Map <String, Schema.SObjectType> schemaMap = Schema.getGlobalDescribe();
    public String selectedObject {get; set;}
    public List<FieldWrapper> listField{get;set;}

    public DescibeDemoController() 
    {
        listField = new List<FieldWrapper>();
    }

    // find all sObjects available in the organization
    public  List<SelectOption> getListObejectName() 
    {
        List<SelectOption> objNames = new List<SelectOption>();
        List<String> entities = new List<String>(schemaMap.keySet());
        entities.sort();
        for(String name : entities)
            objNames.add(new SelectOption(name,name));
        return objNames;
    }

    
    // Find the fields for the selected object
    public void showFields() 
    {
        listField.clear();
        Map <String, Schema.SObjectField> fieldMap = schemaMap.get(selectedObject).getDescribe().fields.getMap();
        for(Schema.SObjectField sfield : fieldMap.Values())
        {
            schema.describefieldresult dfield = sfield.getDescribe();
            FieldWrapper wObj = new FieldWrapper();
            wObj.fieldName = dfield.getLabel ();
            wObj.fieldAPIName = dfield.getname();
            listField.add(wObj);
        }
    }

    public class FieldWrapper
    {
        public String fieldName {get; set;}
        public String fieldAPIName {get; set;}
    }

}
VF Page


<apex:page controller="DescibeDemoController">
    <apex:form id="Describe">
        <apex:pageBlock id="block2" >
            <apex:pageblockbuttons location="top" >
                    <apex:commandButton value="Show Fields" action="{!showFields}" />
            </apex:pageblockbuttons>
            
            <apex:pageblocksection >
                <apex:pageBlockSectionItem >
                    <apex:outputLabel >Object Name</apex:outputLabel>
                    <apex:selectList value="{!selectedObject}" size="1">
                        <apex:selectOptions value="{!ListObejectName}"/>
                    </apex:selectList>
                </apex:pageBlockSectionItem>
            </apex:pageblocksection>
        </apex:pageBlock>
        
        <apex:pageBlock id="result" title="Field Detail for {!selectedObject}" rendered="{!if(listField.size > 0 ,true,false)}"   >
            <apex:pageBlockTable value="{!listField}" var="field" rendered="{!if(listField.size > 0 ,true,false)}"> 
                <apex:column value="{!field.fieldName }" headerValue="Name" />
                <apex:column value="{!field.fieldAPIName }"  headerValue="API Name"/>
            </apex:pageblockTable>
        </apex:pageblock>
    </apex:form>
</apex:page>




Related link 

Sunday 8 November 2015

SingleEmailMessage Vs MassEmailMessage | Send Email by Apex


SingleEmailMessage Vs MassEmailMessage





SINGLE EMAILMASS EMAIL
Multiple recipients?YesYes
Personalized body?Yes (single body only)Yes
Special permission needed?NoYes, has to be enabled
Merge fields?YesYes
Personalized merge fields?Yes (only one record at a time)Yes
Templates?YesYes
Template possibilities?Text/HTML/Visualforce/Custom TemplatesText/HTML/Custom Template


SingleEmailMessage:

Single emails are like regular individual emails that may go to one or more addresses (to/cc/bcc), but each of these emails has the same body

Messaging.SingleEmailMessage message = new Messaging.SingleEmailMessage();
message.toAddresses = new String[] { 'abc@gmail.com', 'xyz@gmail.com' };
message.optOutPolicy = 'FILTER';
message.subject = 'Opt Out Test Message';
message.plainTextBody = 'This is the message body.';
Messaging.SingleEmailMessage[] messages =   new List<Messaging.SingleEmailMessage> {message};
Messaging.SendEmailResult[] results = Messaging.sendEmail(messages);

if (results[0].success) 
{
    System.debug('The email was sent successfully.');
} else 
{
    System.debug('The email failed to send: ' + results[0].errors[0].message);
}
Please check below post to see all other method
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_email_outbound_single.htm 

 
MassEmailMessage:

Mass emails typically go to a large number of addresses (currently capped to 250 per email), with personalized message bodies.
public void SendEmail()
{
 List<contact> lstcon=[Select id from contact limit 2];
 List<Id> lstids= new List<Id>();
 for(Contact c:lstcon)
 {
  lstids.add(c.id);
 }
 EmailTemplate et=[Select id from EmailTemplate where name = 'EmailTemplatename' limit 1];
 
 Messaging.MassEmailMessage mail = new Messaging.MassEmailMessage();
 mail.setTargetObjectIds(lstIds);
 mail.setSenderDisplayName('System Admin');
 mail.setTemplateId(et.id);
 Messaging.sendEmail(new Messaging.MassEmailMessage[] { mail });
}
 Please check below post to see all other method

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

 
Related link
https://developer.salesforce.com/page/An_Introduction_To_Email_Services_on_Force.com 
 
Please let us know if this will help you

Thanks
Amit Chaudhary