この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

カスタム設定メソッド

カスタム設定はカスタムオブジェクトと類似しており、アプリケーション開発者は、カスタムデータセットの作成の他に、組織、プロファイル、または特定のユーザーに対しカスタムデータを作成して関連付けることができます。すべてのカスタム設定データはアプリケーションキャッシュで公開されます。これにより、データベースへのクエリを繰り返し行うコストをかけずに、効率的なアクセスを実現します。さらに、このデータは、数式項目、入力規則、フロー、Apex、SOAP API に使用できます。

使用方法

カスタム設定メソッドはすべてインスタンスメソッドです。つまり、カスタム設定の特定のインスタンスでコールされ、動作します。カスタム設定には、階層とリストの 2 種類があります。メソッドには、リストカスタム設定を処理するメソッドと階層カスタム設定を処理するメソッドの 2 種類があります。

すべてのカスタム設定データはアプリケーションキャッシュで公開されます。これにより、データベースへのクエリを繰り返し行うコストをかけずに、効率的なアクセスを実現します。ただし、Standard Object Query Language (SOQL) を使ってカスタム設定データを照会するとアプリケーションキャッシュを使用しません。そのため、カスタムオブジェクトのクエリと似ています。キャッシュのメリットを得るには、Apex カスタム設定メソッドなどのカスタム設定データにアクセスする他のメソッドを使用します。

メモ

Salesforce ユーザーインターフェースでのカスタム設定の作成についての詳細は、Salesforce オンラインヘルプの「カスタム設定の作成」を参照してください。

カスタム設定の例

次の例では、Games というリストカスタム設定を使用します。Games 設定には GameType という項目があります。この例では、最初のデータセットの値が文字列 PC がどうかを決定します。

1List<Games__C> mcs = Games__c.getall().values();
2boolean textField = null;
3if (mcs[0].GameType__c == 'PC') {
4  textField = true;
5}
6system.assertEquals(textField, true);
次の例では、Foundation_Countries というカスタム設定を使用します。getValuesgetInstance メソッドが同一の値を返すことを示します。
1Foundation_Countries__c myCS1 = Foundation_Countries__c.getValues('United States');
2String myCCVal = myCS1.Country_code__c;
3Foundation_Countries__c myCS2 = Foundation_Countries__c.getInstance('United States');
4String myCCInst = myCS2.Country_code__c;
5system.assertEquals(myCCinst, myCCVal);

階層カスタム設定の例

次の例では、階層カスタム設定 GamesSupport に Corporate_number という項目があります。コードは pid で指定されたプロファイルの値を返します。

1GamesSupport__c mhc = GamesSupport__c.getInstance(pid);
2string mPhone = mhc.Corporate_number__c;
getValues メソッドを使用した場合、例は同一になります。

次の例では、階層カスタム設定メソッドの使用方法を示します。この例では、getInstance には、階層の下から 2 番目のレベルで定義されている項目から返される特定のユーザーまたはプロファイルに設定されない項目値が返されます。また、getOrgDefaults の使用方法を例で示します。

最後に、getValues が特定のユーザーまたはプロファイルのみのカスタム設定レコードの項目を返し、階層の他のレベルの値をマージしない方法を例示します。代わりに、getValues では設定されていない項目では null を返します。次の例では、Hierarchy という階層カスタム設定を使用します。Hierarchy には、OverrideMe および DontOverrideMe という 2 つの項目があります。また、ユーザー Robert にはシステム管理者プロファイルがあります。この例では、組織、プロファイル、ユーザー設定は次のようになります。
組織の設定
OverrideMe: Hello
DontOverrideMe: World
プロファイルの設定
OverrideMe: Goodbye
DontOverrideMe は設定されません。
ユーザーの設定
OverrideMe: Fluffy
DontOverrideMe は設定されません。
次の例は、Robert が組織で getInstance メソッドをコールした場合の結果を示します。
1Hierarchy__c CS = Hierarchy__c.getInstance();
2System.Assert(CS.OverrideMe__c == 'Fluffy');
3System.assert(CS.DontOverrideMe__c == 'World');
Robert が RobertId で指定したユーザー ID を getInstance に渡すと、同一の結果になります。これは、カスタム設定のデータの最下位レベルがユーザーレベルで指定されるためです。
1Hierarchy__c CS = Hierarchy__c.getInstance(RobertId);
2System.Assert(CS.OverrideMe__c == 'Fluffy');
3System.assert(CS.DontOverrideMe__c == 'World');
Robert が SysAdminID で指定されたシステム管理者プロファイル ID を getInstance に渡すと、結果は異なります。プロファイルに指定されたデータが返されます。
1Hierarchy__c CS = Hierarchy__c.getInstance(SysAdminID);
2System.Assert(CS.OverrideMe__c == 'Goodbye');
3System.assert(CS.DontOverrideMe__c == 'World');
Robert が getOrgDefaults を使用して組織のデータセットを返そうとする場合、結果は次のようになります。
1Hierarchy__c CS = Hierarchy__c.getOrgDefaults();
2System.Assert(CS.OverrideMe__c == 'Hello');
3System.assert(CS.DontOverrideMe__c == 'World');
getValues メソッドを使用して、Robert はユーザー設定およびプロファイル設定固有の階層カスタム設定値を取得できます。たとえば、Robert がユーザー ID RobertIdgetValues に渡す場合、結果は次のようになります。
1Hierarchy__c CS = Hierarchy__c.getValues(RobertId);
2System.Assert(CS.OverrideMe__c == 'Fluffy');
3// Note how this value is null, because you are returning
4// data specific for the user
5System.assert(CS.DontOverrideMe__c == null);
Robert がシステム管理者プロファイル ID SysAdminIDgetValues に渡すと、結果は次のようになります。
1Hierarchy__c CS = Hierarchy__c.getValues(SysAdminID);
2System.Assert(CS.OverrideMe__c == 'Goodbye');
3// Note how this value is null, because you are returning
4// data specific for the profile
5System.assert(CS.DontOverrideMe__c == null);

