Loading

Suchen von Objekttypen mit Hilfe des Datensatz-ID-Präfixes

Veröffentlichungsdatum: May 26, 2020
Beschreibung
Standard und benutzerdefinierte Objekte in Salesforce haben Präfixe, die drei Zeichen lang sind und welche den ersten Teil der Datensatz-ID ausmachen.
Zum Beispiel: Ein Benutzerdatensatz mit der ID „00561000000Mjya“ hat das Präfix „005“, welches das Präfix für das Benutzerobjekt ist.

Für eine Liste von Datensatz-ID-Präfixen von Standardfeldern, schauen Sie sich bitte den Artikel „Präfix-Decoder für Standardfeld-Datensatz-IDs“ an.

In manchen Fällen müssen Sie den Namen eines Objektes, welches mit dem Präfix assoziiert wird, eventuell mit Hilfe von Apex-Code herausfinden.
Lösung
Beispiel: Wenn die Objekt-ID „00561000000Mjya“ ist, dann führen Sie den folgenden Code in „Execute Anonymous Apex“ aus:
Id sampleid = '00561000000Mjya'; System.debug('object is '+ sampleid.getsobjecttype());
Es gibt auch noch eine alternative Möglichkeit. Erstellen Sie die folgende Klasse: SchemaGlobalDescribe.
Hinweis: Falls die Org sehr viele Objekte hat, könnte ein Apex-CPU-Obergrenzenfehler auftreten. Falls dies der Fall ist, so passen Sie den folgenden Code bitte an, damit verwaltete Pakete ausgeschlossen werden, oder stellen Sie die Filter entsprechen ein.
public class SchemaGlobalDescribe{
    public static String findObjectNameFromRecordIdPrefix(String recordIdOrPrefix){
        String objectName = '';
        try{
            //Get prefix from record ID
            //This assumes that you have passed at least 3 characters
            String myIdPrefix = String.valueOf(recordIdOrPrefix).substring(0,3);
             
            //Get schema information
            Map<String, Schema.SObjectType> gd =  Schema.getGlobalDescribe(); 
             
            //Loop through all the sObject types returned by Schema
            for(Schema.SObjectType stype : gd.values()){

                //if (!sObj.contains('__')) to exclude managed package objects

                Schema.DescribeSObjectResult r = stype.getDescribe();
                String prefix = r.getKeyPrefix();
                System.debug('Prefix is ' + prefix);
                 
                //Check if the prefix matches with requested prefix
                if(prefix!=null && prefix.equals(myIdPrefix)){
                    objectName = r.getName();
                    System.debug('Object Name! ' + objectName);
                    break;
                }
            }
        }catch(Exception e){
            System.debug(e);
        }
        return objectName;
    }
}
Führen Sie den folgenden Code in der Entwicklerkonsole aus, um den Objektnamen durch das Datensatz-ID-Präfix zu finden:
String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix('500'); 
System.debug(objectName);
Sie können diese Klasse oder die unten stehende Klasse verwenden, um eine benutzerdefinierte VisualForce-Seite zu erstellen, oder um diese mit einer Lightning-Komponente zu benutzen.
@isTest
private class SchemaGlobalDescribeTests{
    @istest
    private static void testMethodPositive(){
        String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix('500');
        System.assertEquals(objectName,'Case');
    }
    @isTest
    private static void testMethodNegative(){
        String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix('500');
        System.assertNotEquals(objectName,'Account');
    }
    @isTest
    private static void testMethodNull(){
        String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix('101');
        System.assertEquals(objectName,'');
    }
    @isTest
    private static void testMethodException(){
        String objectName = SchemaGlobalDescribe.findObjectNameFromRecordIdPrefix('10');
        System.assertEquals(objectName,'');
    }
}

 
Nummer des Knowledge-Artikels

000388019

 
Laden
Salesforce Help | Article