Schema.sObjectTypeを取得する方法
// 1. 静的に取得
Schema.SObjectType accountType = Account.sObjectType;
// 2. インスタンスから取得
Schema.SObjectType accountType = new Account().getSObjectType();
// 3. GlobalDescribeから取得
Schema.SObjectType t = Schema.getGlobalDescribe().get('Account');
レコードタイプ名による取得
下記のように getRecordTypeInfosByName() でレコードタイプの一覧を取得した場合は Nameはラベル名になることを注意。
TranslationWorkbenchを使っている場合、ラベルはロケールによって変わるため、実行環境によって名前が変わってしまう。
レコードタイプ名(英字)でIDを取得したい場合は、SOQLクエリーでDeveloperNameを取得する。-> ここを参照
Map<String, Schema.RecordTypeInfo> rtByNameCC = Schema.SObjectType.Contact.getRecordTypeInfosByName();
メタデータを使ってオブジェクトの項目名を全て取得する
private static String getAllFieldsNames(Schema.SObjecttype type) {
String[] fieldstr = New List<String>{};
Map<String, Schema.sObjectField> omap =
type.getDescribe().fields.getMap();
for(String f: omap.keySet()) {
//一部の項目は除外
if (f != 'IsDeleted' &&
f != 'SystemModstamp' &&
fieldstr.add(f);
}
}
return String.join(fieldstr, ',');
}
//呼出側
Opportunity[] opps =
Database.query(
' SELECT ' + getAllFieldsNames(Opportunity.SObjecttype) +
' FROM Opportunity WHERE Id=\'' + oppId + '\''
);