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

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;

組織で個人取引先が有効になっている場合は、法人取引先と個人取引先の 2 種類の取引先を使用できます。コードが name を使用して新しい取引先を作成すると、法人取引先が作成されます。コードが LastName を使用する場合、個人取引先が作成されます。

メモ

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 = new List<Contact>();
3    List<Lead> leads = new List<Lead>();
4    List<Account> accounts = new List<Account>();
5 
6    public void convertType(String phoneNumber) {
7        List<List<SObject>> results = [FIND :phoneNumber 
8            IN Phone FIELDS 
9            RETURNING Contact(Id, Phone, FirstName, LastName), 
10            Lead(Id, Phone, FirstName, LastName), 
11            Account(Id, Phone, Name)];
12        List<SObject> records = new List<SObject>();
13        records.addAll(results[0]); //add Contact results to our results super-set
14        records.addAll(results[1]); //add Lead results
15        records.addAll(results[2]); //add Account results
16 
17        if (!records.isEmpty()) { 
18            for (Integer i = 0; i < records.size(); i++) { 
19                SObject record = records[i];
20                if (record.getSObjectType() == Contact.sObjectType) { 
21                    contacts.add((Contact) record);
22                } else if (record.getSObjectType() == Lead.sObjectType){ 
23                    leads.add((Lead) record);
24                } else if (record.getSObjectType() == Account.sObjectType) { 
25                    accounts.add((Account) record); 
26                }
27            }
28        }
29    }
30}

sObject 項目の使用

sObject 項目は、最初に設定することも、しないこともできます (未設定)。未設定の項目は、空白や null とは違います。sObject で DML 操作を実行するとき、設定済みの項目は変更できますが、未設定の項目は変更できません。

項目の現在の値を消去するには、項目を null に設定します。

メモ

Apex メソッドが sObject を取らない場合には、System.isSet(field) を使用することで、設定済み項目を特定できます。値を保持するために項目の設定を解除する場合は、最初に sObject インスタンスを作成します。次に、DML 操作に含める項目のみを適用します。

次のコード例は、sObject 項目が設定済みであるか未設定であるかを特定する方法について示しています。

1Contact nullFirst = new Contact(LastName='Codey', FirstName=null);
2System.assertEquals(true, nullFirst.isSet('FirstName'), 'FirstName is set to a literal value, so it counts as set');
3Contact unsetFirst = new Contact(LastName='Astro');
4System.assertEquals(false, unsetFirst.isSet('FirstName'), ‘FirstName is not set);

Boolean 型の sObject 項目を含む式は、sObject 項目が true の場合にのみ、true と評価されます。この項目が false または null の場合、式が false と評価されます。このサンプルコードは、Campaign オブジェクトの IsActive 項目が null かどうかを確認する式を示しています。この式は常に false に評価されるため、if ステートメント内のコードが実行されることはありません。

1Campaign cObj= new Campaign(); 
2...
3   if (cObj.IsActive == null) {
4  ... // IsActive is evaluated to false and this code block is not executed.
5   }