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

sObjects のリスト

リストには、他の種別の要素の 1 つである sObject を含めることができます。sObject のリストは、データの一括処理に使用できます。

リストを使用して、sObject を保存できます。リストは、SOQL クエリを使用するときに便利です。SOQL クエリは sObject データを返し、このデータを sObject のリストに保存できます。また、1 回のコールでの sObject のリストの挿入など、一括処理の実行にリストを使用することもできます。

sObject のリストを宣言するには、<> 文字で囲まれた sObject 型の前に List キーワードを使用します。次に例を示します。

1// Create an empty list of Accounts
2List<Account> myList = new List<Account>();

SOQL クエリによるリストの自動入力

List 変数を SOQL クエリの結果に直接割り当てることができます。SOQL クエリは、返されたレコードが入力された新しいリストを返します。宣言された List 変数に、クエリされるものと同じ sObject が含まれていることを確認してください。または、汎用 sObject データ型を使用することもできます。

この例では、取引先のリストを宣言して SOQL クエリの戻り値に割り当てる方法を示します。このクエリは、Id 項目と Name 項目を含む最大 1,000 個の取引先レコードを返します。

1// Create a list of account records from a SOQL query
2List<Account> accts = [SELECT Id, Name FROM Account LIMIT 1000];

リスト要素の追加と取得

プリミティブデータ型のリスト同様、Apex で提供される List メソッドを使用して、sObject リストの要素にアクセスして設定できます。次に例を示します。

1List<Account> myList = new List<Account>(); // Define a new list
2Account a = new Account(Name='Acme'); // Create the account first
3myList.add(a);                    // Add the account sObject
4Account a2 = myList.get(0);      // Retrieve the element at index 0

一括処理

DML 操作にリストを渡すことで、sObject のリストを一括処理できます。この例では、取引先のリストを挿入する方法を示します。
1// Define the list
2List<Account> acctList = new List<Account>(); 
3// Create account sObjects
4Account a1 = new Acount(Name='Account1'); 
5Account a2 = new Acount(Name='Account2'); 
6// Add accounts to the list
7acctList.add(a1);
8acctList.add(a2);
9// Bulk insert the list
10insert acctList;

レコード ID の生成

Apex は、リストがデータ操作言語 (DML) ステートメントによってデータベースに正常に挿入または更新されると、sObject リストの各オブジェクトに ID を自動的に生成します。従って、sObjects のリストに同じ sObject が複数含まれる場合は、それが null ID を持つ場合であっても、sObject のリストの挿入や更新は行えません。この場合、2 つの ID がメモリ内の同じ構造に書き込まれなければならないことになり、これは不正処理となります。

たとえば、次のコードブロックの insert ステートメントは、同じ sObject (a) への 2 つの参照が含まれるリストを挿入しようとするため、ListException を生成します。

1try {
2
3   // Create a list with two references to the same sObject element
4   Account a = new Account();
5   List<Account> accs = new List<Account>{a, a};
6
7   // Attempt to insert it...
8   insert accs;
9
10   // Will not get here
11   System.assert(false);
12} catch (ListException e) {
13   // But will get here
14}

sObject の一次元リストの配列表記の使用

または、配列表記 (角括弧) を使用して、sObject のリストを宣言して参照することもできます。

次の例では、配列表記を使用して取引先のリストを宣言します。
1Account[] accts = new Account[1];
次の例では、角括弧を使用してリストに要素を追加します。
1accts[0] = new Account(Name='Acme2');

sObject リストの配列表記を使用したその他いくつかの例を次に示します。

説明
1List<Account> accts = new Account[]{};
要素のない取引先リストを定義します。
1List<Account> accts = new Account[]
2         {new Account(), null, new Account()};
3 つの取引先にメモリが割り当てられた取引先リストを定義します。最初の位置に新しい取引先オブジェクト、2 番目の位置に null、3 番目の位置に別の新しい取引先オブジェクトが割り当てられます。
1List<Contact> contacts = new List<Contact>
2                                  (otherList);
新しいリストで取引先責任者リストを定義します。