Привет. Сегодня столкнулся с интересной задачей
надо было на странице проверить что за объект пришел контексте и в зависимости от этого строить страницу.
Задача кажется простая.
Начал решил попробовать так:
контроллер
SomeObject__c instance = new SomeObject__c ();
Schema.SObjectType objectType = instance.getsObjectType();
{!objectType == $ObjectType.SomeObject__c}SomeObject__c instance = new SomeObject__c ();
String objectClassName = instance.getsObjectType().getDescribe().getName();
{!objectClassName == $ObjectType.SomeObject__c.name}SomeObject__c instance = new SomeObject__c ();
String objectClassType = instance.getsObjectType().getDescribe().getKeyPrefix();;
{!objectClassType == $ObjectType.SomeObject__c}Известная проблема, сам сталкивался. А твое решение впринципе тоже логичное, так как ObjectType идентифицируется префиксом объекта, скорее всего для этого типа данных оператор == переопределен для сравнения, как раз по префиксу.
Упростил немного задачу
Если есть Id у instance.
Чтобы не вычислять object prefix в контроллере делаем все простой скромной строчкой на VF
{!LEFT(instance.Id, 3) == $ObjectType.SomeObject__c}Как раз все будет отлично работать - у меня неймспейсы.
Ты выдрал строчку из контекста.
Да вот это вернет имя класса с неймспейсом
String objectClassName = instance.getsObjectType().getDescribe().getName();
$ObjectType.SomeObject__c.name
С неймспейсом оно будет если твой package куда-то уже поставили. А если ты его разрабатываешь (в Developer org, например) - то там неймспейса не будет.
Mike V, что-то я не могу понять про что ты хочешь сказать. Можешь привести пример?
У меня и тот и тот тип орга (и пакет и дев орг с неймспейсом где я разрабатываю)
name, getName() возвращают имя полностью и естественно я не сравниваю их с голым текстом.
Если надо сравнить без неймспейчас, имея голое название объекта в виде строки, то можно использовать getLocalName() - которое вернет имя без префикса.
Я наверное плохо выразился, имелось ввиду что если сравнивать getName() с текстов, то результат зависит от того, есть неймспейс (пакет уже поставлен) или нету (если его разрабатывают). Я так понял, ты публикуешь пакет из того же Dev Org, где и разрабатываешь. Если да, тогда для тебя это некритично.
Понял тебя. Все правильно говоришь. Главное никогда не сравнивать с текстом. В принципе для этого все необходимое в SF есть. Главное немного покопаться в теме
Understanding Apex Describe Information