About Salesforce
Salesforce is a cloud-based online platform for CRM (Customer Relationship Managements). Salesforce provides a Single Integrated CRM platform to manage various departments of a business like marketing, sales, commerce, and service.
What exactly is an Apex Map in Salesforce?
Basically Apex is an Object Oriented programming language, Using that developers execute the flow and transaction control statements on Salesforce Servers using API calls. Almost all syntax are similar to Java and act like DB stored procedures. This feature enables the developers to add business logic into the most system events, including button clicks, related record updates, and Visualforce pages.
What is Apex Collection?
Apex Collections is a type of variable, it can store multiple records. In Apex there are different types of Collections:
- List
- Set, and
- Map.
Map in Salesforce
Map in Salesforce is a key-value pairs collection, where each unique key maps to a single value. Keys and values can be any data type — primitive types, collections, Objects, user-defined types, and built-in Apex types. String Type Map keys are case-sensitive. Map methods (like put, get, containsKey, and remove) treat these keys as distinct. The map gives value on the basis of key. Key is always unique but the key value can be duplicated.
Maps Methods
The Map methods are all instance methods, that is, they operate on a particular instance of a map.
The following are the maps instance methods:
Map Method Syntax.
Map<integer, string>exMap= new map<integer, string>();
exMap.put(1,'James');
exMap.put(2,'Daniel');
exMap.put(3,'Peter');
string name= exMap.get(1);
string name1= exMap.get(2);
string name2= exMap.get(3);
system.debug(name);//James
system.debug(name1);//Daniel
system.debug(name2);// Peter
set<integer>key= exmap.keyset();
list<string>values=exmap.values();
system.debug(values);//James, Daniel, Peter
Map Methods
The following are the main methods for Map. All the following are instance methods.
- clear() Removes all of the key-value mappings from the map.
- clone() Makes a duplicate copy of the map.
- containsKey(key) returns true if the map contains – the If the key is a string, the key value is case-sensitive.
- deepClone() This method creates a duplicate copy of a map, including sObject records if the map has sObject record values .
- equals(map2) It compares a map with a specified map and returns true if both maps are equal; otherwise, returns false.
- get(key) This method returns the value of the specified key which is mapped, or it returns null if the map contains no value for this key.
- getSObjectType() This method returns the value of the sObject type in format of key and value.
- isEmpty() If the map has zero key-value pairs it returns true.
- values() This method returns a list which contains all the values in the map.The values are returned in an arbitrary order.
- keySet() Returns a set that contains all of the keys in the map.
- put(key, value) Associates the specified value with the specified key in the map.
- putAll(fromMap) Copies all of the mappings from the specified map to the original map.
- putAll(sobjectArray) Adds the list of sObject records to a map declared as Map<ID, sObject> or Map<String, sObject>.
- remove(key) This method removes the mapping for the specified key from the map, if present, and returns the corresponding value.
- size() Returns the number of key-value pairs in the map.
Keys:
- get(key):
list<account>myAccounts = new list<account>();
myAccounts = [Select ID, Name from Account limit 10];
map<id,string>myAMap = new map<id,string>();
for ( Account a : myAccounts ){
//Here putting account Id and name to map
myAMap.put(a.ID, a.Name);
}
for ( ID aID : myAMap.keySet() ){
system.debug(loggingLevel.debug, myAMap.get(aID));
}
- putAll(fromMap):
Map<String, String> map1 = new Map<String, String>();
map1.put('Red','LightRed');
Map<String, String> map2 = new Map<String, String>();
map2.put('Blue','DarkRed');
// Add map1 entries to map2
map2.putAll(map1);
System.debug(map2.values());//(LightRed, 'DarkRed')
- remove(key):
Map<String, String>colorCodes = new Map<String, String>();
colorCodes.put('Red', 'FF0000');
colorCodes.put('Blue', '0000A0');
colorCodes.put('Green', '0000A0');
System.debug('printing=== '+colorCodes);// Blue=0000A0, Green=0000A0, Red=FF0000
for(String key:colorCodes.keySet().clone()) {
colorCodes.remove('Green');
system.debug(colorCodes);// Blue=0000A0, Red=FF0000
}
- Values ():
Map<String, String>colorCodes = new Map<String, String>();
colorCodes.put('FF0000', 'Red');
colorCodes.put('0000A0', 'Blue');
List<String> colors = new List<String>();
colors = colorCodes.values();
system.debug(colors);//(Red, Blue)
- getSObjectType()
Map <id,Account>acctMap = new map<id,account>([select name from Account limit 10]);
for(string accValue:acctmap.keyset()){
system.debug(acctmap.get(accValue));
}
Example How to display record on basis of alphabet?
Apex class
public class DynamicSearchExample {
public Map<string,list<account>>accountsMap {get; set;}
public List<selectoption> keys {get; set;}
public String selectedKey {get; set;}
public Map<string, account>accsByName {get; set;}
public Set<string>getMapKeys(){
returnaccountsMap.keySet();
}
publicDynamicSearchExample(){
accsByName=new Map<string, account>();
List<string>sortedKeys=new List<string>();
accountsMap=new Map<string, list<account>>();
accountsMap.put('All', new List<account>());
List<account>accs=[select Name, industry,type,phone from Account order by Name asc];
for (Account acc : accs){
accountsMap.get('All').add(acc);
String start=acc.Name.substring(0,1);
List<account>accsFromMap=accountsMap.get(start);
if (null==accsFromMap){
accsFromMap=new List<account>();
accountsMap.put(start,accsFromMap);
}
accsFromMap.add(acc);
accsByName.put(acc.name,acc);
}
keys=new List<selectoption>();
for (String key : accountsMap.keySet()){
if(key != 'All'){
sortedKeys.add(key);
}
}
sortedKeys.sort();
sortedKeys.add('All');
for (String key : sortedKeys){
keys.add(new SelectOption(key, key));
}
selectedKey='All';
}
}
Visualforce page
<apex:page controller="DynamicSearchExample">
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3E%0Afunctionredraw_accounts()%7B%0A%0A%20%20%20%20%7D%0A%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
<apex:form>
<apex:actionFunction name="redraw_accounts" rerender="accs" status="status"/>
<apex:pageBlock title="Criteria">
<apex:outputLabel value="Starting Letter"/>
<apex:selectList value="{!selectedKey}" size="1" onchange="redraw_accounts()">
<apex:selectOptions value="{!keys}" />
</apex:selectList>
</apex:pageBlock>
<apex:pageBlock title="Accounts">
<apex:actionstatus id="status" startText="Loading Data..........." stopText="Loading completed....." >
<apex:facet name="start"/>
<apex:facet name="stop">
<apex:outputPanel id="accs">
<apex:pageBlockTable value="{!accountsMap[selectedKey]}" var="acc">
<apex:column value="{!acc.name}"/>
<apex:column value="{!acc.industry}"/>
<apex:column value="{!acc.type}"/>
<apex:column value="{!acc.phone}"/>
</apex:pageBlockTable>
</apex:outputPanel>
</apex:facet>
</apex:actionstatus>
</apex:pageBlock>
</apex:form>
</apex:page>
Output of the above program: