function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
ruparuparuparupa 

Schema.DisplayTypeのgetType メソッドで取得できるデータ型について

お世話になっております。

Schema.DisplayTypeのgetType メソッドで取得できるデータ型について分からなかったので質問させて頂きます。
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_enum_Schema_DisplayType.htm

次のデータ型をカスタム項目では作成できないのでしょうか?作成方法がわかりませんでした。
・anytype
・base64
・Combobox
・DataCategoryGroupReference
・ID
・Integer
・Reference
・Time

または、上記型の標準項目がありましたら教えていただきたいです。

どうぞよろしくお願いいたします。
Best Answer chosen by ruparupa
Taiki YoshikawaTaiki Yoshikawa
オブジェクトの項目で使用できるデータ型は項目作成画面で確認できるのが全てです。

User-added image

カスタム項目のデータ型
https://help.salesforce.com/HTViewHelpDoc?id=custom_field_types.htm&language=ja (https://help.salesforce.com/HTViewHelpDoc?id=custom_field_types.htm&language=ja)

Schema.DisplayTypeについて詳細に検証したことはないのですが、base64やTimeなどデータ型としては存在していなかったと思います。
たしか...ぐらいなのですが、IDはオブジェクトのID項目、Referenceは参照/主従関係項目、Comboboxは選択リスト・・・だったかもしれません。

All Answers

Taiki YoshikawaTaiki Yoshikawa
オブジェクトの項目で使用できるデータ型は項目作成画面で確認できるのが全てです。

User-added image

カスタム項目のデータ型
https://help.salesforce.com/HTViewHelpDoc?id=custom_field_types.htm&language=ja (https://help.salesforce.com/HTViewHelpDoc?id=custom_field_types.htm&language=ja)

Schema.DisplayTypeについて詳細に検証したことはないのですが、base64やTimeなどデータ型としては存在していなかったと思います。
たしか...ぐらいなのですが、IDはオブジェクトのID項目、Referenceは参照/主従関係項目、Comboboxは選択リスト・・・だったかもしれません。
This was selected as the best answer
ruparuparuparupa
Taikiさん

いつも丁寧なご回答ありがとうございます。

項目作成画面で確認できる全てのデータ型を試したのですが、
列挙させていただいたデータ型は作成できませんでした。
INTEGERとか小数点の位置を0にすれば作成できないのかなー、と思ったのですが、
ユーザが変更する可能性を考えて、INTEGERではなく、DOUBLEにしているのですかね。
ユーザが変更できない標準項目ではINTEGERも使われているようです。
リードの従業員数(NumberOfEmployees)はINTEGERでした。

検証用のすごくてきとうなコードなのですが、列挙したデータ型を使用している項目を表示するページをつくってみました。
public with sharing class GetObjectFieldsController {
    public List<String> fields  {get; set;}
    public List<String> objects;
    public Map<String, String> objLab;
    public GetObjectFieldsController () {
        objects = new List<String>();
        objLab = new Map<String, String>();
        Map<String, Schema.SObjectType> all = Schema.getGlobalDescribe();
        for (String key: all.keySet()) {
            Schema.DescribeSObjectResult sr = all.get(key).getDescribe();
            objects.add(key);
            objLab.put(key, sr.getLabel());
        }
        fields = new List<String>();
        for (String obj: objects){
            fields.add('★' + objLab.get(obj) + '(' + obj +')');
            for (Schema.SObjectField field: getSObjectFields(obj)) {
                Schema.DescribeFieldResult fr = field.getDescribe();
                if('INTEGER'.equals(String.valueOf(fr.getType())) || 'TIME'.equals(String.valueOf(fr.getType())) || 'ANYTYPE'.equals(String.valueOf(fr.getType())) || 'BASE64'.equals(String.valueOf(fr.getType()))  || 'COMBOBOX'.equals(String.valueOf(fr.getType()))  || 'DATACATEGORYGROUPREFERENCE'.equals(String.valueOf(fr.getType()))  ){   
                    fields.add(fr.getLabel() + '(' + fr.getName() + ')' + ' : ' + fr.getType());
                }
            }
        }
    }
    public List<Schema.SObjectField> getSObjectFields (String objectName) {
        Schema.DescribeSObjectResult sr = Schema.getGlobalDescribe().get(objectName).getDescribe();
        return sr.fields.getMap().values();
    }
}
<apex:page controller="GetObjectFieldsController">
    <apex:repeat value="{!fields}" var="field">
        {!field}<br />
    </apex:repeat>
</apex:page>
上記ページで、列挙したデータ型を使用している項目を確認できたのですが、
DATACATEGORYGROUPREFERENCE型だけみあたらなく、情報を探してみたのですが、
QuestionDataCategorySelectionというオブジェクトの項目にありました。
https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_questiondatacategoryselection.htm
ユーザが意図して作成するようなデータではない感じですかね。
base64やTimeなども標準項目ではありましたが、ユーザが編集したり(できたり)する項目ではないようなイメージを受けました。
Taiki YoshikawaTaiki Yoshikawa
おお!そうだったのですね!以前、カスタムオブジェクトの項目のデータ型を判定することがあったのですが、そのとき使われていなかったのでそういうものなのかと思っていました。標準の一部項目では使用されていたのですね。

サンプルコードありがとうございます。自分の環境でも一度確認してみようと思います。