国コードと州コードのカスタム設定例

この例では、関連する情報を保存するために 2 つのカスタム設定オブジェクトを使用する方法と、関連する選択リストの集合のデータを表示する Visualforce ページについて示します。

次の例では、国コードと州コードは、Foundation_Countries と Foundation_States という 2 つの異なるカスタム設定に保存されます。

Foundation_Countries カスタム設定はリストタイプのカスタム設定であり、Country_Code という 1 つの項目が含まれます。
国コードのカスタム設定例
Foundation_States カスタム設定もリストタイプのカスタム設定であり、次の項目が含まれます。
  • 国コード
  • 都道府県コード
  • 都道府県名
都道府県コードのカスタム設定例
Visualforce ページには、国用と都道府県用の 2 つの選択リストが表示されます。
Visualforce ページのカスタム設定
1<apex:page controller="CountryStatePicker">
2   <apex:form >
3      <apex:actionFunction name="rerenderStates" rerender="statesSelectList" >
4          <apex:param name="firstParam" assignTo="{!country}" value="" />
5      </apex:actionFunction>
6
7   <table><tbody>
8      <tr>
9        <th>Country</th>
10          <td>
11             <apex:selectList id="country" styleclass="std" size="1" 
12                value="{!country}" onChange="rerenderStates(this.value)">
13                    <apex:selectOptions value="{!countriesSelectList}"/>
14             </apex:selectList>
15          </td>
16      </tr>
17      <tr id="state_input">
18        <th>State/Province</th>
19          <td>
20            <apex:selectList id="statesSelectList" styleclass="std" size="1" 
21                 value="{!state}">
22                   <apex:selectOptions value="{!statesSelectList}"/>
23            </apex:selectList>
24          </td>
25      </tr>
26   </tbody></table>
27   </apex:form>
28</apex:page>
Apex コントローラー CountryStatePicker は、カスタム設定に入力された値を探し、Visualforce ページにその値を返します。
1public with sharing class CountryStatePicker {
2
3// Variables to store country and state selected by user
4    public String state { get; set; }
5    public String country {get; set;}   
6
7    // Generates country dropdown from country settings
8    public List<SelectOption> getCountriesSelectList() {
9        List<SelectOption> options = new List<SelectOption>();
10        options.add(new SelectOption('', '-- Select One --'));        
11
12        // Find all the countries in the custom setting
13        Map<String, Foundation_Countries__c> countries = Foundation_Countries__c.getAll();
14        
15        // Sort them by name
16        List<String> countryNames = new List<String>();
17        countryNames.addAll(countries.keySet());
18        countryNames.sort();
19        
20        // Create the Select Options.
21        for (String countryName : countryNames) {
22            Foundation_Countries__c country = countries.get(countryName);
23            options.add(new SelectOption(country.country_code__c, country.Name));
24        }
25        return options;
26    }
27    
28    // To generate the states picklist based on the country selected by user.
29    public List<SelectOption> getStatesSelectList() {
30        List<SelectOption> options = new List<SelectOption>();
31        // Find all the states we have in custom settings.
32        Map<String, Foundation_States__c> allstates = Foundation_States__c.getAll();
33
34        // Filter states that belong to the selected country
35        Map<String, Foundation_States__c> states = new Map<String, Foundation_States__c>();
36        for(Foundation_States__c state : allstates.values()) {
37            if (state.country_code__c == this.country) {
38                states.put(state.name, state);
39            }
40        }
41        
42        // Sort the states based on their names
43        List<String> stateNames = new List<String>();
44        stateNames.addAll(states.keySet());
45        stateNames.sort();
46        
47        // Generate the Select Options based on the final sorted list
48        for (String stateName : stateNames) {
49            Foundation_States__c state = states.get(stateName);
50            options.add(new SelectOption(state.state_code__c, state.state_name__c));
51        }
52        
53        // If no states are found, just say not required in the dropdown.
54        if (options.size() > 0) {
55            options.add(0, new SelectOption('', '-- Select One --'));
56        } else {
57            options.add(new SelectOption('', 'Not Required'));
58        }
59        return options;
60    }
61}

