Friday, March 9, 2012

Fetching sObject Type From Record Id

"How I can get the sObject Type from Record Id?". In many requirements I do have 15-digit or 18-digit Id and I want to know the sObject to which the Id belongs to. Answer is using Global Describe we can get the sObject type.

Am getting too many emails from folks from Community Forums regarding this, so here is the generic method which will help all.
public class KeyPrefix
{
    // map to hold global describe data
    private static Map<String,Schema.SObjectType> gd;
   
    // map to store objects and their prefixes
    private static Map<String, String> keyPrefixMap;
    // to hold set of all sObject prefixes
    private static Set<String> keyPrefixSet;
   
    private static void init() {
        // get all objects from the org
        gd = Schema.getGlobalDescribe();
       
        // to store objects and their prefixes
        keyPrefixMap = new Map<String, String>{};
       
        //get the object prefix in IDs
        keyPrefixSet = gd.keySet();
       
        // fill up the prefixes map
        for(String sObj : keyPrefixSet)
        {
            Schema.DescribeSObjectResult r =  gd.get(sObj).getDescribe();
            String tempName = r.getName();
            String tempPrefix = r.getKeyPrefix();
            keyPrefixMap.put(tempPrefix, tempName);
        }
    }
   
    public static String GetKeyPrefix(String ObjId)
    {
        init() ;
        String tPrefix = ObjId;
        tPrefix = tPrefix.subString(0,3);
       
        //get the object type now
        String objectType = keyPrefixMap.get(tPrefix);
        return objectType;
    }
}
Now how you can use this? Simply save the class and pass your object Id in method "GetKeyPrefix" like this 
//a0090000002QGKu will be your object Id
System.debug('::::::: '+ KeyPrefix.GetKeyPrefix('a0090000002QGKu') );

No comments:

Post a Comment