איך לזהות את סוג האובייקט על סמך ID

ליאור נכתב על ידי ליאור לביא, עודכן בתאריך 29/10/2023

לעיתים אנחנו עשויים למצוא את עצמנו מבצעים שאילתה על רשומה ולהחזיר ערך של שדה Lookup פולימורפי. שדות פולימורפיים מסוגלים להחזיק ID של יותר מסוג אחד של אובייקט, למשל User או Group. כעת נשאלת השאלה, איך נוכל לדעת מהו סוג האובייקט שה-ID שמשכנו מצביע אליו? דרך אחת לברר את סוג האובייקט היא על סמך האופן בו ה-ID נכתב, למשל שלושת התווים הראשונים של ה-ID ייחודיים לאובייקט מסוג מסוים. ID של Groups, למשל, יתחיל ברצף 00G. אבל שיטה זאת איננה אסטטית או קריאה במיוחד.

דוגמה

Lead myLead = [SELECT OwnerId, Owner.Name FROM Lead LIMIT 1];

if(String.valueOf(myLead.OwnerId).startsWith('00G')){
	System.debug(LoggingLevel.Error, 'Hi! I am a Group!' + ' ' + myLead.Owner.Name);
}else{
	System.debug(LoggingLevel.Error, 'Hello! I am NOT a Group!' + ' ' + myLead.Owner.Name);
}

דרך פשוטה יותר לבצע את הבדיקה הנ"ל היא באמצעות שימוש בשרשור המתודות הבאות:

Lead myLead = [SELECT OwnerId, Owner.Name FROM Lead LIMIT 1];
String ownerType = myLead.OwnerId.getSObjectType().getDescribe().getName();

if(ownerType == 'Group'){
	System.debug(LoggingLevel.Error, 'Hi! I am a Group!' + ' ' + myLead.Owner.Name);
}else{
	System.debug(LoggingLevel.Error, 'Hello! I am NOT a Group!' + ' ' + myLead.Owner.Name);
}

בדוגמה השנייה השתמשנו במתודות כדי לחלץ את הערך שחיפשנו וההשוואה בתוך תנאי ה-if הרבה יותר קריאה וברורה.