リストカスタム設定メソッド

次に、リストカスタム設定のインスタンスメソッドを示します。

getAll()

カスタム設定用に定義されたデータセットの対応付けを返します。

署名

public Map<String, CustomSetting__c> getAll()

戻り値

型: Map<String, CustomSetting__c>

使用方法

データセットが定義されていない場合、このメソッドは空の対応付けを返します。

Salesforce API バージョン 20.0 以前を使用して保存された Apex の場合、返される対応付けのキーであるデータセット名は小文字に変換されます。Salesforce API バージョン 21.0 以降を使用して保存された Apex の場合、返される対応付けキーのデータセット名の大文字と小文字は変更されず、元の文字が保持されます。

メモ

getInstance(dataSetName)

指定されたデータセット名のカスタム設定データセットレコードを返します。このメソッドは、getValues(dataSetName) と同一のオブジェクトを返します。

署名

public CustomSetting__c getInstance(String dataSetName)

パラメーター

dataSetName
型: String

戻り値

型: CustomSetting__c

使用方法

指定されたデータセットにデータが定義されていない場合は、このメソッドは null を返します。

getValues(dataSetName)

指定されたデータセット名のカスタム設定データセットレコードを返します。このメソッドは、getInstance(dataSetName) と同一のオブジェクトを返します。

署名

public CustomSetting__c getValues(String dataSetName)

パラメーター

dataSetName
型: String

戻り値

型: CustomSetting__c

使用方法

指定されたデータセットにデータが定義されていない場合は、このメソッドは null を返します。

階層カスタム設定メソッド

次に、階層カスタム設定のインスタンスメソッドを示します。

  • API バージョン 41.0 以下では、testSetup メソッドを含め、Apex テストクラスの各メソッドは、階層カスタム設定の値を挿入できます。この動作は、別のテストメソッドに挿入された階層カスタム設定レコードと同じ SetupOwnerId 値がメソッドにある場合も当てはまります。
  • API バージョン 42.0 以降では、階層カスタム設定を testSetup メソッドに挿入する場合、同じ SetupOwnerId を持つ階層カスタム設定レコードをテストメソッドに挿入すると、DUPLICATE_VALUE 例外が発生します。

メモ

getInstance()

現在のユーザーのカスタム設定データセットレコードを返します。カスタム設定レコードに返される項目は、階層内で定義された最下位レベル項目に基づいてマージされます。

署名

public CustomSetting__c getInstance()

戻り値

型: CustomSetting__c

使用方法

ユーザーにカスタム設定データが定義されていない場合、このメソッドは新しいカスタム設定オブジェクトを返します。新しいカスタム設定オブジェクトには、null に設定された ID と、より上位の階層からマージされた項目が含まれます。この新しいカスタム設定レコードをユーザーに追加するには、insert または upsert を使用します。階層にカスタム設定データが定義されていない場合、ユーザー ID が含まれる SetupOwnerId 項目を除き、返されるカスタム設定の項目は空です。

Salesforce API バージョン 21.0 以前を使用して保存された Apex の場合、このメソッドは、階層内の最下位レベルに定義されている項目値から差し込まれた項目を持つ、カスタム設定データセットレコードを返します。差し込みはユーザーから開始します。また、階層にカスタム設定データが定義されていない場合、このメソッドは null を返します。

メモ

