SObject クラス
名前空間
使用方法
SObject メソッドはすべてインスタンスメソッドです。つまり、取引先または取引先責任者など、sObject インスタンスによってコールされ、sObject インスタンス上で動作します。次に、sObject のインスタンスメソッドを示します。
sObject についての詳細は、「sObjects の操作」を参照してください。
sObject のメソッド
sObject のメソッドは次のとおりです。すべてインスタンスメソッドです。
addError(errorMsg)
署名
public Void addError(String errorMsg)
パラメーター
- errorMsg
- 型: String
-
レコードにマークを付けるエラーメッセージです。
戻り値
型: Void
使用方法
insert トリガーおよび update トリガーの Trigger.new、および delete トリガーの Trigger.old で使用すると、アプリケーションインターフェースにエラーメッセージが表示されます。
Visualforce コントローラーで使用すると、生成されたメッセージが、そのページのエラーコレクションに追加されます。詳細は、『Visualforce 開発者ガイド』の「入力規則と標準コントローラー」を参照してください。
例
1Trigger.new[0].addError('bad');addError(errorMsg, escape)
署名
public Void addError(String errorMsg, Boolean escape)
パラメーター
戻り値
型: Void
使用方法
エスケープ文字は、\n、<、>、&、"、\、\u2028、\u2029、\u00a9 です。このため、HTML マークアップは表示されず、その代わりに、Salesforce ユーザーインターフェースにテキストとして表示されます。
例
1Trigger.new[0].addError('Fix & resubmit', false);addError(exceptionError)
署名
public Void addError(Exception exceptionError)
パラメーター
- exceptionError
- 型: System.Exception
-
レコードにマークを付けるエラーメッセージを含む例外オブジェクトまたはカスタム例外オブジェクトです。
戻り値
型: Void
使用方法
insert トリガーおよび update トリガーの Trigger.new、および delete トリガーの Trigger.old で使用すると、アプリケーションインターフェースにエラーメッセージが表示されます。
Visualforce コントローラーで使用すると、生成されたメッセージが、そのページのエラーコレクションに追加されます。詳細は、『Visualforce 開発者ガイド』の「入力規則と標準コントローラー」を参照してください。
例
1public class MyException extends Exception {}
2Trigger.new[0].addError(new myException('Invalid Id'));addError(exceptionError, escape)
署名
public Void addError(Exception exceptionError, Boolean escape)
パラメーター
- exceptionError
- 型: System.Exception
-
レコードにマークを付けるエラーメッセージを含む例外オブジェクトまたはカスタム例外オブジェクトです。
- escape
- 型: Boolean
-
カスタムエラーメッセージ内の HTML マークアップがエスケープされるか (true)、否か (false) を示します。このパラメーターは Lightning Experience と Salesforce モバイルアプリケーションの両方で無視され、HTML は常にエスケープされます。escape パラメーターは Salesforce Classic でのみ適用されます。
戻り値
型: Void
使用方法
例
1public class MyException extends Exception {}
2Trigger.new[0].addError(new myException('Invalid Id & other issues', false));addError(errorMsg)
署名
public Void addError(String errorMsg)
パラメーター
- errorMsg
- 型: String
戻り値
型: Void
使用方法
- before insert トリガーおよび before update トリガーの Trigger.new、および before delete トリガーの Trigger.old で使用すると、アプリケーションインターフェースにエラーが表示されます。
- Visualforce コントローラーで使用すると、inputField コンポーネントが項目に結合されている場合、コンポーネントにメッセージが添付されます。詳細は、『Visualforce 開発者ガイド』の「入力規則と標準コントローラー」を参照してください。
- 項目識別子は実際には呼び出しオブジェクトではなく、sObject が呼び出し元であるため、このメソッドは専門分野に特化されます。項目を使用して、エラーの表示に使用する必要がある項目を識別します。
例
1Trigger.new[0].myField__c.addError('bad');addError(errorMsg, escape)
署名
public Void addError(String errorMsg, Boolean escape)
パラメーター
戻り値
型:
使用方法
例
1Trigger.new[0].myField__c.addError('Fix & resubmit', false);addError(fieldName, errorMsg)
署名
public void addError(String fieldName, String errorMsg)
パラメーター
戻り値
型: void
使用方法
項目名が空の文字列または null の場合、エラーは sObject に関連付けられ、特定の項目には関連付けられません。
例
1// Add an error to an SObject field using the addError() method.
2Account acct = new Account(name = 'TestAccount');
3acct.addError('name', 'error in name field');
4// Use the hasErrors() method to verify that the error is added, and then the getErrors() method to validate the error.
5System.Assert(acct.hasErrors());
6List<Database.Error> errors = acct.getErrors();
7System.AssertEquals(1, errors.size());addError(fieldToken, errorMsg)
署名
public void addError(Schema.SObjectField fieldToken, String errorMsg
パラメーター
- fieldToken
- 型: Schema.SObjectField
- sObject インスタンスの項目。
- errorMsg
- 型: String
- 追加す���エラーメッセージ。エラーメッセージ文字列内の HTML 特殊文字は常にエスケープされます。
戻り値
型: void
使用方法
このメソッドを使用して、標準オブジェクトまたはカスタムオブジェクトの指定された項目トークンにエラーを追加します。fieldToken が null の場合、エラーは sObject に関連付けられ、特定の項目には関連付けられません。
例
1// Add an error to a field of an SObject instance using the addError() method.
2Account acct = new Account(name = 'TestAccount');
3Schema.DescribeFieldResult nameDesc = Account.name.getDescribe();
4Schema.sObjectField nameField = nameDesc.getSObjectField();
5acct.addError(nameField, 'error is name field');
6// Use the hasErrors() method to verify that the error is added, and then the getErrors() method to validate the error.
7System.Assert(acct.hasErrors());
8List<Database.Error> errors = acct.getErrors();
9System.AssertEquals(1, errors.size());addError(fieldName, errorMsg, escape)
署名
public void addError(String fieldName, String errorMsg, Boolean escape)
パラメーター
戻り値
型: void
使用方法
項目名が空の文字列または null の場合、エラーは sObject に関連付けられ、特定の項目には関連付けられません。
エスケープ文字は、\n、<、>、&、"、\、\u2028、\u2029、\u00a9 です。このため、HTML マークアップは表示されず、その代わりに、Salesforce ユーザーインターフェースにテキストとして表示されます。
例
1// Add an error to an SObject field using the addError() method.
2Account acct = new Account(name = 'TestAccount');
3acct.addError('name', 'error in name field', false);
4// Use the hasErrors() method to verify that the error is added, and then the getErrors() method to validate the error.
5System.Assert(acct.hasErrors());
6List<Database.Error> errors = acct.getErrors();
7System.AssertEquals(1, errors.size());addError(fieldToken, errorMsg, escape)
署名
public void addError(Schema.SObjectField fieldToken, String errorMsg, Boolean escape)
パラメーター
- fieldToken
- 型: Schema.SObjectField
- sObject インスタンスの項目。
- errorMsg
- 型: String
- 追加するエラーメッセージ。
- escape
- 型: Boolean
-
カスタムエラーメッセージ内の HTML マークアップがエスケープされるか (true)、否か (false) を示します。このパラメーターは Lightning Experience と Salesforce モバイルアプリケーションの両方で無視され、HTML は常にエスケープされます。escape パラメーターは Salesforce Classic でのみ適用されます。
戻り値
型: void
使用方法
このメソッドを使用して、標準オブジェクトまたはカスタムオブジェクトの指定された項目トークンにエラーを追加します。fieldToken が null の場合、エラーは sObject に関連付けられ、特定の項目には関連付けられません。
エスケープ文字は、\n、<、>、&、"、\、\u2028、\u2029、\u00a9 です。このため、HTML マークアップは表示されず、その代わりに、Salesforce ユーザーインターフェースにテキストとして表示されます。
例
1// Add an error to a field of an SObject instance using the addError() method.
2Account acct = new Account(name = 'TestAccount');
3Schema.DescribeFieldResult nameDesc = Account.name.getDescribe();
4Schema.sObjectField nameField = nameDesc.getSObjectField();
5acct.addError(nameField, 'error is name field', false);
6// Use the hasErrors() method to verify that the error is added, and then the getErrors() method to validate the error.
7System.Assert(acct.hasErrors());
8List<Database.Error> errors = acct.getErrors();
9System.AssertEquals(1, errors.size());clear()
署名
public Void clear()
戻り値
型: Void
例
1Account acc = new account(Name = 'Acme');
2acc.clear();
3Account expected = new Account();
4system.assertEquals(expected, acc);clone(preserveId, isDeepClone, preserveReadonlyTimestamps, preserveAutonumber)
署名
public SObject clone(Boolean preserveId, Boolean isDeepClone, Boolean preserveReadonlyTimestamps, Boolean preserveAutonumber)
パラメーター
- preserveId
- 型: Boolean
- (省略可能) 元のオブジェクトの ID を重複で保持するか削除するかを指定します。true に設定すると、ID は重複する ID にコピーされます。デフォルトは false であるため、ID はクリアされます。
- isDeepClone
- 型: Boolean
- (省略可能) メソッドで SObject 項目の完全コピーを作成するか参照のみを作成するかを決定します。
- true に設定すると、メソッドは SObject の完全コピーを作成します。リレーション項目など、SObject のすべての項目はメモリ内に複製されます。その結果、コピーした SObject の項目を変更しても、元の SObject は影響されません。
- false に設定すると、メソッドは SObject 項目の浅いコピーを作成します。コピーされたすべてのリレーション項目は元の SObject を使用します。その結果、コピーされた SObject でリレーション項目を変更すると、元の SObject の対応する項目も変更され、元の SObject で変更するとコピーされた SObject も変更されます。デフォルトは、false です。
- preserveReadonlyTimestamps
- 型: Boolean
- (省略可能) 参照のみのタイムスタンプ項目を重複で保持するか削除するかを指定します。true に設定すると、参照のみの項目 CreatedById、CreatedDate、LastModifiedById、および LastModifiedDate は重複項目にコピーされます。デフォルトは false であるため、値はクリアされます。
- preserveAutonumber
- 型: Boolean
- (省略可能) 元のオブジェクトの自動採番項目を複製で保持するか削除するかを指定します。true に設定すると、自動採番項目はコピーされたオブジェクトにコピーされます。デフォルトは false であるため、自動採番項目はクリアされます。
戻り値
型: SObject (同じデータ型)
使用方法
例
1Account acc = new account(Name = 'Acme', Description = 'Acme Account');
2Account clonedAcc = acc.clone(false, false, false, false);
3System.assertEquals(acc, clonedAcc);get(fieldName)
署名
public Object get(String fieldName)
パラメーター
- fieldName
- 型: String
戻り値
型: Object
使用方法
詳細は、「動的 SOQL」を参照してください。
例
1Account acc = new account(Name = 'Acme', Description = 'Acme Account');
2String description = (String)acc.get('Description');
3System.assertEquals('Acme Account', description);バージョン管理動作の変更
API バージョン 34.0 以降では、このメソッドを使用して項目の対応付けから項目を取得するには、名前空間名を含める必要があります。たとえば、fields 項目の対応付けから MyNamespace 名前空間の account__c 項目を取得するには、fields.get(‘MyNamespace__account__c’) を使用します。
get(field)
署名
public Object get(Schema.sObjectField field)
パラメーター
- field
- 型: Schema.SObjectField
戻り値
型: Object
例
1Account acc = new account(Name = 'Acme', Description = 'Acme Account');
2String description = (String)acc.get(Schema.Account.Description);
3System.assertEquals('Acme Account', description);getCloneSourceId()
署名
public Id getCloneSourceId()
戻り値
型: Id
使用方法
A を B にコピーし、B を C にコピーし、C を D にコピーすると、B と C と D のすべてがコピー元である A を参照します。
例
1Account acc0 = new Account(Name = 'Acme');
2insert acc0;
3Account acc1 = acc0.clone();
4Account acc2 = acc1.clone();
5Account acc3 = acc2.clone();
6Account acc4 = acc3.clone();
7System.assert(acc0.Id != null);
8System.assertEquals(acc0.Id, acc1.getCloneSourceId());
9System.assertEquals(acc0.Id, acc2.getCloneSourceId());
10System.assertEquals(acc0.Id, acc3.getCloneSourceId());
11System.assertEquals(acc0.Id, acc4.getCloneSourceId());
12System.assertEquals(null, acc0.getCloneSourceId());getOptions()
署名
public Database.DMLOptions getOptions()
戻り値
例
1Database.DMLOptions dmo = new Database.dmlOptions();
2dmo.assignmentRuleHeader.useDefaultRule = true;
3
4Account acc = new Account(Name = 'Acme');
5acc.setOptions(dmo);
6Database.DMLOptions accDmo = acc.getOptions();getPopulatedFieldsAsMap()
署名
public Map<String,Object> getPopulatedFieldsAsMap()
戻り値
型: Map<String,Object>
項目名とそれに対応する値の対応付け。
使用方法
- 項目が SOQL ステートメントで照会された。
- getPopulatedFieldsAsMap() メソッドへのコールの前に項目が明示的に設定された。
次の例では、SOQL クエリの後に getPopulatedFieldsAsMap() メソッドで返された対応付けを反復処理します。
1Account a = new Account();
2a.name = 'TestMapAccount1';
3insert a;
4a = [select Id,Name from Account where id=:a.Id];
5Map<String, Object> fieldsToValue = a.getPopulatedFieldsAsMap();
6
7for (String fieldName : fieldsToValue.keySet()){
8 System.debug('field name is ' + fieldName + ', value is ' +
9 fieldsToValue.get(fieldName));
10}
11
12// Example debug statement output:
13// DEBUG|field name is Id, value is 001R0000003EPPkIAO
14// DEBUG|field name is Name, value is TestMapAccount1次の例では、SObject の項目が明示的に設定された後に getPopulatedFieldsAsMap() メソッドで返された対応付けを反復処理します。
1Account a = new Account();
2a.name = 'TestMapAccount2';
3a.phone = '123-4567';
4insert a;
5Map<String, Object> fieldsToValue = a.getPopulatedFieldsAsMap();
6
7for (String fieldName : fieldsToValue.keySet()) {
8 System.debug('field name is ' + fieldName + ', value is ' +
9 fieldsToValue.get(fieldName));
10}
11
12// Example debug statement output:
13// DEBUG|field name is Name, value is TestMapAccount2
14// DEBUG|field name is Phone, value is 123-4567
15// DEBUG|field name is Id, value is 001R0000003EPPpIAO次の例は、関連オブジェクトに getPopulatedFieldsAsMap() メソッドを使用する方法を示します。
1Account a = new Account();
2a.name='TestMapAccount3';
3insert a;
4Contact c = new Contact();
5c.firstname='TestContactFirstName';
6c.lastName ='TestContactLastName';
7c.accountid = a.id;
8insert c;
9
10c = [SELECT id, Contact.Firstname, Contact.Account.Name FROM Contact
11 where id=:c.id limit 1];
12Map<String, Object> fieldsToValue = c.getPopulatedFieldsAsMap();
13
14// To get the fields on Account, get the Account object
15// and call getMapPopulatedFieldsAsMap() on that object.
16
17a = (Account)fieldsToValue.get('Account');
18fieldsToValue = a.getPopulatedFieldsAsMap();
19
20for (String fieldName : fieldsToValue.keySet()) {
21 System.debug('field name is ' + fieldName + ', value is ' +
22 fieldsToValue.get(fieldName));
23}
24
25// Example debug statement output:
26// DEBUG|field name is Id, value is 001R0000003EPPuIAO
27// DEBUG|field name is Name, value is TestMapAccount3バージョン管理動作の変更
API バージョン 39.0 以降の場合、getPopulatedFieldsAsMap は、SObject に設定されたすべての値を返します。これは、レコードのクエリ後に値が設定された場合も当てはまります。この動作は、SObject を生成したクラスのバージョンではなく、このメソッドをコールする Apex クラスのバージョンによって決まります。API バージョン 20.0 で SObject を照会した後、API バージョン 40.0 でクラスのこのメソッドをコールすると、一連の項目がすべて取得されます。
getSObject(fieldName)
署名
public SObject getSObject(String fieldName)
パラメーター
- fieldName
- 型: String
戻り値
型: SObject
例
1Account acc = new account(Name = 'Acme', Description = 'Acme Account');
2insert acc;
3Contact con = new Contact(Lastname = 'AcmeCon', AccountId = acc.id);
4insert con;
5
6SObject contactDB =
7 [SELECT Id, AccountId, Account.Name FROM Contact WHERE id = :con.id LIMIT 1];
8Account a = (Account)contactDB.getSObject('Account');
9System.assertEquals('Acme', a.name);getSObject(field)
署名
public SObject getSObject(Schema.SObjectField field)
パラメーター
- field
- 型: Schema.SObjectField
戻り値
型: SObject
使用方法
メソッドが多態的な項目を参照する場合は、Name オブジェクトが返されます。SOQL SELECT ステートメントで TYPEOF 句を使用して、結果を直接取得します。取得される結果は、多態的な項目で参照されるランタイムオブジェクト種別によって異なります。「SOQL クエリの多態的なリレーションの処理」を参照してください。
例
1Account acc = new account(name = 'Acme', description = 'Acme Account');
2insert acc;
3Contact con = new contact(lastname = 'AcmeCon', accountid = acc.id);
4insert con;
5
6Schema.DescribeFieldResult fieldResult = Contact.AccountId.getDescribe();
7Schema.SObjectField field = fieldResult.getSObjectField();
8
9SObject contactDB =
10 [SELECT Id, AccountId, Account.Name FROM Contact WHERE id = :con.id LIMIT 1];
11Account a = (Account)contactDB.getSObject(field);
12System.assertEquals('Acme', a.name);getSObjects(fieldName)
署名
public SObject[] getSObjects(String fieldName)
パラメーター
- fieldName
- 型: String
戻り値
型: SObject[]
使用方法
詳細は、「動的 DML」を参照してください。
例
1Account acc = new account(name = 'Acme', description = 'Acme Account');
2insert acc;
3Contact con = new contact(lastname = 'AcmeCon', accountid = acc.id);
4insert con;
5
6SObject[] a = [SELECT id, (SELECT Name FROM Contacts LIMIT 1) FROM Account WHERE id = :acc.id];
7SObject[] contactsDB = a.get(0).getSObjects('Contacts');
8String fieldValue = (String)contactsDB.get(0).get('Name');
9System.assertEquals('AcmeCon', fieldValue);getSObjects(fieldName)
署名
public SObject[] getSObjects(Schema.SObjectType fieldName)
パラメーター
- fieldName
- 型: Schema.SObjectType
戻り値
型: SObject[]
getSObjectType()
署名
public Schema.SObjectType getSObjectType()
戻り値
使用方法
詳細は、apex_dynamic_describe_objects_understanding を参照してください。
例
1Account acc = new Account(name = 'Acme', description = 'Acme Account');
2Schema.SObjectType expected = Schema.Account.getSObjectType();
3System.assertEquals(expected, acc.getSObjectType());getQuickActionName()
署名
public String getQuickActionName()
戻り値
型: String
例
1trigger accTrig2 on Contact (before insert) {
2 for (Contact c : Trigger.new) {
3 if (c.getQuickActionName() == QuickAction.CreateContact) {
4 c.WhereFrom__c = 'GlobaActionl';
5 } else if (c.getQuickActionName() == Schema.Account.QuickAction.CreateContact) {
6 c.WhereFrom__c = 'AccountAction';
7 } else if (c.getQuickActionName() == null) {
8 c.WhereFrom__c = 'NoAction';
9 } else {
10 System.assert(false);
11 }
12 }
13}hasErrors()
署名
public Boolean hasErrors()
戻り値
型: Boolean
isClone()
署名
public Boolean isClone()
戻り値
型: Boolean
例
1Account acc = new Account(Name = 'Acme');
2insert acc;
3Account acc2 = acc.clone();
4// Test before saving
5System.assertEquals(true, acc2.isClone());
6insert acc2;
7// Test after saving
8System.assertEquals(true, acc2.isClone());isSet(fieldName)
署名
public Boolean isSet(String fieldName)
パラメーター
- fieldName
- 型: String
戻り値
型: Boolean
使用方法
isSet メソッドは、項目に特定のユーザーが組織権限またはその他の特殊なアクセス権によってアクセス可能であるかどうかを確認しません。
例
1Contact c = new Contact(LastName = 'Joyce');
2System.assertEquals(true, c.isSet('LastName'));
3System.assertEquals(false, c.isSet('FirstName')); // FirstName field is not written to
4c.firstName = null;
5System.assertEquals(true, c.isSet('FirstName')); //FirstName field is written toisSet(field)
署名
public Boolean isSet(Schema.SObjectField field)
パラメーター
- field
- 型:SObjectField クラス
戻り値
型: Boolean
使用方法
isSet メソッドは、項目に特定のユーザーが組織権限またはその他の特殊なアクセス権によってアクセス可能であるかどうかを確認しません。
例
1Contact newContact = new Contact(LastName = 'Joyce');
2insert(newContact); //Insert a new contact with last name Joyce
3Contact c = [SELECT FirstName FROM Contact WHERE Id = :newContact.Id];
4System.assertEquals(true, c.isSet(Contact.FirstName)); //FirstName field in query
5System.assertEquals(false, c.isSet(Contact.LastName)); //LastName field not in queryput(fieldName, value)
署名
public Object put(String fieldName, Object value)
パラメーター
- fieldName
- 型: String
- value
- 型: Object
戻り値
型: Object
例
1Account acc = new Account(name = 'test', description = 'old desc');
2String oldDesc = (String)acc.put('description', 'new desc');
3System.assertEquals('old desc', oldDesc);
4System.assertEquals('new desc', acc.description);put(field, value)
署名
public Object put(Schema.SObjectField field, Object value)
パラメーター
- field
- 型: Schema.SObjectField
- value
- 型: Object
戻り値
型: Object
例
1Account acc = new Account(name = 'test', description = 'old desc');
2String oldDesc = (String)acc.put(Schema.Account.Description, 'new desc');
3System.assertEquals('old desc', oldDesc);
4System.assertEquals('new desc', acc.description);putSObject(fieldName, value)
署名
public SObject putSObject(String fieldName, SObject value)
戻り値
型: SObject
例
1Account acc = new Account(name = 'Acme', description = 'Acme Account');
2insert acc;
3Contact con = new contact(lastname = 'AcmeCon', accountid = acc.id);
4insert con;
5Account acc2 = new account(name = 'Not Acme');
6
7Contact contactDB =
8 (Contact)[SELECT Id, AccountId, Account.Name FROM Contact WHERE id = :con.id LIMIT 1];
9Account a = (Account)contactDB.putSObject('Account', acc2);
10System.assertEquals('Acme', a.name);
11System.assertEquals('Not Acme', contactDB.Account.name);putSObject(fieldName, value)
署名
public SObject putSObject(Schema.SObjectType fieldName, SObject value)
パラメーター
- fieldName
- 型: Schema.SObjectType
- value
- 型: SObject
戻り値
型: SObject
recalculateFormulas()
署名
public Void recalculateFormulas()
戻り値
型: Void
使用方法
このメソッドは、クロスオブジェクト数式を再計算しません。クロスオブジェクト数式項目と非クロスオブジェクト数式項目の両方があるオブジェクトでこのメソッドをコールすると、非クロスオブジェクト数式項目のみが再計算されます。
各 recalculateFormulas コールは、SOQL クエリの制限に含まれます。「実行ガバナと制限」を参照してください。
setOptions(DMLOptions)
署名
public Void setOptions(database.DMLOptions DMLOptions)
パラメーター
- DMLOptions
- 型: Database.DMLOptions
戻り値
型: Void
例
1Database.DMLOptions dmo = new Database.dmlOptions();
2dmo.assignmentRuleHeader.useDefaultRule = true;
3
4Account acc = new Account(Name = 'Acme');
5acc.setOptions(dmo);