tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:ApexとSchema.sObjectType

Visualforceで項目のラベルを取得して表示したい場合は次のように記載することで対応可能です。

<apex:outputText value="{!$ObjectType.Account.Fields.Name.Label}" />

$ObjectTypeについての詳細はこちら

$ObjectType
http://www.salesforce.com/us/developer/docs/pages/Content/pages_variables_global_objecttype.htm


便利ですね。今回はこれをApexクラス内で実行する方法についてです。
Apexクラス内では$Objectという書き方はできないので別の方法になります。


こんな感じです。

Schema.SObjectType.Account.fields.Name.label;

Schemaを使用することで取得できます。


実行時のキャプチャです。

f:id:tyoshikawa1106:20130815220502p:plain

f:id:tyoshikawa1106:20130815220540p:plain

実行ユーザが英語の場合はちゃんと変換されます。

f:id:tyoshikawa1106:20130815220643p:plain


すごく便利です。


すごく便利なのですが、注意しなくてはいけないこともあります。
一度に実行できるのは100回までみたいです。
101回以上でLimitExceptionが発生します。


検証時のキャプチャです。

f:id:tyoshikawa1106:20130815220913p:plain

f:id:tyoshikawa1106:20130815221102p:plain

という感じでエラーがでます。おそらくcatchでは拾えないと思います。
なので使用する際にはループ内で使用しないなどの対策が必要です。


Schema.sObjectでできることについての詳細はこちらです。

sObject Describe Result Methods
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_sobject_describe.htm