このメソッドは現在のユーザーの getInstance(User_Id) へのメソッドコールと同じです。

  • ユーザーに定義されているカスタム設定データセット: 「山田太郎」というユーザー、「システム管理者」というプロファイル、および組織全体に定義されたカスタム設定データセットがあり、コードを実行しているユーザーが山田太郎である場合、このメソッドは、山田太郎に定義されているカスタム設定レコードを返します。
  • 差し込み項目: 「山田太郎」というユーザーと「システム管理者」というプロファイルに項目 A および項目 B を持つカスタム設定データセットがあるとします。項目 A は山田太郎に定義されており、項目 B は null であるがシステム管理者プロファイルに定義されている場合、このメソッドは、山田太郎には、山田太郎の項目 A とシステム管理者プロファイルから得た項目 B を持つカスタム設定レコードを返します。
  • ユーザーにカスタム設定データセットレコードが定義されていない: 現在のユーザーが「井上花子」であり、「システム管理者」プロファイルを共有しているが、ユーザーとしての井上花子に定義されたデータがない場合、このメソッドは、ID が null で、階層内で最下位レベルに定義された項目に基づいて差し込まれた項目を持つ、新しいカスタム設定レコードを返します。

getInstance(userId)

指定されたユーザー ID のカスタム設定データセットレコードを返します。最下位レベルのカスタム設定レコードと項目が返されます。ユーザーレベルのカスタム設定のデータを明示的に取得する場合に使用します。

署名

public CustomSetting__c getInstance(ID userId)

パラメーター

userId
型: ID

戻り値

型: CustomSetting__c

使用方法

ユーザーにカスタム設定データが定義されていない場合、このメソッドは新しいカスタム設定オブジェクトを返します。新しいカスタム設定オブジェクトには、null に設定された ID と、より上位の階層からマージされた項目が含まれます。この新しいカスタム設定レコードをユーザーに追加するには、insert または upsert を使用します。階層にカスタム設定データが定義されていない場合、ユーザー ID が含まれる SetupOwnerId 項目を除き、返されるカスタム設定の項目は空です。

Salesforce API バージョン 21.0 以前を使用して保存された Apex の場合、このメソッドは、階層内の最下位レベルに定義されている項目値から差し込まれた項目を持つ、カスタム設定データセットレコードを返します。差し込みはユーザーから開始します。また、階層にカスタム設定データが定義されていない場合、このメソッドは null を返します。

メモ

getInstance(profileId)

指定されたプロファイル ID のカスタム設定データセットレコードを返します。最下位レベルのカスタム設定レコードと項目が返されます。プロファイルレベルのカスタム設定のデータを明示的に取得する場合に使用します。

署名

public CustomSetting__c getInstance(ID profileId)

パラメーター

profileId
型: ID

戻り値

型: CustomSetting__c

使用方法

プロファイルにカスタム設定データが定義されていない場合、このメソッドは新しいカスタム設定レコードを返します。新しいカスタム設定オブジェクトには、null に設定された ID と、組織のデフォルト値からマージされた項目が含まれます。この新しいカスタム設定をプロファイルに追加するには、insert または upsert を使用します。階層にカスタム設定データが定義されていない場合、プロファイル ID が含まれる SetupOwnerId 項目を除き、返されるカスタム設定の項目は空です。

Salesforce API バージョン 21.0 以前を使用して保存された Apex の場合、このメソッドは、階層の最下位レベルに定義されている項目値から差し込まれた項目を持つ、カスタム設定データセットレコードを返します。差し込みはプロファイルから開始します。また、階層にカスタム設定データが定義されていない場合、このメソッドは null を返します。

メモ

getOrgDefaults()

組織のカスタム設定データセットレコードを返します。

署名

public CustomSetting__c getOrgDefaults()

戻り値

型: CustomSetting__c

使用方法

組織にカスタム設定データが定義されていない場合、このメソッドは空のカスタム設定オブジェクトを返します。

Salesforce API バージョン 21.0 以前を使用して保存された Apex の場合、このメソッドは、組織にカスタム設定データが定義されていなければ、null を返します。

メモ

getValues(userId)

指定されたユーザー ID のカスタム設定データセットレコードを返します。

署名

public CustomSetting__c getValues(ID userId)

パラメーター

userId
型: ID

戻り値

型: CustomSetting__c

使用方法

ユーザーレベルで定義されているカスタム設定データのサブセットが���要な場合にのみ使用します。たとえば、組織レベルで「alpha」の値を割り当てられているカスタム設定項目があり、ユーザーレベルまたはプロファイルレベルで値が割り当てられていないとします。getValues(UserId) は、このカスタム設定項目に null を返します。

getValues(profileId)

指定されたプロファイル ID のカスタム設定データセットを返します。

署名

public CustomSetting__c getValues(ID profileId)

パラメーター

profileId
型: ID

戻り値

型: CustomSetting__c

使用方法

プロファイルレベルで定義されているカスタム設定データのサブセットが必要な場合にのみ使用します。たとえば、組織レベルで「alpha」の値を割り当てられているカスタム設定項目があり、ユーザーレベルまたはプロファイルレベルで値が割り当てられていないとします。getValues(ProfileId) は、このカスタム設定項目に null を返します。