sObject 項目へのアクセス
Java の場合と同様、単純なドット表記を使用して sObject 項目にアクセスしたり、変更したりできます。次に例を示します。
1Account a = new Account();
2a.Name = 'Acme'; // Access the account name field and assign it 'Acme'[作成者] または [最終更新日] など、システムによって生成された項目は変更できません。変更しようとすると、Apex ランタイムエンジンはエラーを生成します。また、数式項目値と、コンテキストユーザ参照専用の他の項目値も変更できません。
Account などの特定のオブジェクトではない汎用 sObject 種別の場合、ドット表記を使用して Id 項目のみを取得できます。Salesforce API バージョン 27.0 以降を使用して保存された Apex コードの Id 項目を設定できます。また、汎用の sObject put メソッドおよび get メソッドも使用できます。「SObject クラス」を参照してください。
この例では、Id 項目にアクセスする方法および汎用 sObject で許可されない操作を示します。
1Account a = new Account(Name = 'Acme', BillingCity = 'San Francisco');
2insert a;
3sObject s = [SELECT Id, Name FROM Account WHERE Name = 'Acme' LIMIT 1];
4// This is allowed
5ID id = s.Id;
6// The following line results in an error when you try to save
7String x = s.Name;
8// This line results in an error when you try to save using API version 26.0 or earlier
9s.Id = [SELECT Id FROM Account WHERE Name = 'Acme' LIMIT 1].Id;sObject で処理を実行する場合、最初にその sObject を特定のオブジェクトに変換することをお勧めします。次に例を示します。
1Account a = new Account(Name = 'Acme', BillingCity = 'San Francisco');
2insert a;
3sObject s = [SELECT Id, Name FROM Account WHERE Name = 'Acme' LIMIT 1];
4ID id = s.ID;
5Account convertedAccount = (Account)s;
6convertedAccount.name = 'Acme2';
7update convertedAccount;
8Contact sal = new Contact(FirstName = 'Sal', Account = convertedAccount);次の例は、SOSL で取得したしたレコードのセットのオブジェクト型をどのように判定するかについて示しています。汎用 sObject レコードを取引先責任者、リード、または取引先に変換すると、項目をそれぞれ次のように変更できます。
1public class convertToCLA {
2 List<Contact> contacts;
3 List<Lead> leads;
4 List<Account> accounts;
5
6 public void convertType(Integer phoneNumber) {
7 List<List<sObject>> results = [FIND '4155557000'
8 IN Phone FIELDS
9 RETURNING Contact(Id, Phone, FirstName, LastName),
10 Lead(Id, Phone, FirstName, LastName), Account(Id, Phone, Name)];
11 sObject[] records = ((List<sObject>)results[0]);
12
13 if (!records.isEmpty()) {
14 for (Integer i = 0; i < records.size(); i++) {
15 sObject record = records[i];
16 if (record.getSObjectType() == Contact.sObjectType) {
17 contacts.add((Contact) record);
18 } else if (record.getSObjectType() == Lead.sObjectType){
19 leads.add((Lead) record);
20 } else if (record.getSObjectType() == Account.sObjectType) {
21 accounts.add((Account) record);
22 }
23 }
24 }
25 }
26}