tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:カスタム設定へのアクセス

カスタム設定の使い方についてヘルプで詳しく説明があったので復習しました。

数式項目からアクセス

数式項目は階層カスタム設定でのみ機能し、リストカスタム設定には使用できません。

{!$Setup.CustomSettingName__c.CustomFieldName__c}

Apexからアクセス

Apex はどちらのカスタム設定にもアクセスできます。

リストカスタム設定のサンプル

getAll メソッドで、リスト設定に関連付けられているすべてのカスタム項目の値を取得できます。

Map<String_dataset_name, CustomSettingName__c> mcs = CustomSettingName__c.getAll();

Nameを指定して値を取得する場合はgetValues メソッドを使用します。
※getValues メソッドはリストと階層共通で使用できる。

CustomSettingName__c mc = CustomSettingName__c.getValues(data_set_name);
階層カスタム設定のサンプル

組織レベルで値を取得する場合は、getOrgDefaults メソッドを使用します。

CustomSettingName__c mc = CustomSettingName__c.getOrgDefaults();

プロファイルレベルの値を取得する場合は、getInstance メソッドを使用します。
※getInstance メソッドは、ユーザ ID で使用することもできます。

CustomSettingName__c mc = CustomSettingName__c.getInstance(Profile_ID);

その他

カスタム設定の [プライバシー] は管理パッケージで使用される際に必要になります。
※保護になっているとアクセス不可。

カスタム設定はオブジェクトとして扱われるので、SOQLでのアクセスも可能。
オブジェクトの使用数にもカウントされるのでオブジェクト作成数の制限に注意。

参考サイト

カスタム設定へのアクセス
http://help.salesforce.com/HTViewHelpDoc?id=cs_accessing.htm&language=ja

ちょっと検証

少し気になったのがgetOrgDefaults()で呼び出し制限はないのかなと言う点。
こんな感じで呼び出し処理をループさせて確認して見ました。

public with sharing class CheckGetOrgDefaultsController {
	
	public String output {get; set;}
	
	public CheckGetOrgDefaultsController() {
		CustomSettingName__c mc = new CustomSettingName__c();
		for (Integer i = 0; i < 190000; i++) {
			mc = CustomSettingName__c.getOrgDefaults();
		}
		this.output = mc.label__c;
	}

}

試してみましたが特にエラーは発生しませんでした。
ループ数を増やしてみたら先にステートメントのエラーが発生したので、おそらく何回使っても大丈夫だと思います。
f:id:tyoshikawa1106:20130317132538p:plain